HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
label_widget.hpp
1// Copyright Take Vos 2020-2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "widget.hpp"
8#include "text_widget.hpp"
9#include "icon_widget.hpp"
10#include "../alignment.hpp"
11#include "../label.hpp"
12#include <memory>
13#include <string>
14#include <array>
15#include <optional>
16#include <future>
17
18namespace hi::inline v1 {
19
32class label_widget final : public widget {
33public:
34 using super = widget;
35
39
58 observable<alignment> alignment = hi::alignment{horizontal_alignment::right, vertical_alignment::middle};
59
62 observable<theme_text_style> text_style = theme_text_style::label;
63
66 observable<text_widget::edit_mode_type> edit_mode = text_widget::edit_mode_type::selectable;
67
81 template<typename Label, typename Alignment = hi::alignment, typename TextStyle = hi::theme_text_style>
83 gui_window &window,
84 widget *parent,
85 Label &&label,
86 Alignment &&alignment = hi::alignment::middle_right(),
87 TextStyle &&text_style = theme_text_style::label) noexcept :
88 label_widget(window, parent)
89 {
90 this->label = std::forward<Label>(label);
91 this->alignment = std::forward<Alignment>(alignment);
92 this->text_style = std::forward<TextStyle>(text_style);
93 }
94
96 [[nodiscard]] generator<widget *> children() const noexcept override
97 {
98 co_yield _icon_widget.get();
99 co_yield _text_widget.get();
100 }
101
102 widget_constraints const &set_constraints() noexcept override;
103 void set_layout(widget_layout const &layout) noexcept override;
104 void draw(draw_context const &context) noexcept;
105 [[nodiscard]] hitbox hitbox_test(point3 position) const noexcept;
107private:
108 float _icon_size;
109 float _inner_margin;
110
111 decltype(label)::token_type _label_cbt;
112 decltype(text_style)::token_type _text_style_cbt;
113
114 aarectangle _icon_rectangle;
115 std::unique_ptr<icon_widget> _icon_widget;
116 aarectangle _text_rectangle;
117 std::unique_ptr<text_widget> _text_widget;
118
119 label_widget(gui_window &window, widget *parent) noexcept;
120};
121
122} // namespace hi::inline v1
STL namespace.
Definition alignment.hpp:64
A return value for a generator-function.
Definition generator.hpp:27
Definition gui_window.hpp:40
A label consisting of localizable text and an icon.
Definition label.hpp:27
An observable value.
Definition observable.hpp:356
Definition text_style.hpp:18
The GUI widget displays and lays out text together with an icon.
Definition label_widget.hpp:32
label_widget(gui_window &window, widget *parent, Label &&label, Alignment &&alignment=hi::alignment::middle_right(), TextStyle &&text_style=theme_text_style::label) noexcept
Construct a label widget.
Definition label_widget.hpp:82
observable< label > label
The label to display.
Definition label_widget.hpp:38
An interactive graphical object as part of the user-interface.
Definition widget.hpp:40