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 token_type = notifier_type::token_type;
34 hilet lock = std::scoped_lock(_mutex);
35 return _language_tags;
46 hilet lock = std::scoped_lock(_mutex);
52 [[nodiscard]]
static hi::theme_mode
theme_mode() noexcept
55 return _theme_mode.load(std::memory_order_relaxed);
63 return _subpixel_orientation.load(std::memory_order_relaxed);
87 return _double_click_interval.load(std::memory_order_relaxed);
95 return _double_click_distance.load(std::memory_order_relaxed);
105 return _keyboard_repeat_delay.load(std::memory_order_relaxed);
115 return _keyboard_repeat_interval.load(std::memory_order_relaxed);
125 return _cursor_blink_delay.load(std::memory_order_relaxed);
136 return _cursor_blink_interval.load(std::memory_order_relaxed);
144 hilet lock = std::scoped_lock(_mutex);
145 return _minimum_window_size;
153 hilet lock = std::scoped_lock(_mutex);
154 return _maximum_window_size;
164 hilet lock = std::scoped_lock(_mutex);
165 return _primary_monitor_rectangle;
173 return _primary_monitor_id.load(std::memory_order::relaxed);
183 hilet lock = std::scoped_lock(_mutex);
184 return _desktop_rectangle;
191 [[nodiscard]] static token_type subscribe(callback_flags flags,
std::invocable<> auto&& callback) noexcept
194 hilet lock = std::scoped_lock(_mutex);
195 return _notifier.subscribe(flags,
hi_forward(callback));
198 [[nodiscard]]
static token_type subscribe(std::invocable<>
auto&& callback)
noexcept
200 return subscribe(callback_flags::synchronous,
hi_forward(callback));
208 static inline unfair_mutex _mutex;
209 static inline loop::timer_token_type _gather_cbt;
210 static inline utc_nanoseconds _gather_last_time;
212 static inline notifier_type _notifier;
225 static inline extent2 _minimum_window_size = extent2{40.0f, 25.0f};
226 static inline extent2 _maximum_window_size = extent2{1920.0f, 1080.0f};
228 static inline aarectangle _primary_monitor_rectangle = aarectangle{0.0, 0.0, 1920.0f, 1080.0f};
229 static inline aarectangle _desktop_rectangle = aarectangle{0.0, 0.0, 1920.0f, 1080.0f};
235 static bool start_subsystem() noexcept
237 return hi::start_subsystem(_started,
false, subsystem_init, subsystem_deinit);
240 [[nodiscard]]
static bool subsystem_init() noexcept;
241 static
void subsystem_deinit() noexcept;
243 [[nodiscard]] static
std::vector<language_tag> gather_languages();
244 [[nodiscard]] static hi::theme_mode gather_theme_mode();
245 [[nodiscard]] static hi::subpixel_orientation gather_subpixel_orientation();
246 [[nodiscard]] static
bool gather_uniform_HDR();
247 [[nodiscard]] static
std::chrono::milliseconds gather_double_click_interval();
248 [[nodiscard]] static
float gather_double_click_distance();
249 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_delay();
250 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_interval();
251 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_interval();
252 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_delay();
253 [[nodiscard]] static extent2 gather_minimum_window_size();
254 [[nodiscard]] static extent2 gather_maximum_window_size();
255 [[nodiscard]] static uintptr_t gather_primary_monitor_id();
256 [[nodiscard]] static aarectangle gather_primary_monitor_rectangle();
257 [[nodiscard]] static aarectangle gather_desktop_rectangle();
#define hilet
Invariant should be the default for variables.
Definition required.hpp:23
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition required.hpp:29
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:102
static aarectangle primary_monitor_rectangle() noexcept
Get the rectangle of the primary monitor.
Definition os_settings.hpp:161
static std::chrono::milliseconds keyboard_repeat_interval() noexcept
Get the keyboard repeat interval.
Definition os_settings.hpp:112
static extent2 maximum_window_size() noexcept
Get the maximum window size supported by the operating system.
Definition os_settings.hpp:150
static extent2 minimum_window_size() noexcept
Get the minimum window size supported by the operating system.
Definition os_settings.hpp:141
static std::vector< language * > languages() noexcept
Get the configured languages.
Definition os_settings.hpp:43
static hi::subpixel_orientation subpixel_orientation() noexcept
Get the configured light/dark theme mode.
Definition os_settings.hpp:60
static std::chrono::milliseconds cursor_blink_delay() noexcept
Get the cursor blink delay.
Definition os_settings.hpp:122
static aarectangle desktop_rectangle() noexcept
Get the rectangle describing the desktop.
Definition os_settings.hpp:180
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:92
static uintptr_t primary_monitor_id() noexcept
Get an opaque id of the primary monitor.
Definition os_settings.hpp:170
static std::chrono::milliseconds double_click_interval() noexcept
Get the mouse double click interval.
Definition os_settings.hpp:84
static bool uniform_HDR() noexcept
Whether SDR and HDR application can coexists on the same display.
Definition os_settings.hpp:76
static std::vector< language_tag > language_tags() noexcept
Get the language tags for the configured languages.
Definition os_settings.hpp:31
static hi::theme_mode theme_mode() noexcept
Get the configured light/dark theme mode.
Definition os_settings.hpp:52
static std::chrono::milliseconds cursor_blink_interval() noexcept
Get the cursor blink interval.
Definition os_settings.hpp:133