Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/TGUI/Any.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ namespace tgui
using Any = std::any;

template <typename T>
[[deprecated("Use std::any_cast")]]
T AnyCast(const Any& obj)
{
return std::any_cast<T>(obj);
Expand Down
5 changes: 3 additions & 2 deletions include/TGUI/ObjectConverter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@
#include <TGUI/Outline.hpp>
#include <TGUI/TextStyle.hpp>
#include <TGUI/Texture.hpp>
#include <TGUI/Variant.hpp>

#include <variant>

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Expand Down Expand Up @@ -295,7 +296,7 @@ namespace tgui
private:
Type m_type = Type::None;

Variant<String, Font, Color, Outline, bool, float, Texture, TextStyles, std::shared_ptr<RendererData>> m_value;
std::variant<String, Font, Color, Outline, bool, float, Texture, TextStyles, std::shared_ptr<RendererData>> m_value;

bool m_serialized = false;
String m_string;
Expand Down
67 changes: 23 additions & 44 deletions include/TGUI/Signal.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ namespace tgui
else
#endif
{
m_handlers[id] = [=] { invokeFunc(func, args...); };
m_handlers[id] = [=] { std::invoke(func, args...); };
}

return id;
Expand All @@ -152,7 +152,7 @@ namespace tgui
unsigned int connectEx(const Func& func, const BoundArgs&... args)
{
// The name is copied so that the lambda does not depend on the 'this' pointer
return connect([func, name = m_name, args...]() { invokeFunc(func, args..., getWidget(), name); });
return connect([func, name = m_name, args...]() { std::invoke(func, args..., getWidget(), name); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -231,27 +231,6 @@ namespace tgui
return *static_cast<const std::decay_t<Type>*>(m_parameters[paramIndex]);
}

#if defined(__cpp_lib_invoke) && (__cpp_lib_invoke >= 201411L)
template <typename Func, typename... Args>
static void invokeFunc(Func&& func, Args&&... args)
{
std::invoke(std::forward<Func>(func), std::forward<Args>(args)...);
}
#else
// std::invoke only exists in C++17 so we use our own implementation to support C++14 compilers
template <typename Func, typename... Args, typename std::enable_if_t<std::is_member_pointer<std::decay_t<Func>>::value>* = nullptr>
static void invokeFunc(Func&& func, Args&&... args)
{
(std::mem_fn(func))(std::forward<Args>(args)...);
}

template <typename Func, typename... Args, typename std::enable_if_t<!std::is_member_pointer<std::decay_t<Func>>::value>* = nullptr>
static void invokeFunc(Func&& func, Args&&... args)
{
std::forward<Func>(func)(std::forward<Args>(args)...);
}
#endif

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

protected:
Expand Down Expand Up @@ -324,7 +303,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., T)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<T>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<T>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -406,7 +385,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., T1, T2)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<T1>(1), dereferenceParam<T2>(2)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<T1>(1), dereferenceParam<T2>(2)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -500,7 +479,7 @@ namespace tgui
std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<ChildWindow>&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceChildWindow()); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceChildWindow()); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -585,7 +564,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<int>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<int>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -601,7 +580,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<String>(2)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<String>(2)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -618,7 +597,7 @@ namespace tgui
std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&, const String&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<String>(2), dereferenceParam<String>(3)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<String>(2), dereferenceParam<String>(3)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -701,7 +680,7 @@ namespace tgui
std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<int>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<int>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -717,7 +696,7 @@ namespace tgui
std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<Panel>&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferencePanel()); });
return Signal::connect([=] { std::invoke(func, args..., dereferencePanel()); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -733,7 +712,7 @@ namespace tgui
std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<String>(3)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<String>(3)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -749,7 +728,7 @@ namespace tgui
std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., int, const std::shared_ptr<Panel>&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<int>(1), dereferencePanel()); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<int>(1), dereferencePanel()); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -766,7 +745,7 @@ namespace tgui
std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::shared_ptr<Panel>&, const String&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferencePanel(), dereferenceParam<String>(3)); });
return Signal::connect([=] { std::invoke(func, args..., dereferencePanel(), dereferenceParam<String>(3)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -784,7 +763,7 @@ namespace tgui
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect(
[=] { invokeFunc(func, args..., dereferenceParam<int>(1), dereferencePanel(), dereferenceParam<String>(3)); });
[=] { std::invoke(func, args..., dereferenceParam<int>(1), dereferencePanel(), dereferenceParam<String>(3)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -872,7 +851,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<String>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<String>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -889,7 +868,7 @@ namespace tgui
std::is_convertible<Func, std::function<void(const BoundArgs&..., const Filesystem::Path&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<Filesystem::Path>(2)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<Filesystem::Path>(2)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -906,7 +885,7 @@ namespace tgui
std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::vector<Filesystem::Path>&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<std::vector<Filesystem::Path>>(3)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<std::vector<Filesystem::Path>>(3)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -982,7 +961,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., ShowEffectType)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<ShowEffectType>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<ShowEffectType>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -998,7 +977,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., bool)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<bool>(2)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<bool>(2)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -1015,7 +994,7 @@ namespace tgui
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect(
[=] { invokeFunc(func, args..., dereferenceParam<ShowEffectType>(1), dereferenceParam<bool>(2)); });
[=] { std::invoke(func, args..., dereferenceParam<ShowEffectType>(1), dereferenceParam<bool>(2)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -1092,7 +1071,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., AnimationType)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<AnimationType>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<AnimationType>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -1169,7 +1148,7 @@ namespace tgui
typename std::enable_if_t<std::is_convertible<Func, std::function<void(const BoundArgs&..., const String&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<String>(1)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<String>(1)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -1186,7 +1165,7 @@ namespace tgui
std::is_convertible<Func, std::function<void(const BoundArgs&..., const std::vector<String>&)>>::value>* = nullptr>
unsigned int connect(const Func& func, const BoundArgs&... args)
{
return Signal::connect([=] { invokeFunc(func, args..., dereferenceParam<std::vector<String>>(2)); });
return Signal::connect([=] { std::invoke(func, args..., dereferenceParam<std::vector<String>>(2)); });
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
36 changes: 2 additions & 34 deletions include/TGUI/Variant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ namespace tgui
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @internal
/// @brief Wrapper around std::variant which will fall back to a custom Any class in C++14 mode
/// @brief Wrapper around std::variant
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
template <typename... Types>
class Variant
class [[deprecated("Use std::variant instead")]] Variant
{
public:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -82,38 +82,6 @@ namespace tgui
return std::get<T>(m_variant);
}

/*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Retrieve the value in the variant
///
/// @return Stored value
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
template <std::size_t Index>
auto& get()
{
return std::get<Index>(m_variant);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Retrieve the value in the variant
///
/// @return Stored value
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
template <std::size_t Index>
const auto& get() const
{
return std::get<Index>(m_variant);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @brief Returns the index
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
std::size_t index() const
{
return m_variant.index();
}
*/

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

private:
Expand Down
2 changes: 1 addition & 1 deletion include/TGUI/Widget.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ namespace tgui
template <typename DataType>
[[nodiscard]] DataType getUserData() const
{
return AnyCast<DataType>(m_userData);
return std::any_cast<DataType>(m_userData);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
9 changes: 0 additions & 9 deletions include/TGUI/Widgets/ContextMenu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,21 +173,12 @@ namespace tgui
template <typename Func, typename... Args>
unsigned int connectMenuItem(const std::vector<String>& hierarchy, Func&& handler, const Args&... args)
{
#if defined(__cpp_lib_invoke) && (__cpp_lib_invoke >= 201411L)
return onMenuItemClick.connect(
[=](const std::vector<String>& clickedMenuItem)
{
if (clickedMenuItem == hierarchy)
std::invoke(handler, args...);
});
#else
return onMenuItemClick.connect(
[f = std::function<void(const Args&...)>(handler), args..., hierarchy](const std::vector<String>& clickedMenuItem)
{
if (clickedMenuItem == hierarchy)
f(args...);
});
#endif
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
2 changes: 1 addition & 1 deletion include/TGUI/Widgets/ListBox.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ namespace tgui
[[nodiscard]] DataType getItemData(std::size_t index) const
{
if (index < m_items.size())
return AnyCast<DataType>(m_items[index].data);
return std::any_cast<DataType>(m_items[index].data);
throw std::bad_cast();
}

Expand Down
2 changes: 1 addition & 1 deletion include/TGUI/Widgets/ListView.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ namespace tgui
[[nodiscard]] DataType getItemData(std::size_t index) const
{
if (index < m_items.size())
return AnyCast<DataType>(m_items[index].data);
return std::any_cast<DataType>(m_items[index].data);
throw std::bad_cast();
}

Expand Down
Loading
Loading