raui_core/widget/component/containers/
size_box.rs1use crate::{
2 PropsData, unpack_named_slots,
3 widget::{
4 context::WidgetContext,
5 node::WidgetNode,
6 unit::size::{SizeBoxAspectRatio, SizeBoxNode, SizeBoxSizeValue},
7 utils::{Rect, Transform},
8 },
9};
10use serde::{Deserialize, Serialize};
11
12#[derive(PropsData, Debug, Default, Clone, Serialize, Deserialize)]
13#[props_data(crate::props::PropsData)]
14#[prefab(crate::Prefab)]
15pub struct SizeBoxProps {
16 #[serde(default)]
17 pub width: SizeBoxSizeValue,
18 #[serde(default)]
19 pub height: SizeBoxSizeValue,
20 #[serde(default)]
21 pub margin: Rect,
22 #[serde(default)]
23 pub keep_aspect_ratio: SizeBoxAspectRatio,
24 #[serde(default)]
25 pub transform: Transform,
26}
27
28pub fn size_box(context: WidgetContext) -> WidgetNode {
29 let WidgetContext {
30 id,
31 props,
32 named_slots,
33 ..
34 } = context;
35 unpack_named_slots!(named_slots => content);
36
37 let SizeBoxProps {
38 width,
39 height,
40 margin,
41 keep_aspect_ratio,
42 transform,
43 } = props.read_cloned_or_default();
44
45 SizeBoxNode {
46 id: id.to_owned(),
47 props: props.clone(),
48 slot: Box::new(content),
49 width,
50 height,
51 margin,
52 keep_aspect_ratio,
53 transform,
54 }
55 .into()
56}