7#include "i18n/language_tag.hpp"
8#include "i18n/language.hpp"
9#include "GUI/theme_mode.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;
34 hi_axiom(_populated.load(std::memory_order::acquire));
35 hilet lock = std::scoped_lock(_mutex);
36 return _language_tags;
46 hi_axiom(_populated.load(std::memory_order::acquire));
47 hilet lock = std::scoped_lock(_mutex);
59 hi_axiom(_populated.load(std::memory_order::acquire));
60 return _writing_direction.load(std::memory_order::relaxed);
69 return writing_direction() == unicode_bidi_class::L;
78 return not left_to_right();
83 [[nodiscard]]
static hi::theme_mode
theme_mode() noexcept
85 hi_axiom(_populated.load(std::memory_order::acquire));
86 return _theme_mode.load(std::memory_order::relaxed);
93 hi_axiom(_populated.load(std::memory_order::acquire));
94 return _subpixel_orientation.load(std::memory_order::relaxed);
109 hi_axiom(_populated.load(std::memory_order::acquire));
110 return _uniform_HDR.load(std::memory_order::relaxed);
117 hi_axiom(_populated.load(std::memory_order::acquire));
118 return _double_click_interval.load(std::memory_order::relaxed);
125 hi_axiom(_populated.load(std::memory_order::acquire));
126 return _double_click_distance.load(std::memory_order::relaxed);
135 hi_axiom(_populated.load(std::memory_order::acquire));
136 return _keyboard_repeat_delay.load(std::memory_order::relaxed);
145 hi_axiom(_populated.load(std::memory_order::acquire));
146 return _keyboard_repeat_interval.load(std::memory_order::relaxed);
155 hi_axiom(_populated.load(std::memory_order::acquire));
156 return _cursor_blink_delay.load(std::memory_order::relaxed);
166 hi_axiom(_populated.load(std::memory_order::acquire));
167 return _cursor_blink_interval.load(std::memory_order::relaxed);
176 hi_axiom(_populated.load(std::memory_order::acquire));
177 return _minimum_window_width.load(std::memory_order::relaxed);
186 hi_axiom(_populated.load(std::memory_order::acquire));
187 return _minimum_window_height.load(std::memory_order::relaxed);
196 hi_axiom(_populated.load(std::memory_order::acquire));
197 return _maximum_window_width.load(std::memory_order::relaxed);
206 hi_axiom(_populated.load(std::memory_order::acquire));
207 return _maximum_window_height.load(std::memory_order::relaxed);
216 hi_axiom(_populated.load(std::memory_order::acquire));
217 hilet lock = std::scoped_lock(_mutex);
218 return _primary_monitor_rectangle;
225 hi_axiom(_populated.load(std::memory_order::acquire));
226 return _primary_monitor_id.load(std::memory_order::relaxed);
235 hi_axiom(_populated.load(std::memory_order::acquire));
236 hilet lock = std::scoped_lock(_mutex);
237 return _desktop_rectangle;
244 [[nodiscard]] static callback_token
247 hilet lock = std::scoped_lock(_mutex);
248 return _notifier.subscribe(
hi_forward(callback), flags);
257 return hi::start_subsystem(_started,
false, subsystem_init, subsystem_deinit);
268 static inline utc_nanoseconds _gather_last_time;
270 static inline notifier_type _notifier;
289 static inline aarectanglei _primary_monitor_rectangle = aarectanglei{0, 0, 1920, 1080};
290 static inline aarectanglei _desktop_rectangle = aarectanglei{0, 0, 1920, 1080};
292 [[nodiscard]]
static bool subsystem_init() noexcept;
293 static
void subsystem_deinit() noexcept;
295 [[nodiscard]] static
std::vector<language_tag> gather_languages();
296 [[nodiscard]] static
hi::theme_mode gather_theme_mode();
297 [[nodiscard]] static
hi::subpixel_orientation gather_subpixel_orientation();
298 [[nodiscard]] static
bool gather_uniform_HDR();
299 [[nodiscard]] static
std::chrono::milliseconds gather_double_click_interval();
300 [[nodiscard]] static
float gather_double_click_distance();
301 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_delay();
302 [[nodiscard]] static
std::chrono::milliseconds gather_keyboard_repeat_interval();
303 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_interval();
304 [[nodiscard]] static
std::chrono::milliseconds gather_cursor_blink_delay();
305 [[nodiscard]] static
int gather_minimum_window_width();
306 [[nodiscard]] static
int gather_minimum_window_height();
307 [[nodiscard]] static
int gather_maximum_window_width();
308 [[nodiscard]] static
int gather_maximum_window_height();
309 [[nodiscard]] static uintptr_t gather_primary_monitor_id();
310 [[nodiscard]] static aarectanglei gather_primary_monitor_rectangle();
311 [[nodiscard]] static aarectanglei gather_desktop_rectangle();
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:133
#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
Defined the geo::extent, extent2 and extent3 types.
DOXYGEN BUG.
Definition algorithm.hpp:15
callback_flags
Definition callback_flags.hpp:12
unicode_bidi_class
Bidirectional class Unicode Standard Annex #9: https://unicode.org/reports/tr9/.
Definition unicode_bidi_class.hpp:17
geometry/margins.hpp
Definition assert.hpp:18
A notifier which can be used to call a set of registered callbacks.
Definition notifier.hpp:26
Definition os_settings.hpp:22
static int maximum_window_height() noexcept
The maximum height a window is allowed to be.
Definition os_settings.hpp:204
static std::chrono::milliseconds keyboard_repeat_delay() noexcept
Get the delay before the keyboard starts repeating.
Definition os_settings.hpp:133
static unicode_bidi_class writing_direction() noexcept
Get the configured writing direction.
Definition os_settings.hpp:57
static bool start_subsystem() noexcept
Get the global os_settings instance.
Definition os_settings.hpp:255
static std::chrono::milliseconds keyboard_repeat_interval() noexcept
Get the keyboard repeat interval.
Definition os_settings.hpp:143
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:91
static std::chrono::milliseconds cursor_blink_delay() noexcept
Get the cursor blink delay.
Definition os_settings.hpp:153
static aarectanglei desktop_rectangle() noexcept
Get the rectangle describing the desktop.
Definition os_settings.hpp:233
static int minimum_window_width() noexcept
The minimum width a window is allowed to be.
Definition os_settings.hpp:174
static aarectanglei primary_monitor_rectangle() noexcept
Get the rectangle of the primary monitor.
Definition os_settings.hpp:214
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:123
static uintptr_t primary_monitor_id() noexcept
Get an opaque id of the primary monitor.
Definition os_settings.hpp:223
static int minimum_window_height() noexcept
The minimum height a window is allowed to be.
Definition os_settings.hpp:184
static bool left_to_right() noexcept
Check if the configured writing direction is left-to-right.
Definition os_settings.hpp:67
static int maximum_window_width() noexcept
The maximum width a window is allowed to be.
Definition os_settings.hpp:194
static std::chrono::milliseconds double_click_interval() noexcept
Get the mouse double click interval.
Definition os_settings.hpp:115
static bool uniform_HDR() noexcept
Whether SDR and HDR application can coexists on the same display.
Definition os_settings.hpp:107
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:83
static bool right_to_left() noexcept
Check if the configured writing direction is right-to-left.
Definition os_settings.hpp:76
static std::chrono::milliseconds cursor_blink_interval() noexcept
Get the cursor blink interval.
Definition os_settings.hpp:164
True if T is a forwarded type of Forward.
Definition concepts.hpp:130