From 934512f7622428db7574e20b61a2171990ddfc34 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 17 Jul 2021 17:42:30 +0300 Subject: [PATCH] Support scaling ui styles --- libs/ui/include/psemek/ui/style.hpp | 2 ++ libs/ui/source/style.cpp | 47 ++++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/libs/ui/include/psemek/ui/style.hpp b/libs/ui/include/psemek/ui/style.hpp index f70881de..f86edecb 100644 --- a/libs/ui/include/psemek/ui/style.hpp +++ b/libs/ui/include/psemek/ui/style.hpp @@ -39,6 +39,8 @@ namespace psemek::ui void merge(style & dst, style const & src); + style scale(style const & s, float factor); + style default_style(); } diff --git a/libs/ui/source/style.cpp b/libs/ui/source/style.cpp index 8f3e96e8..50444d82 100644 --- a/libs/ui/source/style.cpp +++ b/libs/ui/source/style.cpp @@ -3,16 +3,33 @@ namespace psemek::ui { - template - void merge(std::optional & dst, std::optional const & src) + namespace { - if (!dst) dst = src; - } - template - void merge(std::shared_ptr & dst, std::shared_ptr const & src) - { - if (!dst) dst = src; + 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; + } + + template + void scale(T & dst, float factor) + { + if (dst) dst = static_cast((*dst) * factor); + } + + template + void scale(std::optional> & dst, float factor) + { + if (dst) dst = geom::cast(geom::cast(*dst) * factor); + } + } void merge(style & dst, style const & src) @@ -36,6 +53,20 @@ namespace psemek::ui merge(dst.font, src.font); } + style scale(style const & s, float factor) + { + style result = s; + scale(result.action_offset, factor); + scale(result.border_width, factor); + scale(result.ref_height, factor); + scale(result.shadow_offset, factor); + scale(result.inner_margin, factor); + scale(result.outer_margin, factor); + scale(result.text_scale, factor); + scale(result.text_shadow_offset, factor); + return result; + } + style default_style() { style s;