Newer
Older
App as BevyApp, AssetServer, Bundle, Commands, Component, Entity, In, Query, Res, ResMut,
Vec2,
#[derive(Component, Default, Clone, PartialEq)]
#[derive(Component, Default, Clone, PartialEq)]
struct TextBoxExampleState {
pub value1: String,
pub value2: String,
}
impl WidgetProps for TextBoxExample {}
#[derive(Bundle)]
struct TextBoxExampleBundle {
text_box_example: TextBoxExample,
styles: KStyle,
widget_name: WidgetName,
}
impl Default for TextBoxExampleBundle {
fn default() -> Self {
Self {
text_box_example: Default::default(),
styles: Default::default(),
widget_name: TextBoxExample::default().get_name(),
}
}
}
fn update_text_box_example(
In((widget_context, entity)): In<(WidgetContext, Entity)>,
mut commands: Commands,
state_query: Query<&TextBoxExampleState>,
let state_entity = widget_context.use_state::<TextBoxExampleState>(
&mut commands,
entity,
TextBoxExampleState {
value1: "Hello World".into(),
value2: "Hello World2".into(),
},
);
if let Ok(textbox_state) = state_query.get(state_entity) {
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
let on_change = OnChange::new(
move |In((_widget_context, _, value)): In<(WidgetContext, Entity, String)>,
mut state_query: Query<&mut TextBoxExampleState>| {
if let Ok(mut state) = state_query.get_mut(state_entity) {
state.value1 = value;
}
},
);
let on_change2 = OnChange::new(
move |In((_widget_context, _, value)): In<(WidgetContext, Entity, String)>,
mut state_query: Query<&mut TextBoxExampleState>| {
if let Ok(mut state) = state_query.get_mut(state_entity) {
state.value2 = value;
}
},
);
let parent_id = Some(entity);
rsx! {
<ElementBundle>
<TextBoxBundle
styles={KStyle {
bottom: StyleProp::Value(Units::Pixels(10.0)),
..Default::default()
}}
text_box={TextBoxProps { value: textbox_state.value1.clone(), ..Default::default()}}
on_change={on_change}
/>
<TextBoxBundle
text_box={TextBoxProps { value: textbox_state.value2.clone(), ..Default::default()}}
on_change={on_change2}
/>
</ElementBundle>
}
}
fn startup(
mut commands: Commands,
mut font_mapping: ResMut<FontMapping>,
asset_server: Res<AssetServer>,
) {
font_mapping.set_default(asset_server.load("roboto.kayak_font"));
commands.spawn(UICameraBundle::new());
let mut widget_context = Context::new();
widget_context.add_widget_data::<TextBoxExample, TextBoxExampleState>();
widget_context.add_widget_system(
TextBoxExample::default().get_name(),
widget_update::<TextBoxExample, TextBoxExampleState>,
update_text_box_example,
);
let parent_id = None;
rsx! {
<KayakAppBundle>
<WindowBundle
window={KWindow {
title: "Hello text box".into(),
draggable: true,
position: Vec2::new(10.0, 10.0),
size: Vec2::new(300.0, 250.0),
..KWindow::default()
}}
>
<TextBoxExampleBundle />
</WindowBundle>
</KayakAppBundle>
}
commands.insert_resource(widget_context);
.add_plugins(DefaultPlugins)
.add_plugin(ContextPlugin)
.add_plugin(KayakWidgets)
.add_startup_system(startup)
.run()