diff --git a/libs/ui/include/psemek/ui/style.hpp b/libs/ui/include/psemek/ui/style.hpp index 587db389..a20d3c52 100644 --- a/libs/ui/include/psemek/ui/style.hpp +++ b/libs/ui/include/psemek/ui/style.hpp @@ -40,7 +40,7 @@ namespace psemek::ui std::optional> shadow_offset; std::optional shadow_color; - std::optional inner_margin; + std::optional> inner_margin; std::optional outer_margin; std::optional text_color; diff --git a/libs/ui/source/default_element_factory.cpp b/libs/ui/source/default_element_factory.cpp index 54bc253e..dc1f1e8e 100644 --- a/libs/ui/source/default_element_factory.cpp +++ b/libs/ui/source/default_element_factory.cpp @@ -39,7 +39,7 @@ namespace psemek::ui offset = geom::cast(*st->action_offset); element * c = label() ? (element *)label() : icon(); - if (c) c->reshape(geom::shrink(bbox, 1.f * (*st->border_width + *st->inner_margin)) + offset); + if (c) c->reshape(geom::shrink(bbox, geom::vector{*st->border_width + (*st->inner_margin)[0], *st->border_width + (*st->inner_margin)[1]}) + offset); } void on_state_changed(state_t old) override @@ -98,9 +98,10 @@ namespace psemek::ui if (auto st = merged_own_style()) { - float extra = 2.f * (*st->border_width + *st->inner_margin); - sc[0] += extra; - sc[1] += extra; + sc[0] += 2.f * (*st->border_width); + sc[1] += 2.f * (*st->border_width); + + sc += 2.f * geom::cast(*st->inner_margin); } } @@ -330,7 +331,7 @@ namespace psemek::ui auto st = merged_own_style(); - float const header_height = std::max(lc[1].min + 2.f * (*st->inner_margin) + 2.f * (*st->border_width), bc[1].min); + float const header_height = std::max(lc[1].min + 2.f * (*st->inner_margin)[1] + 2.f * (*st->border_width), bc[1].min); { geom::box b; @@ -343,10 +344,10 @@ namespace psemek::ui { geom::box b; - b[0].min = bbox[0].min + (*st->inner_margin) + (*st->border_width); - b[0].max = bbox[0].max - (*st->inner_margin) - bc[0].min; - b[1].min = bbox[1].min + (*st->inner_margin) + (*st->border_width); - b[1].max = bbox[1].min + header_height - (*st->inner_margin) - (*st->border_width); + b[0].min = bbox[0].min + (*st->inner_margin)[0] + (*st->border_width); + b[0].max = bbox[0].max - (*st->inner_margin)[0] - bc[0].min; + b[1].min = bbox[1].min + (*st->inner_margin)[1] + (*st->border_width); + b[1].max = bbox[1].min + header_height - (*st->inner_margin)[1] - (*st->border_width); caption_->reshape(b); } @@ -371,9 +372,9 @@ namespace psemek::ui auto st = merged_own_style(); - float const header_height = std::max(lc[1].min + 2.f * (*st->inner_margin) + 2.f * (*st->border_width), bc[1].min); + float const header_height = std::max(lc[1].min + 2.f * (*st->inner_margin)[1] + 2.f * (*st->border_width), bc[1].min); - r[0].min = std::max(r[0].min + 2.f * (*st->inner_margin) + 2.f * (*st->border_width), (*st->border_width) + lc[0].min + bc[0].min); + r[0].min = std::max(r[0].min + 2.f * (*st->inner_margin)[0] + 2.f * (*st->border_width), (*st->border_width) + lc[0].min + bc[0].min); r[1] += (*st->border_width) * 1.f + header_height; return r; @@ -392,7 +393,7 @@ namespace psemek::ui p.draw_rect(bb + geom::cast(*st->shadow_offset), *st->shadow_color); p.draw_rect(bb, *st->border_color); - float const header_height = std::max(lc[1].min + 2.f * (*st->inner_margin) + 2.f * (*st->border_width), bc[1].min); + float const header_height = std::max(lc[1].min + 2.f * (*st->inner_margin)[1] + 2.f * (*st->border_width), bc[1].min); p.draw_rect({{{bb[0].min + (*st->border_width), bb[0].max - bc[0].min}, {bb[1].min + (*st->border_width), bb[1].min + header_height - (*st->border_width)}}}, *st->fg_color); p.draw_rect({{{bb[0].min + (*st->border_width), bb[0].max - (*st->border_width)}, {bb[1].min + header_height, bb[1].max - (*st->border_width)}}}, diff --git a/libs/ui/source/selector.cpp b/libs/ui/source/selector.cpp index 2026a73a..0c8bbbd6 100644 --- a/libs/ui/source/selector.cpp +++ b/libs/ui/source/selector.cpp @@ -18,14 +18,14 @@ namespace psemek::ui auto st = merged_own_style(); - geom::interval x_range = geom::shrink(box[0], *st->inner_margin); + geom::interval x_range = geom::shrink(box[0], (*st->inner_margin)[0]); float y = box[1].min; for (auto c : children()) { float y_start = y; - y += *st->inner_margin; + y += (*st->inner_margin)[1]; if (c) { @@ -34,7 +34,7 @@ namespace psemek::ui y += sc[1].min; } - y += *st->inner_margin; + y += (*st->inner_margin)[1]; child_boxes_.push_back({{box[0], {y_start, y}}}); @@ -60,9 +60,9 @@ namespace psemek::ui auto st = merged_own_style(); - x_range += *st->inner_margin * 2.f; + x_range += (*st->inner_margin)[0] * 2.f; - y_sum += *st->inner_margin * 2.f * container_.size(); + y_sum += (*st->inner_margin)[1] * 2.f * container_.size(); if (!container_.empty()) y_sum += *st->scale * y_extra() * static_cast(container_.size() - 1); diff --git a/libs/ui/source/style.cpp b/libs/ui/source/style.cpp index 20619827..cc247a28 100644 --- a/libs/ui/source/style.cpp +++ b/libs/ui/source/style.cpp @@ -103,7 +103,7 @@ namespace psemek::ui s.shadow_offset = {1, 1}; s.shadow_color = {0, 0, 0, 255}; - s.inner_margin = 5; + s.inner_margin = {5, 5}; s.outer_margin = 10; s.text_color = {255, 255, 255, 255};