HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
gui_device.hpp
1// Copyright Take Vos 2019-2020.
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 "gui_window.hpp"
8#include "gui_system_globals.hpp"
9#include "../exception.hpp"
10#include "../cast.hpp"
11#include "../bigint.hpp"
12#include "../unfair_recursive_mutex.hpp"
13#include <unordered_set>
14#include <mutex>
15#include <tuple>
16
17namespace tt {
18class gui_system;
19
23public:
24 enum class state_type {
25 no_device,
26 ready_to_draw,
27 };
28
29 gui_system &system;
30
31 state_type state = state_type::no_device;
32
33 std::string deviceName = "<no device>";
34 uint32_t vendorID = 0;
35 uint32_t deviceID = 0;
36 uuid deviceUUID = {};
37
38 std::string string() const noexcept;
39
40 gui_device(gui_system &system) noexcept;
41 virtual ~gui_device();
42
43 gui_device(const gui_device &) = delete;
44 gui_device &operator=(const gui_device &) = delete;
45 gui_device(gui_device &&) = delete;
46 gui_device &operator=(gui_device &&) = delete;
47
55 virtual int score(gui_window const &window) const = 0;
56
61 virtual void initialize_device(gui_window const &window);
62
63 ssize_t num_windows() const noexcept {
64 return std::ssize(windows);
65 }
66
67 void add(std::shared_ptr<gui_window> window);
68
69 void remove(gui_window &window) noexcept;
70
71 void render(hires_utc_clock::time_point displayTimePoint) noexcept {
72 ttlet lock = std::scoped_lock(gui_system_mutex);
73
74 for (auto &window: windows) {
75 window->render(displayTimePoint);
76 }
77
78 ttlet new_end = std::remove_if(windows.begin(), windows.end(), [](ttlet &window) { return window->is_closed(); });
79 windows.erase(new_end, windows.end());
80 }
81
82protected:
86};
87
88}
Definition gui_device.hpp:22
virtual int score(gui_window const &window) const =0
virtual void initialize_device(gui_window const &window)
Vulkan gui_device controller.
Definition gui_system.hpp:24
Definition gui_window.hpp:39
T remove_if(T... args)