#[macro_export]
macro_rules! box_start_with_component {
(
in: $arg_surface : expr, // Eg: in: tw_surface,
id: $arg_id : expr, // Eg: 0,
dir: $arg_dir : expr, // Eg: Direction::Horizontal,
requested_size_percent: $arg_requested_size_percent : expr, // Eg: (50, 100).try_into()?,
styles: [$($args:tt)*], render: {$($tail:tt)*} ) => {
box_start! {
in: $arg_surface,
id: $arg_id,
dir: $arg_dir,
requested_size_percent: $arg_requested_size_percent,
styles: [$($args)*]
};
render_component_in_surface! {
in: $arg_surface,
component_id: $arg_id,
$($tail)*
};
$arg_surface.box_end()?;
};
}
#[macro_export]
macro_rules! box_start_with_surface_renderer {
(
in: $arg_surface : expr, // Eg: in: tw_surface,
surface_renderer: $arg_renderer : expr, // Eg: surface_renderer: two_col_layout,
id: $arg_id : expr, // Eg: 0,
dir: $arg_dir : expr, // Eg: Direction::Horizontal,
requested_size_percent: $arg_requested_size_percent : expr, // Eg: (50, 100).try_into()?,
styles: [$($args_styles:tt)*], state: $arg_state : expr, shared_store: $arg_shared_store : expr, shared_tw_data: $arg_shared_tw_data : expr, window_size: $arg_window_size : expr ) => {
box_start! {
in: $arg_surface,
id: $arg_id,
dir: $arg_dir,
requested_size_percent: $arg_requested_size_percent,
styles: [$($args_styles)*]
};
$arg_renderer
.render_in_surface(
GlobalScopeArgs {
shared_tw_data: $arg_shared_tw_data,
shared_store: $arg_shared_store,
state: $arg_state,
window_size: $arg_window_size
},
$arg_surface)
.await?;
$arg_surface.box_end()?;
};
}
#[macro_export]
macro_rules! surface_start_with_surface_renderer {
(
surface_renderer: $arg_renderer : expr, // Eg: surface_renderer: two_col_layout,
stylesheet: $arg_stylesheet : expr, // Eg: stylesheet,
pos: $arg_pos : expr, // Eg: (0, 0).into(),
size: $arg_size : expr, state: $arg_state : expr, shared_store: $arg_shared_store : expr, shared_tw_data: $arg_shared_tw_data : expr, window_size: $arg_window_size : expr ) => {{
let mut surface = Surface {
stylesheet: $arg_stylesheet,
..Surface::default()
};
surface.surface_start(SurfaceProps {
pos: $arg_pos,
size: $arg_size,
})?;
$arg_renderer
.render_in_surface(
GlobalScopeArgs {
shared_tw_data: $arg_shared_tw_data,
shared_store: $arg_shared_store,
state: $arg_state,
window_size: $arg_window_size,
},
&mut surface,
)
.await?;
surface.surface_end()?;
surface
}};
}
#[macro_export]
macro_rules! box_start {
(
in: $arg_surface : expr, // Eg: in: tw_surface,
id: $arg_id : expr, // Eg: 0,
dir: $arg_dir : expr, // Eg: Direction::Horizontal,
requested_size_percent: $arg_requested_size_percent : expr, // Eg: (50, 100).try_into()?,
styles: [$($args:tt)*] ) => {
$arg_surface.box_start(box_props! {
id: $arg_id,
dir: $arg_dir,
requested_size_percent: $arg_requested_size_percent,
maybe_styles: get_styles! { from: $arg_surface.stylesheet, [$($args)*] }
})?
};
}
#[macro_export]
macro_rules! box_props {
(
id: $arg_id : expr, // Eg: 0,
dir: $arg_dir : expr, // Eg: Direction::Horizontal,
requested_size_percent: $arg_requested_size_percent : expr, // Eg: (50, 100).try_into()?,
maybe_styles: $arg_styles: expr ) => {
FlexBoxProps {
id: $arg_id,
dir: $arg_dir,
requested_size_percent: $arg_requested_size_percent,
maybe_styles: $arg_styles,
}
};
(
id: $arg_id : expr, dir: $arg_dir : expr, requested_size_percent: $arg_requested_size_percent : expr, maybe_styles: [$($args:tt)*] ) => {
FlexBoxProps {
id: $arg_id,
dir: $arg_dir,
requested_size_percent: $arg_requested_size_percent,
maybe_styles: Some(vec![$($args)*]),
}
};
(
id: $arg_id : expr, dir: $arg_dir : expr, requested_size_percent: $arg_requested_size_percent : expr, ) => {
FlexBoxProps {
id: $arg_id,
dir: $arg_dir,
requested_size_percent: $arg_requested_size_percent,
maybe_styles: None,
}
};
}