1use alloc::collections::BTreeMap;
8
9use azul_core::{
10 callbacks::LayoutCallback,
11 dom::DomId,
12 window::{
13 DebugState, ImePosition, KeyboardState, Monitor, MouseState, PlatformSpecificOptions,
14 RendererOptions, TouchState, WindowFlags, WindowPosition, WindowSize, WindowTheme,
15 },
16};
17use azul_css::{
18 corety::OptionU32, impl_option, impl_option_inner, impl_vec, impl_vec_clone, impl_vec_debug,
19 impl_vec_mut, impl_vec_partialeq, props::basic::OptionColorU, AzString,
20};
21
22use crate::callbacks::OptionCallback;
23
24#[derive(Debug, Clone, PartialEq)]
26#[repr(C)]
27pub struct WindowCreateOptions {
28 pub window_state: FullWindowState,
30 pub create_callback: OptionCallback,
32 pub renderer: azul_core::window::OptionRendererOptions,
34 pub theme: azul_core::window::OptionWindowTheme,
36 pub size_to_content: bool,
38 pub hot_reload: bool,
40}
41
42impl Default for WindowCreateOptions {
43 fn default() -> Self {
44 Self {
45 window_state: FullWindowState::default(),
46 create_callback: OptionCallback::None,
47 renderer: azul_core::window::OptionRendererOptions::None,
48 theme: azul_core::window::OptionWindowTheme::None,
49 size_to_content: false,
50 hot_reload: false,
51 }
52 }
53}
54
55impl WindowCreateOptions {
56 pub fn create(layout_callback: impl Into<azul_core::callbacks::LayoutCallback>) -> Self {
58 let mut options = Self::default();
59 options.window_state.layout_callback = layout_callback.into();
60 options
61 }
62}
63
64impl_option!(WindowCreateOptions, OptionWindowCreateOptions, copy = false, [Debug, Clone, PartialEq]);
65impl_vec!(WindowCreateOptions, WindowCreateOptionsVec, WindowCreateOptionsVecDestructor, WindowCreateOptionsVecDestructorType, WindowCreateOptionsVecSlice, OptionWindowCreateOptions);
66impl_vec_clone!(
67 WindowCreateOptions,
68 WindowCreateOptionsVec,
69 WindowCreateOptionsVecDestructor
70);
71impl_vec_partialeq!(WindowCreateOptions, WindowCreateOptionsVec);
72impl_vec_debug!(WindowCreateOptions, WindowCreateOptionsVec);
73impl_vec_mut!(WindowCreateOptions, WindowCreateOptionsVec);
74
75#[derive(Debug, Clone, PartialEq)]
77#[repr(C)]
78pub struct FullWindowState {
79 pub platform_specific_options: PlatformSpecificOptions,
81 pub keyboard_state: KeyboardState,
83 pub window_id: AzString,
86 pub title: AzString,
88 pub close_callback: OptionCallback,
90 pub layout_callback: LayoutCallback,
92 pub position: WindowPosition,
94 pub touch_state: TouchState,
96 pub size: WindowSize,
98 pub flags: WindowFlags,
100 pub mouse_state: MouseState,
102 pub theme: WindowTheme,
104 pub ime_position: ImePosition,
106 pub renderer_options: RendererOptions,
108 pub monitor_id: OptionU32,
110 pub debug_state: DebugState,
112 pub background_color: OptionColorU,
114 pub window_focused: bool,
116 pub active_route: azul_core::resources::OptionRouteMatch,
120}
121
122impl_option!(
123 FullWindowState,
124 OptionFullWindowState,
125 copy = false,
126 [Debug, Clone, PartialEq]
127);
128
129impl Default for FullWindowState {
130 fn default() -> Self {
131 Self {
132 platform_specific_options: PlatformSpecificOptions::default(),
133 keyboard_state: KeyboardState::default(),
134 window_id: AzString::from_const_str("azul-window"),
135 title: AzString::from_const_str("Azul Window"),
136 close_callback: OptionCallback::None,
137 layout_callback: LayoutCallback::default(),
138 position: WindowPosition::default(),
139 touch_state: TouchState::default(),
140 size: WindowSize::default(),
141 flags: WindowFlags::default(),
142 mouse_state: MouseState::default(),
143 theme: WindowTheme::default(),
144 ime_position: ImePosition::default(),
145 renderer_options: RendererOptions::default(),
146 monitor_id: OptionU32::None,
147 debug_state: DebugState::default(),
148 background_color: OptionColorU::None,
149 window_focused: true,
150 active_route: azul_core::resources::OptionRouteMatch::None,
151 }
152 }
153}