7#include "i18n/language_tag.hpp"
8#include "i18n/language.hpp"
9#include "GUI/theme_mode.hpp"
11#include "geometry/extent.hpp"
12#include "geometry/axis_aligned_rectangle.hpp"
13#include "unfair_mutex.hpp"
14#include "subsystem.hpp"
16#include "notifier.hpp"
20namespace hi::inline
v1 {
25 using callback_token = notifier_type::callback_token;
26 using callback_proto = notifier_type::callback_proto;
35 hilet lock = std::scoped_lock(_mutex);
36 return _language_tags;
47 hilet lock = std::scoped_lock(_mutex);
53 [[nodiscard]]
static hi::theme_mode
theme_mode() noexcept
56 return _theme_mode.load(std::memory_order_relaxed);
64 return _subpixel_orientation.load(std::memory_order_relaxed);
88 return _double_click_interval.load(std::memory_order_relaxed);
96 return _double_click_distance.load(std::memory_order_relaxed);
106 return _keyboard_repeat_delay.load(std::memory_order_relaxed);
116 return _keyboard_repeat_interval.load(std::memory_order_relaxed);
126 return _cursor_blink_delay.load(std::memory_order_relaxed);
137 return _cursor_blink_interval.load(std::memory_order_relaxed);
145 hilet lock = std::scoped_lock(_mutex);
146 return _minimum_window_size;
154 hilet lock = std::scoped_lock(_mutex);
155 return _maximum_window_size;
165 hilet lock = std::scoped_lock(_mutex);
166 return _primary_monitor_rectangle;
174 return _primary_monitor_id.load(std::memory_order::relaxed);
184 hilet lock = std::scoped_lock(_mutex);
185 return _desktop_rectangle;
195 hilet lock = std::scoped_lock(_mutex);
196 return _notifier.subscribe(
hi_forward(callback), flags);
206 static inline utc_nanoseconds _gather_last_time;
208 static inline notifier_type _notifier;
221 static inline extent2 _minimum_window_size = extent2{40.0f, 25.0f};
222 static inline extent2 _maximum_window_size = extent2{1920.0f, 1080.0f};
224 static inline aarectangle _primary_monitor_rectangle = aarectangle{0.0, 0.0, 1920.0f, 1080.0f};
225 static inline aarectangle _desktop_rectangle = aarectangle{0.0, 0.0, 1920.0f, 1080.0f};
231 static bool start_subsystem() noexcept
233 return hi::start_subsystem(_started,
false, subsystem_init, subsystem_deinit);
236 [[nodiscard]]
static bool subsystem_init() noexcept;
237 static
void subsystem_deinit() noexcept;
239 [[nodiscard]] static
std::vector<language_tag> gather_languages();
240 [[nodiscard]] static
hi::theme_mode gather_theme_mode();
241 [[nodiscard]] static
hi::subpixel_orientation gather_subpixel_orientation();
242 [[nodiscard]] static
bool gather_uniform_HDR();
243 [[nodiscard]] static
std::chrono::milliseconds gather_double_click_interval();
244 [[nodiscard]] static
float gather_double_click_distance();
245 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_delay();
246 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_interval();
247 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_interval();
248 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_delay();
249 [[nodiscard]] static extent2 gather_minimum_window_size();
250 [[nodiscard]] static extent2 gather_maximum_window_size();
251 [[nodiscard]] static uintptr_t gather_primary_monitor_id();
252 [[nodiscard]] static aarectangle gather_primary_monitor_rectangle();
253 [[nodiscard]] static aarectangle gather_desktop_rectangle();
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition utility.hpp:29
DOXYGEN BUG.
Definition algorithm.hpp:15
callback_flags
Definition callback_flags.hpp:12
The HikoGUI namespace.
Definition ascii.hpp:19
Class which represents an axis-aligned rectangle.
Definition axis_aligned_rectangle.hpp:20
A notifier which can be used to call a set of registered callbacks.
Definition notifier.hpp:24
Definition os_settings.hpp:22
static std::chrono::milliseconds keyboard_repeat_delay() noexcept
Get the delay before the keyboard starts repeating.
Definition os_settings.hpp:103
static aarectangle primary_monitor_rectangle() noexcept
Get the rectangle of the primary monitor.
Definition os_settings.hpp:162
static std::chrono::milliseconds keyboard_repeat_interval() noexcept
Get the keyboard repeat interval.
Definition os_settings.hpp:113
static extent2 maximum_window_size() noexcept
Get the maximum window size supported by the operating system.
Definition os_settings.hpp:151
static extent2 minimum_window_size() noexcept
Get the minimum window size supported by the operating system.
Definition os_settings.hpp:142
static std::vector< language * > languages() noexcept
Get the configured languages.
Definition os_settings.hpp:44
static hi::subpixel_orientation subpixel_orientation() noexcept
Get the configured light/dark theme mode.
Definition os_settings.hpp:61
static std::chrono::milliseconds cursor_blink_delay() noexcept
Get the cursor blink delay.
Definition os_settings.hpp:123
static aarectangle desktop_rectangle() noexcept
Get the rectangle describing the desktop.
Definition os_settings.hpp:181
static void gather() noexcept
Gather the settings from the operating system now.
static float double_click_distance() noexcept
Get the distance from the previous mouse position to detect double click.
Definition os_settings.hpp:93
static uintptr_t primary_monitor_id() noexcept
Get an opaque id of the primary monitor.
Definition os_settings.hpp:171
static std::chrono::milliseconds double_click_interval() noexcept
Get the mouse double click interval.
Definition os_settings.hpp:85
static bool uniform_HDR() noexcept
Whether SDR and HDR application can coexists on the same display.
Definition os_settings.hpp:77
static std::vector< language_tag > language_tags() noexcept
Get the language tags for the configured languages.
Definition os_settings.hpp:32
static hi::theme_mode theme_mode() noexcept
Get the configured light/dark theme mode.
Definition os_settings.hpp:53
static std::chrono::milliseconds cursor_blink_interval() noexcept
Get the cursor blink interval.
Definition os_settings.hpp:134
True if T is a forwarded type of Forward.
Definition concepts.hpp:130