Replace ui:🏷️:multiline_mode with boolean ui:🏷️:wrap

This commit is contained in:
Nikita Lisitsa 2022-02-15 16:55:18 +03:00
parent 34e2877873
commit 0be73e2816
3 changed files with 7 additions and 22 deletions

View file

@ -26,13 +26,6 @@ namespace psemek::ui
bottom, bottom,
}; };
enum class multiline_mode
{
none, // single-line lable
minimize_lines, // normal multiline text
minimize_area, // as square as possible
};
enum class overflow_mode enum class overflow_mode
{ {
ignore, ignore,
@ -52,8 +45,8 @@ namespace psemek::ui
virtual void set_valign(valignment value); virtual void set_valign(valignment value);
virtual valignment valign() const { return valign_; } virtual valignment valign() const { return valign_; }
virtual void set_multiline(multiline_mode value); virtual void set_wrap(bool value);
virtual multiline_mode multiline() const { return multiline_; } virtual bool wrap() const { return wrap_; }
virtual void set_overflow(overflow_mode value); virtual void set_overflow(overflow_mode value);
virtual overflow_mode overflow() const { return overflow_; } virtual overflow_mode overflow() const { return overflow_; }
@ -75,7 +68,7 @@ namespace psemek::ui
std::string text_; std::string text_;
halignment halign_ = halignment::left; halignment halign_ = halignment::left;
valignment valign_ = valignment::top; valignment valign_ = valignment::top;
multiline_mode multiline_ = multiline_mode::none; bool wrap_ = true;
overflow_mode overflow_ = overflow_mode::ignore; overflow_mode overflow_ = overflow_mode::ignore;
bool skip_spaces_ = false; bool skip_spaces_ = false;

View file

@ -16,7 +16,6 @@ namespace psemek::ui
l->set_valign(label::valignment::center); l->set_valign(label::valignment::center);
l->set_halign(label::halignment::center); l->set_halign(label::halignment::center);
l->set_overflow(label::overflow_mode::ellipsis); l->set_overflow(label::overflow_mode::ellipsis);
l->set_multiline(label::multiline_mode::none);
b->set_label(l); b->set_label(l);
} }
} }

View file

@ -28,9 +28,9 @@ namespace psemek::ui
on_state_changed(); on_state_changed();
} }
void label::set_multiline(multiline_mode value) void label::set_wrap(bool value)
{ {
multiline_ = value; wrap_ = value;
on_state_changed(); on_state_changed();
} }
@ -115,20 +115,13 @@ namespace psemek::ui
for (auto const & g : glyphs) for (auto const & g : glyphs)
raw_bbox |= g.position; 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()) max_lines = std::isfinite(bbox[1].length())
? std::max<std::size_t>(1, std::floor(bbox[1].length() / st->font->size()[1] / (*st->text_scale))) ? std::max<std::size_t>(1, std::floor(bbox[1].length() / st->font->size()[1] / (*st->text_scale)))
: std::numeric_limits<std::size_t>::max(); : std::numeric_limits<std::size_t>::max();
break;
case multiline_mode::minimize_area:
throw std::runtime_error("multiline_mode::minimize_area is not supported yet");
} }
std::vector<std::pair<std::size_t, std::size_t>> lines; std::vector<std::pair<std::size_t, std::size_t>> lines;