|
HikoGUI
A low latency retained GUI
|
#include <TTauri/Widgets/Widget.hpp>
Public Member Functions | |
| Widget (Window &window, Widget *parent, vec defaultExtent) noexcept | |
| Widget (const Widget &)=delete | |
| Widget & | operator= (const Widget &)=delete |
| Widget (Widget &&)=delete | |
| Widget & | operator= (Widget &&)=delete |
| virtual Widget & | addWidget (Alignment alignment, std::unique_ptr< Widget > childWidget) noexcept |
| Add a widget directly to this widget. | |
| template<typename T , typename... Args> | |
| T & | makeWidgetDirectly (Args &&... args) |
| Add a widget directly to this widget. | |
| template<typename T , typename... Args> | |
| T & | makeWidget (Args &&... args) |
| Add a widget directly to this widget. | |
| template<typename T , typename... Args> | |
| T & | makeAlignedWidgetDirectly (Alignment alignement, Args &&... args) |
| Add a widget directly to this widget. | |
| template<typename T , typename... Args> | |
| T & | makeAlignedWidget (Alignment alignment, Args &&... args) |
| Add a widget directly to this widget. | |
| aarect | makeWindowRectangle () const noexcept |
| Create a window rectangle from left, bottom, width and height Thread-safety: locks window.widgetSolverMutex. | |
| void | setMinimumExtent (vec newMinimumExtent) noexcept |
| void | setMinimumExtent (float width, float height) noexcept |
| void | setPreferredExtent (vec newPreferredExtent) noexcept |
| void | setFixedExtent (vec newFixedExtent) noexcept |
| void | setFixedHeight (float height) noexcept |
| void | setFixedWidth (float width) noexcept |
| rhea::constraint | placeBelow (Widget const &rhs, float margin=theme->margin) const noexcept |
| rhea::constraint | placeAbove (Widget const &rhs, float margin=theme->margin) const noexcept |
| rhea::constraint | placeLeftOf (Widget const &rhs, float margin=theme->margin) const noexcept |
| rhea::constraint | placeRightOf (Widget const &rhs, float margin=theme->margin) const noexcept |
| rhea::constraint | placeAtTop (float margin=theme->margin) const noexcept |
| rhea::constraint | placeAtBottom (float margin=theme->margin) const noexcept |
| rhea::constraint | placeLeft (float margin=theme->margin) const noexcept |
| rhea::constraint | placeRight (float margin=theme->margin) const noexcept |
| vec | extent () const noexcept |
| void | setExtent (vec rhs) noexcept |
| vec | offsetFromParent () const noexcept |
| void | setOffsetFromParent (vec rhs) noexcept |
| vec | offsetFromWindow () const noexcept |
| void | setOffsetFromWindow (vec rhs) noexcept |
| aarect | rectangle () const noexcept |
| Get the rectangle in local coordinates. | |
| aarect | windowRectangle () const noexcept |
| Get the rectangle in window coordinates. | |
| aarect | clippingRectangle () const noexcept |
| Get the clipping-rectangle in window coordinates. | |
| GUIDevice * | device () const noexcept |
| virtual HitBox | hitBoxTest (vec position) const noexcept |
| Find the widget that is under the mouse cursor. | |
| virtual bool | acceptsFocus () const noexcept |
| Check if the widget will accept keyboard focus. | |
| ssize_t | nestingLevel () noexcept |
| Get nesting level used for selecting colors for the widget. | |
| float | z () noexcept |
| Get z value for compositing order. | |
| virtual int | needs (hires_utc_clock::time_point displayTimePoint) noexcept |
| Request the needs of the widget. | |
| virtual void | layout (hires_utc_clock::time_point displayTimePoint) noexcept |
| Layout the widget. | |
| int | layoutChildren (hires_utc_clock::time_point displayTimePoint, bool force) noexcept |
| Layout children of this widget. | |
| virtual void | draw (DrawContext const &drawContext, hires_utc_clock::time_point displayTimePoint) noexcept |
| Draw widget. | |
| virtual void | handleCommand (string_ltag command) noexcept |
| Handle command. | |
| virtual void | handleMouseEvent (MouseEvent const &event) noexcept |
| std::vector< Widget * > | childPointers (bool reverse) const noexcept |
| virtual Widget * | nextKeyboardWidget (Widget const *currentKeyboardWidget, bool reverse) const noexcept |
| virtual void | handleKeyboardEvent (KeyboardEvent const &event) noexcept |
Data Fields | |
| rhea::variable const | left |
| Location of the frame compared to the window. | |
| rhea::variable const | bottom |
| rhea::variable const | width |
| rhea::variable const | height |
| rhea::linear_expression const | right = left + width |
| rhea::linear_expression const | centre = left + width * 0.5 |
| rhea::linear_expression const | top = bottom + height |
| rhea::linear_expression const | middle = bottom + height * 0.5 |
| float | elevation |
| std::atomic< R32G32SFloat > | _extent |
| std::atomic< R32G32SFloat > | _offsetFromParent |
| std::atomic< R32G32SFloat > | _offsetFromWindow |
| std::atomic< bool > | forceLayout = true |
| std::atomic< bool > | forceRedraw = true |
| observable< bool > | enabled = true |
| The widget is enabled. | |
View of a widget. A view contains the dynamic data for a Widget. It is often accompanied with a Backing which contains that static data of an Widget and the drawing code. Backings are shared between Views.
Thread-safety: All method of the widget should lock the mutex, exceptions are: hitBoxTest(), needs() All public members should be thread-safe, for example: std::atomic and tt::observer The following methods should only be called from the render thread: needs(), layout(), layoutChildren(), draw(),
Constructor for creating sub views.
|
inlinevirtualnoexcept |
Check if the widget will accept keyboard focus.
Thread safety: reads atomics.
Reimplemented in tt::ButtonWidget, tt::CheckboxWidget< ValueType >, tt::LineInputWidget, tt::RadioButtonWidget< ValueType >, and tt::ToggleWidget< ValueType >.
|
virtualnoexcept |
Add a widget directly to this widget.
Thread safety: locks.
Reimplemented in tt::ColumnWidget, tt::RowWidget, and tt::ToolbarWidget.
|
inlinenoexcept |
Get the clipping-rectangle in window coordinates.
Thread safety: calls windowRectangle()
|
virtualnoexcept |
Draw widget.
The overriding function should call the base class's draw(), the place where the call this function will determine the order of the vertices into each buffer. This is important when needing to do the painters algorithm for alpha-compositing. However the pipelines are always drawn in the same order.
Thread safety: locks, must be called from render-thread
Reimplemented in tt::ButtonWidget, tt::CheckboxWidget< ValueType >, tt::ImageWidget, tt::LineInputWidget, tt::RadioButtonWidget< ValueType >, tt::SystemMenuWidget, tt::ToggleWidget< ValueType >, tt::ToolbarButtonWidget, tt::ToolbarWidget, and tt::WindowTrafficLightsWidget.
|
virtualnoexcept |
Handle command.
Thread safety: locks
Reimplemented in tt::ButtonWidget, tt::CheckboxWidget< ValueType >, tt::LineInputWidget, tt::RadioButtonWidget< ValueType >, and tt::ToggleWidget< ValueType >.
|
inlinevirtualnoexcept |
Handle keyboard event. Called by the operating system when editing text, or entering special keys
Thread safety: locks
Reimplemented in tt::LineInputWidget.
|
inlinevirtualnoexcept |
Handle mouse event. Called by the operating system to show the position and button state of the mouse. This is called very often so it must be made efficient. This function is also used to determine the mouse cursor.
Thread safety: locks
Reimplemented in tt::ButtonWidget, tt::CheckboxWidget< ValueType >, tt::ImageWidget, tt::LineInputWidget, tt::RadioButtonWidget< ValueType >, tt::ToggleWidget< ValueType >, tt::ToolbarButtonWidget, and tt::WindowTrafficLightsWidget.
Find the widget that is under the mouse cursor.
Thread safety: locks.
Reimplemented in tt::ButtonWidget, tt::CheckboxWidget< ValueType >, tt::ImageWidget, tt::LineInputWidget, tt::RadioButtonWidget< ValueType >, tt::SystemMenuWidget, tt::ToggleWidget< ValueType >, tt::ToolbarButtonWidget, tt::ToolbarWidget, tt::WindowTrafficLightsWidget, and tt::WindowWidget.
|
virtualnoexcept |
Layout the widget.
super::layout() should be called at start of the overriden function.
Thread safety: locks, must be called from render-thread
Reimplemented in tt::ButtonWidget, tt::CheckboxWidget< ValueType >, tt::ImageWidget, tt::LineInputWidget, tt::RadioButtonWidget< ValueType >, tt::SystemMenuWidget, tt::ToggleWidget< ValueType >, and tt::WindowTrafficLightsWidget.
|
noexcept |
Layout children of this widget.
Thread safety: locks, must be called from render-thread
| force | Force the layout of the widget. |
|
inline |
Add a widget directly to this widget.
Thread safety: modifies atomic. calls addWidget() and addWidgetDirectly()
|
inline |
Add a widget directly to this widget.
Thread safety: calls _addWidget
|
inline |
Add a widget directly to this widget.
Thread safety: modifies atomic. calls addWidget() and addWidgetDirectly()
|
inline |
Add a widget directly to this widget.
Thread safety: calls _addWidget
|
noexcept |
Create a window rectangle from left, bottom, width and height Thread-safety: locks window.widgetSolverMutex.
|
virtualnoexcept |
Request the needs of the widget.
This function will be called for each widget on each frame. Therefor it is important to optimize this function.
Thread safety: reads atomics, must be called from render-thread.
Reimplemented in tt::LineInputWidget.
|
inlinenoexcept |
Get nesting level used for selecting colors for the widget.
|
inlinenoexcept |
Get the rectangle in local coordinates.
Thread safety: reads atomics.
|
inlinenoexcept |
Get the rectangle in window coordinates.
Thread safety: reads atomics.
|
inlinenoexcept |
Get z value for compositing order.
| observable<bool> tt::Widget::enabled = true |
The widget is enabled.
| rhea::variable const tt::Widget::left |
Location of the frame compared to the window.
Thread-safety: the box is not modified by the class.