8#include "text_stencil.hpp"
9#include "image_stencil.hpp"
10#include "../label.hpp"
11#include "../GUI/theme.hpp"
12#include "../GUI/draw_context.hpp"
22 _icon_size(_alignment == horizontal_alignment::center ? theme::global->large_icon_size : theme::global->icon_size)
24 if (
label.has_icon()) {
25 _icon_stencil = stencil::make_unique(alignment::middle_center,
label.icon());
27 if (
label.has_text()) {
28 _text_stencil = stencil::make_unique(alignment,
label.text(), style);
36 return {_icon_size, _icon_size};
39 if (!_icon_stencil && !_show_icon) {
41 return _text_stencil->preferred_extent();
47 _alignment == horizontal_alignment::center ? _text_stencil->preferred_extent().width() :
48 _icon_size + theme::global->margin + _text_stencil->preferred_extent().width();
52 _alignment == vertical_alignment::middle ? _text_stencil->preferred_extent().height() :
53 _icon_size + _text_stencil->preferred_extent().height();
56 return {width, height};
80 if (_show_icon != flag) {
82 _size_is_modified =
true;
83 _position_is_modified =
true;
95 _alignment == horizontal_alignment::left ? _rectangle.left() :
96 _alignment == horizontal_alignment::center ? _rectangle.center() - _icon_size * 0.5f :
97 _rectangle.right() - _icon_size;
100 _alignment == vertical_alignment::bottom ? _rectangle.bottom() :
101 _alignment == vertical_alignment::middle ? _rectangle.middle() - _icon_size * 0.5f :
102 _rectangle.top() - _icon_size;
107 ttlet icon_rectangle =
aarectangle{icon_x, icon_y, _icon_size, _icon_size};
108 _icon_stencil->set_layout_parameters(icon_rectangle);
114 _alignment == horizontal_alignment::center ? _rectangle.width() :
115 _icon_stencil || _show_icon ? _rectangle.width() - theme::global->margin - _icon_size :
119 _alignment == vertical_alignment::middle ? _rectangle.height() :
120 _icon_stencil || _show_icon ? _rectangle.height() - _icon_size :
124 _alignment == horizontal_alignment::center ? _rectangle.center() - text_width * 0.5f :
125 _alignment == horizontal_alignment::left ? _rectangle.right() - text_width :
129 _alignment == vertical_alignment::middle ? _rectangle.middle() - text_height * 0.5f :
130 _alignment == vertical_alignment::bottom ? _rectangle.top() - text_height :
134 ttlet text_rectangle =
aarectangle{text_x, text_y, text_width, text_height};
135 if (_alignment == horizontal_alignment::center) {
136 _text_stencil->set_layout_parameters(text_rectangle);
138 _text_stencil->set_layout_parameters(text_rectangle, _base_line_position);
146 _text_stencil->draw(context,
color, transform);
149 _icon_stencil->draw(context, color, transform);
154 bool _show_icon =
false;
This is a RGBA floating point color.
Definition color.hpp:39
Class which represents an axis-aligned rectangle.
Definition axis_aligned_rectangle.hpp:18
Definition identity.hpp:11
Class which represents an rectangle.
Definition rectangle.hpp:16
Draw context for drawing using the TTauri shaders.
Definition draw_context.hpp:33
A localized text + icon label.
Definition label.hpp:76
Definition label_stencil.hpp:17
void draw(draw_context context, tt::color color, matrix3 transform=geo::identity{}) noexcept override
Draw the cell.
Definition label_stencil.hpp:143
void set_show_icon(bool flag) noexcept
Set the show_icon() flag.
Definition label_stencil.hpp:78
bool show_icon() const noexcept
Whether the text in the label will align to an optional icon in the label.
Definition label_stencil.hpp:71
extent2 preferred_extent() noexcept override
Return the extent that this cell wants to be drawn as.
Definition label_stencil.hpp:32
void set_layout_parameters(aarectangle const &rectangle, float base_line_position=std::numeric_limits< float >::infinity()) noexcept override
Pass layout parameters in local coordinates.
Definition label_stencil.hpp:87
Definition stencil.hpp:15
virtual void set_layout_parameters(aarectangle const &rectangle, float base_line_position=std::numeric_limits< float >::infinity()) noexcept
Pass layout parameters in local coordinates.
Definition stencil.hpp:40
Definition text_style.hpp:16