diff --git a/libs/ui/include/psemek/ui/element.hpp b/libs/ui/include/psemek/ui/element.hpp index cf39d466..3b918b43 100644 --- a/libs/ui/include/psemek/ui/element.hpp +++ b/libs/ui/include/psemek/ui/element.hpp @@ -61,7 +61,7 @@ namespace psemek::ui virtual void draw(painter & p) const = 0; virtual void post_draw(painter & /* p */) const {} - virtual ~element() {} + virtual ~element(); virtual void post(util::function f) const; virtual void post_reshape(); diff --git a/libs/ui/include/psemek/ui/style.hpp b/libs/ui/include/psemek/ui/style.hpp index a20d3c52..d99dfc2d 100644 --- a/libs/ui/include/psemek/ui/style.hpp +++ b/libs/ui/include/psemek/ui/style.hpp @@ -4,6 +4,7 @@ #include #include +#include namespace psemek::ui { @@ -14,6 +15,8 @@ namespace psemek::ui down, }; + struct element; + struct style { std::optional scale; @@ -48,6 +51,18 @@ namespace psemek::ui std::optional> text_shadow_offset; std::shared_ptr font; + + mutable std::unordered_set use_as_style; + mutable std::unordered_set use_as_own_style; + + style() = default; + style(style &&) = default; + style(style const &); + + style & operator = (style &&) = default; + style & operator = (style const &) = delete; + + void on_changed(); }; void merge(style & dst, style const & src); diff --git a/libs/ui/source/element.cpp b/libs/ui/source/element.cpp index 3676565c..20ccfffa 100644 --- a/libs/ui/source/element.cpp +++ b/libs/ui/source/element.cpp @@ -57,8 +57,14 @@ namespace psemek::ui std::shared_ptr