redo event fn signature & add event_ctx macro
This commit is contained in:
@@ -7,16 +7,17 @@ use len_fns::*;
|
||||
use winit::event::WindowEvent;
|
||||
|
||||
fn main() {
|
||||
UiApp::<Client>::run();
|
||||
DefaultApp::<Client>::run();
|
||||
}
|
||||
|
||||
pub struct Client {
|
||||
ui: DefaultUi,
|
||||
info: WidgetId<Text>,
|
||||
}
|
||||
|
||||
impl DefaultUiState for Client {
|
||||
fn new(mut ui: DefaultUi, _proxy: Proxy<Self::Event>) -> Self {
|
||||
event_ctx!(Client);
|
||||
|
||||
impl DefaultAppState for Client {
|
||||
fn new(ui: &mut Ui, _state: &UiState, _proxy: Proxy<Self::Event>) -> Self {
|
||||
let rrect = rect(Color::WHITE).radius(20);
|
||||
let pad_test = (
|
||||
rrect.color(Color::BLUE),
|
||||
@@ -39,7 +40,7 @@ impl DefaultUiState for Client {
|
||||
.width(rest(3)),
|
||||
)
|
||||
.span(Dir::RIGHT)
|
||||
.add(&mut ui);
|
||||
.add(ui);
|
||||
|
||||
let span_test = (
|
||||
rrect.color(Color::GREEN).width(100),
|
||||
@@ -50,14 +51,14 @@ impl DefaultUiState for Client {
|
||||
rrect.color(Color::RED).width(100),
|
||||
)
|
||||
.span(Dir::LEFT)
|
||||
.add(&mut ui);
|
||||
.add(ui);
|
||||
|
||||
let span_add = Span::empty(Dir::RIGHT).add(&mut ui);
|
||||
let span_add = Span::empty(Dir::RIGHT).add(ui);
|
||||
let span_add_ = span_add.clone();
|
||||
|
||||
let add_button = rect(Color::LIME)
|
||||
.radius(30)
|
||||
.on(CursorSense::click(), move |ctx: &mut Client, _| {
|
||||
.on(CursorSense::click(), move |ctx| {
|
||||
let child = ctx
|
||||
.ui
|
||||
.add(image(include_bytes!("assets/sungals.png")).center())
|
||||
@@ -70,13 +71,13 @@ impl DefaultUiState for Client {
|
||||
let span_add_ = span_add.clone();
|
||||
let del_button = rect(Color::RED)
|
||||
.radius(30)
|
||||
.on(CursorSense::click(), move |ctx: &mut Client, _| {
|
||||
.on(CursorSense::click(), move |ctx| {
|
||||
ctx.ui[&span_add_].children.pop();
|
||||
})
|
||||
.sized((150, 150))
|
||||
.align(Align::BOT_LEFT);
|
||||
|
||||
let span_add_test = (span_add, add_button, del_button).stack().add(&mut ui);
|
||||
let span_add_test = (span_add, add_button, del_button).stack().add(ui);
|
||||
|
||||
let btext = |content| wtext(content).size(30);
|
||||
|
||||
@@ -99,29 +100,27 @@ impl DefaultUiState for Client {
|
||||
wtext("pretty cool right?").size(50),
|
||||
)
|
||||
.span(Dir::DOWN)
|
||||
.add(&mut ui);
|
||||
.add(ui);
|
||||
|
||||
let texts = Span::empty(Dir::DOWN).gap(10).add(&mut ui);
|
||||
let texts = Span::empty(Dir::DOWN).gap(10).add(ui);
|
||||
let msg_area = texts.clone().scroll().masked().background(rect(Color::SKY));
|
||||
let add_text = wtext("add")
|
||||
.editable(false)
|
||||
.text_align(Align::LEFT)
|
||||
.size(30)
|
||||
.attr::<Selectable>(())
|
||||
.id_on(Submit, move |id, client: &mut Client, _| {
|
||||
let content = client.ui.text(id).take();
|
||||
.on(Submit, move |ctx| {
|
||||
let content = ctx.ui.text(ctx.id).take();
|
||||
let text = wtext(content)
|
||||
.editable(false)
|
||||
.size(30)
|
||||
.text_align(Align::LEFT)
|
||||
.wrap(true)
|
||||
.attr::<Selectable>(());
|
||||
let msg_box = text
|
||||
.background(rect(Color::WHITE.darker(0.5)))
|
||||
.add(&mut client.ui);
|
||||
client.ui[&texts].children.push(msg_box.any());
|
||||
let msg_box = text.background(rect(Color::WHITE.darker(0.5))).add(ctx.ui);
|
||||
ctx.ui[&texts].children.push(msg_box.any());
|
||||
})
|
||||
.add(&mut ui);
|
||||
.add(ui);
|
||||
let text_edit_scroll = (
|
||||
msg_area.height(rest(1)),
|
||||
(
|
||||
@@ -129,8 +128,8 @@ impl DefaultUiState for Client {
|
||||
(
|
||||
add_text.clone().width(rest(1)),
|
||||
Rect::new(Color::GREEN)
|
||||
.on(CursorSense::click(), move |client: &mut Client, _| {
|
||||
client.run_event(&add_text, Submit, ());
|
||||
.on(CursorSense::click(), move |ctx| {
|
||||
ctx.ui.run_event(ctx.state, &add_text, Submit, ());
|
||||
})
|
||||
.sized((40, 40)),
|
||||
)
|
||||
@@ -143,25 +142,25 @@ impl DefaultUiState for Client {
|
||||
.align(Align::BOT),
|
||||
)
|
||||
.span(Dir::DOWN)
|
||||
.add(&mut ui);
|
||||
.add(ui);
|
||||
|
||||
let main = pad_test.clone().pad(10).add(&mut ui);
|
||||
let main = pad_test.clone().pad(10).add(ui);
|
||||
|
||||
let switch_button = |color, to: WidgetId, label| {
|
||||
let main_ = main.clone();
|
||||
let rect = rect(color)
|
||||
.id_on(CursorSense::click(), move |id, ui: &mut Ui, _| {
|
||||
ui[&main_.clone()].inner = to.clone();
|
||||
ui[id].color = color.darker(0.3);
|
||||
.on(CursorSense::click(), move |ctx| {
|
||||
ctx.ui[&main_.clone()].inner = to.clone();
|
||||
ctx.ui[ctx.id].color = color.darker(0.3);
|
||||
})
|
||||
.edit_on(
|
||||
.on(
|
||||
CursorSense::HoverStart | CursorSense::unclick(),
|
||||
move |r, _| {
|
||||
r.color = color.brighter(0.2);
|
||||
move |ctx| {
|
||||
ctx.ui[ctx.id].color = color.brighter(0.2);
|
||||
},
|
||||
)
|
||||
.edit_on(CursorSense::HoverEnd, move |r, _| {
|
||||
r.color = color;
|
||||
.on(CursorSense::HoverEnd, move |ctx| {
|
||||
ctx.ui[ctx.id].color = color;
|
||||
});
|
||||
(rect, wtext(label).size(30).text_align(Align::CENTER)).stack()
|
||||
};
|
||||
@@ -179,33 +178,28 @@ impl DefaultUiState for Client {
|
||||
)
|
||||
.span(Dir::RIGHT);
|
||||
|
||||
let info = wtext("").add(&mut ui);
|
||||
let info = wtext("").add(ui);
|
||||
let info_sect = info.clone().pad(10).align(Align::RIGHT);
|
||||
|
||||
((tabs.height(40), main).span(Dir::DOWN), info_sect)
|
||||
.stack()
|
||||
.set_root(&mut ui);
|
||||
.set_root(ui);
|
||||
|
||||
Self { ui, info }
|
||||
Self { info }
|
||||
}
|
||||
|
||||
fn ui(&mut self) -> &mut DefaultUi {
|
||||
&mut self.ui
|
||||
}
|
||||
|
||||
fn window_event(&mut self, _: WindowEvent) {
|
||||
fn window_event(&mut self, _: WindowEvent, ui: &mut Ui, state: &UiState) {
|
||||
let new = format!(
|
||||
"widgets: {}\nactive:{}\nviews: {}",
|
||||
self.ui.num_widgets(),
|
||||
self.ui.active_widgets(),
|
||||
self.ui.renderer.ui.view_count()
|
||||
ui.num_widgets(),
|
||||
ui.active_widgets(),
|
||||
state.renderer.ui.view_count()
|
||||
);
|
||||
if new != *self.ui[&self.info].content {
|
||||
*self.ui[&self.info].content = new;
|
||||
if new != *ui[&self.info].content {
|
||||
*ui[&self.info].content = new;
|
||||
}
|
||||
if self.ui.needs_redraw() {
|
||||
self.ui.window.request_redraw();
|
||||
if ui.needs_redraw() {
|
||||
state.window.request_redraw();
|
||||
}
|
||||
self.ui.input.end_frame();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user