91 std::unordered_map<refl::field_path, refl::any>
base_fields{};
92 std::unordered_map<refl::field_path, refl::any>
fields{};
100 virtual void reset_field(
const refl::field_info* field,
bool is_base_field) = 0;
115 bool something_changed =
false;
116 for (
const auto& base_field: override_data.
base_fields) {
120 something_changed =
true;
124 for (
const auto& field: override_data.
fields) {
128 something_changed =
true;
132 return something_changed;
139 std::unordered_set<std::string>
tags{};
140 std::vector<style_rule_instance_t>
rules{};
142 std::shared_ptr<dimension_ctx_t>
dimension_ctx_{std::make_shared<dimension_ctx_t>()};
145 template <
typename Style>
149 : ptr_(std::make_shared<Style>()) {
165 base.padding.bottom.set_context(
dimension_ctx_,
"padding_bottom");
173 void reset_field(
const refl::field_info* field,
bool is_base_field)
override {
174 const refl::type_info& ti = field->type();
177 ti.assign_copy_of(field->get_ptr(&default_value), field->get_ptr(&
as_base()));
179 static Style default_value{};
180 ti.assign_copy_of(field->get_ptr(&default_value), field->get_ptr(&
get_style()));
185 return *
static_cast<Style*
>(ptr_.get());
213 style_transform = [=](std::shared_ptr<void>& ptr) {
214 transform_func(*
static_cast<Style*
>(ptr.get()));
218 style_transform = [](std::shared_ptr<void>&) {};
234 field_info.type().assign_copy_of(value.data(), field_info.get_ptr(&base_s));
237 field_info.type().assign_copy_of(value.data(), field_info.get_ptr(&s));
242 style_transform(ptr_);
246 std::shared_ptr<void> ptr_{};
247 std::function<void(std::shared_ptr<void>&)> style_transform{[](std::shared_ptr<void>&) {}};
virtual void apply_transform()=0
virtual bool has_field_override(refl::field_path field_path)=0
std::vector< style_rule_instance_t > rules
style_override_data_t style_override_data
bool update_override_with(const style_override_data_t &override_data)
std::shared_ptr< dimension_ctx_t > dimension_ctx_
virtual const std::shared_ptr< dimension_ctx_t > & get_dimensional_ctx()=0
std::shared_ptr< dimension_ctx_t > get_dimension_ctx()
virtual ~style_data_base_t()=default
virtual void set_base_field_override(refl::field_path field_path, refl::any value)=0
std::unordered_set< std::string > tags
virtual void reset_field(const refl::field_info *field, bool is_base_field)=0
virtual void * as_raw()=0
virtual void set_field_override(refl::field_path field_path, refl::any value)=0
virtual bool has_base_field_override(refl::field_path field_path)=0
virtual void clear_style_override()=0
virtual style_base_t & as_base()=0
virtual void apply_override()=0
style_base_t & as_base() override
void clear_style_override() override
void set_style_transform(auto &&transform_func)
auto & get_style_override()
bool has_field_override(refl::field_path field_info) override
void reset_field(const refl::field_info *field, bool is_base_field) override
void set_base_field_override(refl::field_path field_info, refl::any value) override
void apply_override() override
const std::shared_ptr< dimension_ctx_t > & get_dimensional_ctx() override
void set_field_override(refl::field_path field_info, refl::any value) override
void apply_transform() override
bool has_base_field_override(refl::field_path field_info) override
style_data_t(const std::string &ctx_name)
void clear_style_transform()
dimensions::dimension< dimensions::screen_measure > dimension_t
quantify::Q< quantify::angle::degrees, la::scalar > angle_type
std::shared_ptr< StyleRule > sptr
four_sided_property< vg::paint::type > border
vg::paint::type background
four_cornered_property< int > border_radius
four_sided_property< int > border_width
four_sided_property< dimension_t > margin
four_sided_property< std::valarray< double > > border_dasharray
four_sided_property< dimension_t > padding
std::unordered_map< refl::field_path, refl::any > fields
bool operator==(const style_override_data_t &other) const
std::unordered_map< refl::field_path, refl::any > base_fields
std::unordered_set< const refl::field_info * > active_properties
std::unordered_set< const refl::field_info * > active_base_properties
refl::any(* parser_function)(const std::string &)
constexpr custom_style_parser(refl::any(*fun)(const std::string &))
static type make(Paint paint_data_)