use alloc::collections::BTreeMap;
use azul_core::{
callbacks::LayoutCallback,
dom::DomId,
window::{
DebugState, ImePosition, KeyboardState, Monitor, MouseState, PlatformSpecificOptions,
RendererOptions, TouchState, WindowFlags, WindowPosition, WindowSize, WindowTheme,
},
};
use azul_css::{
corety::OptionU32, impl_option, impl_option_inner, impl_vec, impl_vec_clone, impl_vec_debug,
impl_vec_mut, impl_vec_partialeq, props::basic::OptionColorU, AzString,
};
use crate::callbacks::OptionCallback;
#[derive(Debug, Clone, PartialEq)]
#[repr(C)]
pub struct WindowCreateOptions {
pub window_state: FullWindowState,
pub size_to_content: bool,
pub renderer: azul_core::window::OptionRendererOptions,
pub theme: azul_core::window::OptionWindowTheme,
pub create_callback: OptionCallback,
pub hot_reload: bool,
}
impl Default for WindowCreateOptions {
fn default() -> Self {
Self {
window_state: FullWindowState::default(),
size_to_content: false,
renderer: azul_core::window::OptionRendererOptions::None,
theme: azul_core::window::OptionWindowTheme::None,
create_callback: OptionCallback::None,
hot_reload: false,
}
}
}
impl WindowCreateOptions {
pub fn create(layout_callback: impl Into<azul_core::callbacks::LayoutCallback>) -> Self {
let mut options = Self::default();
options.window_state.layout_callback = layout_callback.into();
options
}
}
impl_option!(WindowCreateOptions, OptionWindowCreateOptions, copy = false, [Debug, Clone, PartialEq]);
impl_vec!(WindowCreateOptions, WindowCreateOptionsVec, WindowCreateOptionsVecDestructor, WindowCreateOptionsVecDestructorType, WindowCreateOptionsVecSlice, OptionWindowCreateOptions);
impl_vec_clone!(
WindowCreateOptions,
WindowCreateOptionsVec,
WindowCreateOptionsVecDestructor
);
impl_vec_partialeq!(WindowCreateOptions, WindowCreateOptionsVec);
impl_vec_debug!(WindowCreateOptions, WindowCreateOptionsVec);
impl_vec_mut!(WindowCreateOptions, WindowCreateOptionsVec);
#[derive(Debug, Clone, PartialEq)]
#[repr(C)]
pub struct FullWindowState {
pub window_id: AzString,
pub theme: WindowTheme,
pub title: AzString,
pub size: WindowSize,
pub position: WindowPosition,
pub flags: WindowFlags,
pub debug_state: DebugState,
pub keyboard_state: KeyboardState,
pub mouse_state: MouseState,
pub touch_state: TouchState,
pub ime_position: ImePosition,
pub platform_specific_options: PlatformSpecificOptions,
pub renderer_options: RendererOptions,
pub background_color: OptionColorU,
pub layout_callback: LayoutCallback,
pub close_callback: OptionCallback,
pub monitor_id: OptionU32,
pub window_focused: bool,
}
impl_option!(
FullWindowState,
OptionFullWindowState,
copy = false,
[Debug, Clone, PartialEq]
);
impl Default for FullWindowState {
fn default() -> Self {
Self {
window_id: AzString::from_const_str("azul-window"),
theme: WindowTheme::default(),
title: AzString::from_const_str("Azul Window"),
size: WindowSize::default(),
position: WindowPosition::default(),
flags: WindowFlags::default(),
debug_state: DebugState::default(),
keyboard_state: KeyboardState::default(),
mouse_state: MouseState::default(),
touch_state: TouchState::default(),
ime_position: ImePosition::default(),
platform_specific_options: PlatformSpecificOptions::default(),
background_color: OptionColorU::None,
layout_callback: LayoutCallback::default(),
close_callback: OptionCallback::None,
renderer_options: RendererOptions::default(),
monitor_id: OptionU32::None,
window_focused: true,
}
}
}