#include namespace psemek::ui { template void merge(std::optional & dst, std::optional const & src) { if (!dst) dst = src; } template void merge(std::shared_ptr & dst, std::shared_ptr const & src) { if (!dst) dst = src; } void merge(style & dst, style const & src) { merge(dst.bg_color, src.bg_color); merge(dst.fg_color, src.fg_color); merge(dst.highlight_color, src.highlight_color); merge(dst.action_color, src.action_color); merge(dst.action_offset, src.action_offset); merge(dst.border_color, src.border_color); merge(dst.border_width, src.border_width); merge(dst.shadow_offset, src.shadow_offset); merge(dst.shadow_color, src.shadow_color); merge(dst.inner_margin, src.inner_margin); merge(dst.outer_margin, src.outer_margin); merge(dst.text_color, src.text_color); merge(dst.text_scale, src.text_scale); merge(dst.text_shadow_offset, src.text_shadow_offset); merge(dst.font, src.font); } style default_style() { style s; s.bg_color = {95, 95, 95, 255}; s.fg_color = {127, 127, 127, 255}; s.highlight_color = {159, 159, 159, 255}; s.action_color = {63, 63, 63, 255}; s.action_offset = {1, 1}; s.border_color = {255, 255, 255, 255}; s.border_width = 3; s.shadow_offset = {1, 1}; s.shadow_color = {0, 0, 0, 255}; s.inner_margin = 5; s.outer_margin = 10; s.text_color = {255, 255, 255, 255}; s.text_scale = 1; s.text_shadow_offset = {1, 1}; return s; } }