Styled Widget: allowed override of ellipsize mode fallback if can_wrap is false

This commit is contained in:
Charles Dang 2017-03-23 21:57:43 +11:00
parent 91f50aa0bc
commit db654cc0dc
2 changed files with 35 additions and 6 deletions

View file

@ -55,6 +55,7 @@ styled_widget::styled_widget(const unsigned canvas_count)
, renderer_()
, text_maximum_width_(0)
, text_alignment_(PANGO_ALIGN_LEFT)
, text_ellipse_mode_(PANGO_ELLIPSIZE_END)
, shrunken_(false)
{
connect_signal<event::SHOW_TOOLTIP>(std::bind(
@ -82,6 +83,7 @@ styled_widget::styled_widget(const implementation::builder_styled_widget& builde
, renderer_()
, text_maximum_width_(0)
, text_alignment_(PANGO_ALIGN_LEFT)
, text_ellipse_mode_(PANGO_ELLIPSIZE_END)
, shrunken_(false)
{
definition_load_configuration(control_type);
@ -385,6 +387,17 @@ void styled_widget::set_text_alignment(const PangoAlignment text_alignment)
set_is_dirty(true);
}
void styled_widget::set_text_ellipse_mode(const PangoEllipsizeMode ellipse_mode)
{
if(text_ellipse_mode_ == ellipse_mode) {
return;
}
text_ellipse_mode_ = ellipse_mode;
update_canvas();
set_is_dirty(true);
}
void styled_widget::update_canvas()
{
const int max_width = get_text_maximum_width();
@ -404,9 +417,7 @@ void styled_widget::update_canvas()
variant(encode_text_alignment(text_alignment_)));
canvas.set_variable("text_maximum_width", variant(max_width));
canvas.set_variable("text_maximum_height", variant(max_height));
canvas.set_variable("text_wrap_mode",
variant(can_wrap() ? PANGO_ELLIPSIZE_NONE
: PANGO_ELLIPSIZE_END));
canvas.set_variable("text_wrap_mode", variant(get_text_ellipse_mode()));
canvas.set_variable("text_characters_per_line",
variant(get_characters_per_line()));
}
@ -492,9 +503,7 @@ point styled_widget::get_best_text_size(point minimum_size,
renderer_.set_maximum_width(maximum_width);
if(can_wrap()) {
renderer_.set_ellipse_mode(PANGO_ELLIPSIZE_NONE);
}
renderer_.set_ellipse_mode(get_text_ellipse_mode());
renderer_.set_characters_per_line(get_characters_per_line());
if(get_characters_per_line() != 0 && !can_wrap()) {

View file

@ -243,6 +243,7 @@ public:
{
return use_tooltip_on_label_overflow_;
}
void set_use_tooltip_on_label_overflow(const bool use_tooltip = true)
{
use_tooltip_on_label_overflow_ = use_tooltip;
@ -264,6 +265,7 @@ public:
{
return tooltip_;
}
// Note setting the tooltip_ doesn't dirty an object.
void set_tooltip(const t_string& tooltip)
{
@ -275,6 +277,7 @@ public:
{
return help_message_;
}
// Note setting the help_message_ doesn't dirty an object.
void set_help_message(const t_string& help_message)
{
@ -286,6 +289,7 @@ public:
{
return canvas_;
}
canvas& get_canvas(const unsigned index)
{
assert(index < canvas_.size());
@ -298,11 +302,24 @@ public:
return text_alignment_;
}
void set_text_ellipse_mode(const PangoEllipsizeMode ellipse_mode);
/**
* Get the text's ellipsize mode.
*
* Note that if can_wrap is true, it override the manual setting.
*/
PangoEllipsizeMode get_text_ellipse_mode() const
{
return can_wrap() ? PANGO_ELLIPSIZE_NONE : text_ellipse_mode_;
}
protected:
resolution_definition_ptr config()
{
return config_;
}
resolution_definition_const_ptr config() const
{
return config_;
@ -501,6 +518,9 @@ private:
/** The alignment of the text in a styled_widget. */
PangoAlignment text_alignment_;
/** The ellipsize mode of the text in a styled_widget. */
PangoEllipsizeMode text_ellipse_mode_;
/** Is the widget smaller as it's best size? */
bool shrunken_;