HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
overlay_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 "overlay_delegate.hpp"
9
10namespace tt {
11
34class overlay_widget final : public widget {
35public:
36 using super = widget;
38
47
57 template<typename Widget, typename... Args>
58 Widget &make_widget(Args &&...args) noexcept
59 {
60 tt_axiom(is_gui_thread());
61 tt_axiom(not _content);
62
63 auto &widget = super::make_widget<Widget>(std::forward<Args>(args)...);
64 _content = &widget;
65 return widget;
66 }
67
69 void init() noexcept override;
70 void deinit() noexcept override;
71 [[nodiscard]] bool constrain(hires_utc_clock::time_point display_time_point, bool need_reconstrain) noexcept override;
72 [[nodiscard]] void layout(hires_utc_clock::time_point display_time_point, bool need_layout) noexcept override;
73 void draw(draw_context context, hires_utc_clock::time_point display_time_point) noexcept override;
74 [[nodiscard]] color background_color() const noexcept override;
75 [[nodiscard]] color foreground_color() const noexcept override;
76 void scroll_to_show(tt::rectangle rectangle) noexcept override;
78private:
79 std::weak_ptr<delegate_type> _delegate;
80 widget *_content = nullptr;
81
82 void draw_background(draw_context context) noexcept;
83};
84
85} // namespace tt
STL namespace.
This is a RGBA floating point color.
Definition color.hpp:36
Class which represents an rectangle.
Definition rectangle.hpp:16
Draw context for drawing using the TTauri shaders.
Definition draw_context.hpp:29
Definition gui_window.hpp:36
Timestamp.
Definition hires_utc_clock.hpp:19
Definition overlay_delegate.hpp:13
A GUI widget which may exist anywhere on a window overlaid above any other widget.
Definition overlay_widget.hpp:34
Widget & make_widget(Args &&...args) noexcept
Add a content widget directly to this overlay widget.
Definition overlay_widget.hpp:58
overlay_widget(gui_window &window, widget *parent, std::weak_ptr< delegate_type > delegate={}) noexcept
Constructs an empty overlay widget.
An interactive graphical object as part of the user-interface.
Definition widget.hpp:39
widget *const parent
Pointer to the parent widget.
Definition widget.hpp:48
gui_window & window
Convenient reference to the Window.
Definition widget.hpp:43
widget(gui_window &window, widget *parent) noexcept