Support scaling ui styles

This commit is contained in:
Nikita Lisitsa 2021-07-17 17:42:30 +03:00
parent 8c21543ecb
commit 934512f762
2 changed files with 41 additions and 8 deletions

View file

@ -39,6 +39,8 @@ namespace psemek::ui
void merge(style & dst, style const & src);
style scale(style const & s, float factor);
style default_style();
}

View file

@ -1,6 +1,9 @@
#include <psemek/ui/style.hpp>
namespace psemek::ui
{
namespace
{
template <typename T>
@ -15,6 +18,20 @@ namespace psemek::ui
if (!dst) dst = src;
}
template <typename T>
void scale(T & dst, float factor)
{
if (dst) dst = static_cast<T>((*dst) * factor);
}
template <typename T, std::size_t N>
void scale(std::optional<geom::vector<T, N>> & dst, float factor)
{
if (dst) dst = geom::cast<T>(geom::cast<float>(*dst) * factor);
}
}
void merge(style & dst, style const & src)
{
merge(dst.bg_color, src.bg_color);
@ -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;