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,
};
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;

View file

@ -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);
}
}

View file

@ -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<std::size_t>(1, std::floor(bbox[1].length() / st->font->size()[1] / (*st->text_scale)))
: 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;