Skip to content
Snippets Groups Projects
Commit ec6e2be2 authored by StarArawn's avatar StarArawn
Browse files

Showoff how we use the use_state! macro.

parent 9ab0bdd4
No related branches found
No related tags found
No related merge requests found
...@@ -88,18 +88,13 @@ Widget's can create their own state and will re-render when that state changes. ...@@ -88,18 +88,13 @@ Widget's can create their own state and will re-render when that state changes.
```rust ```rust
#[widget] #[widget]
fn Counter(context: &mut KayakContext) { fn Counter(context: &mut KayakContext) {
let count = context.create_state(0i32).unwrap(); let (count, set_count) = use_state!(0i32);
// Since we move the variable into the closure we need to clone here. let on_event = OnEvent::new(move |_, event| match event.event_type {
// Similar cost to cloning an Arc EventType::Click => set_count(count + 1),
let cloned_count = count.clone();
let on_event = OnEvent::new(move |context, event| match event.event_type {
EventType::Click => {
cloned_count.set(cloned_count.get() + 1);
}
_ => {} _ => {}
}); });
let count_text = format!("Current Count: {}", count.get()); let count_text = format!("Current Count: {}", count);
rsx! { rsx! {
<> <>
<Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Counter Example".to_string()}> <Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Counter Example".to_string()}>
......
...@@ -7,7 +7,7 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle ...@@ -7,7 +7,7 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle
use kayak_ui::core::{ use kayak_ui::core::{
render, rsx, render, rsx,
styles::{Style, StyleProp, Units}, styles::{Style, StyleProp, Units},
widget, Bound, EventType, Index, MutableBound, OnEvent, use_state, widget, Bound, EventType, Index, MutableBound, OnEvent,
}; };
use kayak_widgets::{App, Button, Text, Window}; use kayak_widgets::{App, Button, Text, Window};
...@@ -33,20 +33,16 @@ fn Counter(context: &mut KayakContext) { ...@@ -33,20 +33,16 @@ fn Counter(context: &mut KayakContext) {
..Default::default() ..Default::default()
}; };
let count = context.create_state(0i32).unwrap(); let (count, set_count) = use_state!(0i32);
let cloned_count = count.clone();
let on_event = OnEvent::new(move |_, event| match event.event_type { let on_event = OnEvent::new(move |_, event| match event.event_type {
EventType::Click => { EventType::Click => set_count(count + 1),
cloned_count.set(cloned_count.get() + 1);
}
_ => {} _ => {}
}); });
let count_value = count.get();
rsx! { rsx! {
<> <>
<Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Counter Example".to_string()}> <Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Counter Example".to_string()}>
<Text styles={Some(text_styles)} size={32.0} content={format!("Current Count: {}", count_value).to_string()}>{}</Text> <Text styles={Some(text_styles)} size={32.0} content={format!("Current Count: {}", count).to_string()}>{}</Text>
<Button on_event={Some(on_event)}> <Button on_event={Some(on_event)}>
<Text styles={Some(button_text_styles)} size={24.0} content={"Count!".to_string()}>{}</Text> <Text styles={Some(button_text_styles)} size={24.0} content={"Count!".to_string()}>{}</Text>
</Button> </Button>
......
...@@ -26,7 +26,7 @@ pub use event::*; ...@@ -26,7 +26,7 @@ pub use event::*;
pub use fragment::Fragment; pub use fragment::Fragment;
pub use generational_arena::{Arena, Index}; pub use generational_arena::{Arena, Index};
pub use input_event::*; pub use input_event::*;
pub use kayak_render_macros::{constructor, render, rsx, widget}; pub use kayak_render_macros::{constructor, render, rsx, use_state, widget};
pub use keys::KeyCode; pub use keys::KeyCode;
pub use resources::Resources; pub use resources::Resources;
pub use tree::{Tree, WidgetTree}; pub use tree::{Tree, WidgetTree};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment