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 {
31 hilet lock = std::scoped_lock(_mutex);
32 return _language_tags;
43 hilet lock = std::scoped_lock(_mutex);
49 [[nodiscard]]
static hi::theme_mode
theme_mode() noexcept
52 return _theme_mode.load(std::memory_order_relaxed);
60 return _subpixel_orientation.load(std::memory_order_relaxed);
68 return _double_click_interval.load(std::memory_order_relaxed);
76 return _double_click_distance.load(std::memory_order_relaxed);
86 return _keyboard_repeat_delay.load(std::memory_order_relaxed);
96 return _keyboard_repeat_interval.load(std::memory_order_relaxed);
106 return _cursor_blink_delay.load(std::memory_order_relaxed);
117 return _cursor_blink_interval.load(std::memory_order_relaxed);
125 hilet lock = std::scoped_lock(_mutex);
126 return _minimum_window_size;
134 hilet lock = std::scoped_lock(_mutex);
135 return _maximum_window_size;
145 hilet lock = std::scoped_lock(_mutex);
146 return _primary_monitor_rectangle;
154 return _primary_monitor_id.load(std::memory_order::relaxed);
164 hilet lock = std::scoped_lock(_mutex);
165 return _desktop_rectangle;
172 [[nodiscard]] static auto subscribe(
std::invocable<> auto &&callback) noexcept
175 hilet lock = std::scoped_lock(_mutex);
176 return _notifier.subscribe(
hi_forward(callback));
186 static inline utc_nanoseconds _gather_last_time;
188 static inline notifier<void()> _notifier;
200 static inline extent2 _minimum_window_size = extent2{40.0f, 25.0f};
201 static inline extent2 _maximum_window_size = extent2{1920.0f, 1080.0f};
203 static inline aarectangle _primary_monitor_rectangle = aarectangle{0.0, 0.0, 1920.0f, 1080.0f};
204 static inline aarectangle _desktop_rectangle = aarectangle{0.0, 0.0, 1920.0f, 1080.0f};
210 static bool start_subsystem() noexcept
212 return hi::start_subsystem(_started,
false, subsystem_init, subsystem_deinit);
215 [[nodiscard]]
static bool subsystem_init() noexcept;
216 static
void subsystem_deinit() noexcept;
218 [[nodiscard]] static
std::vector<language_tag> gather_languages();
219 [[nodiscard]] static hi::theme_mode gather_theme_mode();
220 [[nodiscard]] static hi::subpixel_orientation gather_subpixel_orientation();
221 [[nodiscard]] static
std::chrono::milliseconds gather_double_click_interval();
222 [[nodiscard]] static
float gather_double_click_distance();
223 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_delay();
224 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_interval();
225 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_interval();
226 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_delay();
227 [[nodiscard]] static extent2 gather_minimum_window_size();
228 [[nodiscard]] static extent2 gather_maximum_window_size();
229 [[nodiscard]] static uintptr_t gather_primary_monitor_id();
230 [[nodiscard]] static aarectangle gather_primary_monitor_rectangle();
231 [[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:23
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:83
static aarectangle primary_monitor_rectangle() noexcept
Get the rectangle of the primary monitor.
Definition os_settings.hpp:142
static std::chrono::milliseconds keyboard_repeat_interval() noexcept
Get the keyboard repeat interval.
Definition os_settings.hpp:93
static extent2 maximum_window_size() noexcept
Get the maximum window size supported by the operating system.
Definition os_settings.hpp:131
static extent2 minimum_window_size() noexcept
Get the minimum window size supported by the operating system.
Definition os_settings.hpp:122
static std::vector< language * > languages() noexcept
Get the configured languages.
Definition os_settings.hpp:40
static hi::subpixel_orientation subpixel_orientation() noexcept
Get the configured light/dark theme mode.
Definition os_settings.hpp:57
static std::chrono::milliseconds cursor_blink_delay() noexcept
Get the cursor blink delay.
Definition os_settings.hpp:103
static aarectangle desktop_rectangle() noexcept
Get the rectangle describing the desktop.
Definition os_settings.hpp:161
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:73
static uintptr_t primary_monitor_id() noexcept
Get an opaque id of the primary monitor.
Definition os_settings.hpp:151
static std::chrono::milliseconds double_click_interval() noexcept
Get the mouse double click interval.
Definition os_settings.hpp:65
static std::vector< language_tag > language_tags() noexcept
Get the language tags for the configured languages.
Definition os_settings.hpp:28
static hi::theme_mode theme_mode() noexcept
Get the configured light/dark theme mode.
Definition os_settings.hpp:49
static std::chrono::milliseconds cursor_blink_interval() noexcept
Get the cursor blink interval.
Definition os_settings.hpp:114