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

@ -3,16 +3,33 @@
namespace psemek::ui
{
template <typename T>
void merge(std::optional<T> & dst, std::optional<T> const & src)
namespace
{
if (!dst) dst = src;
}
template <typename T>
void merge(std::shared_ptr<T> & dst, std::shared_ptr<T> const & src)
{
if (!dst) dst = src;
template <typename T>
void merge(std::optional<T> & dst, std::optional<T> const & src)
{
if (!dst) dst = src;
}
template <typename T>
void merge(std::shared_ptr<T> & dst, std::shared_ptr<T> const & src)
{
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)
@ -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;