From e4bd58c5ef8edefa6068fa82c3d0eaa89deb82ea Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 2 Feb 2022 18:14:54 +0300 Subject: [PATCH] Support not skipping extra spaces in ui::label --- libs/ui/include/psemek/ui/label.hpp | 4 ++++ libs/ui/source/label.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/libs/ui/include/psemek/ui/label.hpp b/libs/ui/include/psemek/ui/label.hpp index a5364908..f76dfcfb 100644 --- a/libs/ui/include/psemek/ui/label.hpp +++ b/libs/ui/include/psemek/ui/label.hpp @@ -58,6 +58,9 @@ namespace psemek::ui virtual void set_overflow(overflow_mode value); virtual overflow_mode overflow() const { return overflow_; } + virtual void set_skip_spaces(bool value); + virtual bool skip_spaces() const { return skip_spaces_; } + struct shape const & shape() const override { return shape_; } void reshape(geom::box const & bbox) override; @@ -74,6 +77,7 @@ namespace psemek::ui valignment valign_ = valignment::top; multiline_mode multiline_ = multiline_mode::none; overflow_mode overflow_ = overflow_mode::ignore; + bool skip_spaces_ = false; box_shape shape_; diff --git a/libs/ui/source/label.cpp b/libs/ui/source/label.cpp index 8bedd159..03932ce4 100644 --- a/libs/ui/source/label.cpp +++ b/libs/ui/source/label.cpp @@ -34,6 +34,12 @@ namespace psemek::ui on_state_changed(); } + void label::set_skip_spaces(bool value) + { + skip_spaces_ = value; + on_state_changed(); + } + void label::set_overflow(overflow_mode value) { overflow_ = value; @@ -132,6 +138,9 @@ namespace psemek::ui for (std::size_t line = 0; line < max_lines; ++line) { if (line != 0) + ++current_glyph; + + if (skip_spaces_) { while (current_glyph < glyphs.size() && std::isspace(glyphs[current_glyph].character)) ++current_glyph;