HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
GUIDevice_base.hpp
1// Copyright 2019 Pokitec
2// All rights reserved.
3
4#pragma once
5
6#include "TTauri/GUI/Window.hpp"
7#include "TTauri/GUI/globals.hpp"
8#include "TTauri/Foundation/exceptions.hpp"
9#include "TTauri/Foundation/numeric_cast.hpp"
10#include "TTauri/Foundation/bigint.hpp"
11#include <unordered_set>
12#include <mutex>
13#include <tuple>
14
15namespace tt {
16
20public:
21 enum class State {
22 NO_DEVICE,
23 READY_TO_DRAW,
24 };
25
26 State state = State::NO_DEVICE;
27
28 std::string deviceName = "<no device>";
29 uint32_t vendorID = 0;
30 uint32_t deviceID = 0;
31 uuid deviceUUID = {};
32
36
37 std::string string() const noexcept;
38
39 GUIDevice_base() noexcept;
40 virtual ~GUIDevice_base();
41
42 GUIDevice_base(const GUIDevice_base &) = delete;
43 GUIDevice_base &operator=(const GUIDevice_base &) = delete;
44 GUIDevice_base(GUIDevice_base &&) = delete;
45 GUIDevice_base &operator=(GUIDevice_base &&) = delete;
46
54 virtual int score(Window const &window) const = 0;
55
60 virtual void initializeDevice(Window const &window);
61
62 ssize_t getNumberOfWindows() const noexcept {
63 return ssize(windows);
64 }
65
66 void add(std::unique_ptr<Window> window);
67
68 void remove(Window &window) noexcept;
69
70 void render(hires_utc_clock::time_point displayTimePoint) noexcept {
71 for (auto &window: windows) {
72 window->render(displayTimePoint);
73 }
74
75 ttlet new_end = std::remove_if(windows.begin(), windows.end(), [](ttlet &window) { return window->isClosed(); });
76 windows.erase(new_end, windows.end());
77 }
78};
79
80}
Definition GUIDevice_base.hpp:19
std::vector< std::unique_ptr< Window > > windows
Definition GUIDevice_base.hpp:35
virtual void initializeDevice(Window const &window)
virtual int score(Window const &window) const =0
Definition Window_vulkan_win32.hpp:15
T remove_if(T... args)