From 0be73e2816849b8a41261bcc1f705aff44bca94d Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 15 Feb 2022 16:55:18 +0300 Subject: [PATCH] Replace ui::label::multiline_mode with boolean ui::label::wrap --- libs/ui/include/psemek/ui/label.hpp | 13 +++---------- libs/ui/source/element_factory.cpp | 1 - libs/ui/source/label.cpp | 15 ++++----------- 3 files changed, 7 insertions(+), 22 deletions(-) diff --git a/libs/ui/include/psemek/ui/label.hpp b/libs/ui/include/psemek/ui/label.hpp index f76dfcfb..146022fb 100644 --- a/libs/ui/include/psemek/ui/label.hpp +++ b/libs/ui/include/psemek/ui/label.hpp @@ -26,13 +26,6 @@ namespace psemek::ui bottom, }; - enum class multiline_mode - { - none, // single-line lable - minimize_lines, // normal multiline text - minimize_area, // as square as possible - }; - enum class overflow_mode { ignore, @@ -52,8 +45,8 @@ namespace psemek::ui virtual void set_valign(valignment value); virtual valignment valign() const { return valign_; } - virtual void set_multiline(multiline_mode value); - virtual multiline_mode multiline() const { return multiline_; } + virtual void set_wrap(bool value); + virtual bool wrap() const { return wrap_; } virtual void set_overflow(overflow_mode value); virtual overflow_mode overflow() const { return overflow_; } @@ -75,7 +68,7 @@ namespace psemek::ui std::string text_; halignment halign_ = halignment::left; valignment valign_ = valignment::top; - multiline_mode multiline_ = multiline_mode::none; + bool wrap_ = true; overflow_mode overflow_ = overflow_mode::ignore; bool skip_spaces_ = false; diff --git a/libs/ui/source/element_factory.cpp b/libs/ui/source/element_factory.cpp index 132cd84e..49f1114a 100644 --- a/libs/ui/source/element_factory.cpp +++ b/libs/ui/source/element_factory.cpp @@ -16,7 +16,6 @@ namespace psemek::ui l->set_valign(label::valignment::center); l->set_halign(label::halignment::center); l->set_overflow(label::overflow_mode::ellipsis); - l->set_multiline(label::multiline_mode::none); b->set_label(l); } } diff --git a/libs/ui/source/label.cpp b/libs/ui/source/label.cpp index 03932ce4..4e91f66e 100644 --- a/libs/ui/source/label.cpp +++ b/libs/ui/source/label.cpp @@ -28,9 +28,9 @@ namespace psemek::ui on_state_changed(); } - void label::set_multiline(multiline_mode value) + void label::set_wrap(bool value) { - multiline_ = value; + wrap_ = value; on_state_changed(); } @@ -115,20 +115,13 @@ namespace psemek::ui for (auto const & g : glyphs) raw_bbox |= g.position; - std::size_t max_lines; + std::size_t max_lines = 1; - switch (multiline_) + if (wrap_) { - case multiline_mode::none: - max_lines = 1; - break; - case multiline_mode::minimize_lines: max_lines = std::isfinite(bbox[1].length()) ? std::max(1, std::floor(bbox[1].length() / st->font->size()[1] / (*st->text_scale))) : std::numeric_limits::max(); - break; - case multiline_mode::minimize_area: - throw std::runtime_error("multiline_mode::minimize_area is not supported yet"); } std::vector> lines;