Skip to content
Snippets Groups Projects
text_box.rs 2.87 KiB
Newer Older
StarArawn's avatar
StarArawn committed
use bevy::{
    prelude::{App as BevyApp, AssetServer, Commands, Res, ResMut},
    window::WindowDescriptor,
    DefaultPlugins,
};
use kayak_core::Color;
IceSentry's avatar
IceSentry committed
use kayak_render_macros::use_state;
Ygg01's avatar
Ygg01 committed
use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle};
StarArawn's avatar
StarArawn committed
use kayak_ui::core::{
MrGVSV's avatar
MrGVSV committed
    render, rsx,
StarArawn's avatar
StarArawn committed
    styles::{Style, StyleProp, Units},
    widget, Index,
StarArawn's avatar
StarArawn committed
};
Ygg01's avatar
Ygg01 committed
use kayak_ui::widgets::{App, Inspector, OnChange, SpinBox, TextBox, Window};
StarArawn's avatar
StarArawn committed

#[widget]
fn TextBoxExample() {
IceSentry's avatar
IceSentry committed
    let (value, set_value, _) = use_state!("I started with a value!".to_string());
    let (empty_value, set_empty_value, _) = use_state!("".to_string());
    let (red_value, set_red_value, _) = use_state!("This text is red".to_string());
Ygg01's avatar
Ygg01 committed
    let (spin_value, set_spin_value, _) = use_state!("3".to_string());
StarArawn's avatar
StarArawn committed

    let input_styles = Style {
        top: StyleProp::Value(Units::Pixels(10.0)),
        ..Default::default()
    };

    let red_text_styles = Style {
IceSentry's avatar
IceSentry committed
        color: StyleProp::Value(Color::new(1., 0., 0., 1.)),
        ..input_styles.clone()
    };

StarArawn's avatar
StarArawn committed
    let on_change = OnChange::new(move |event| {
IceSentry's avatar
IceSentry committed
        set_value(event.value);
StarArawn's avatar
StarArawn committed
    });

IceSentry's avatar
IceSentry committed
    let on_change_empty = OnChange::new(move |event| {
        set_empty_value(event.value);
StarArawn's avatar
StarArawn committed
    });

    let on_change_red = OnChange::new(move |event| {
IceSentry's avatar
IceSentry committed
        set_red_value(event.value);
Ygg01's avatar
Ygg01 committed
    let on_change_spin = OnChange::new(move |event| {
Ygg01's avatar
Ygg01 committed
        set_spin_value(event.value);
Ygg01's avatar
Ygg01 committed
    });

StarArawn's avatar
StarArawn committed
    rsx! {
Ygg01's avatar
Ygg01 committed
        <Window position={(50.0, 50.0)} size={(500.0, 300.0)} title={"TextBox Example".to_string()}>
IceSentry's avatar
IceSentry committed
            <TextBox styles={Some(input_styles)} value={value} on_change={Some(on_change)} />
            <TextBox
                styles={Some(input_styles)}
IceSentry's avatar
IceSentry committed
                value={empty_value}
                on_change={Some(on_change_empty)}
                placeholder={Some("This is a placeholder".to_string())}
            />
IceSentry's avatar
IceSentry committed
            <TextBox styles={Some(red_text_styles)} value={red_value} on_change={Some(on_change_red)} />
Ygg01's avatar
Ygg01 committed
            <SpinBox styles={Some(input_styles)} value={spin_value} on_change={Some(on_change_spin)} />
        </Window>
StarArawn's avatar
StarArawn committed
    }
}

fn startup(
    mut commands: Commands,
    mut font_mapping: ResMut<FontMapping>,
    asset_server: Res<AssetServer>,
) {
    commands.spawn_bundle(UICameraBundle::new());

    font_mapping.set_default(asset_server.load("roboto.kayak_font"));
StarArawn's avatar
StarArawn committed

    let context = BevyContext::new(|context| {
        render! {
            <App>
                <TextBoxExample />
Ygg01's avatar
Ygg01 committed
                <Inspector />
StarArawn's avatar
StarArawn committed
            </App>
        }
    });

    commands.insert_resource(context);
}

fn main() {
    BevyApp::new()
        .insert_resource(WindowDescriptor {
            width: 1270.0,
            height: 720.0,
            title: String::from("UI Example"),
            ..Default::default()
        })
        .add_plugins(DefaultPlugins)
        .add_plugin(BevyKayakUIPlugin)
        .add_startup_system(startup)
        .run();
}