Skip to content

Commit

Permalink
Rename on_create to on_build. Run fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
geom3trik authored and robbert-vdh committed Mar 27, 2022
1 parent 76e908f commit 415615c
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 43 deletions.
4 changes: 1 addition & 3 deletions core/src/handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl<'a, T> Handle<'a, T> {
self
}

pub fn on_create<F>(self, callback: F) -> Self
pub fn on_build<F>(self, callback: F) -> Self
where
F: Fn(&mut Context),
{
Expand Down Expand Up @@ -397,6 +397,4 @@ impl<'a, T> Handle<'a, T> {
set_style!(border_radius_top_right, Units);
set_style!(border_radius_bottom_left, Units);
set_style!(border_radius_bottom_right, Units);


}
2 changes: 1 addition & 1 deletion core/src/views/textbox.rs
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ impl Model for TextboxData {
TextEvent::SetOnSubmit(on_submit) => {
self.on_submit = on_submit.clone();
}

TextEvent::SetOnEditEnd(on_edit_end) => {
self.on_edit_end = on_edit_end.clone();
}
Expand Down
64 changes: 27 additions & 37 deletions core/src/views/value_slider.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use std::marker::PhantomData;

use crate::{
Binding, Context, Element, Handle, Lens, LensExt, Model, MouseButton,
Units::*, View, WindowEvent, ZStack, Color, Label, Modifiers, Event, Textbox, Actions
Binding, Color, Context, Element, Event, Handle, Label, Lens, LensExt, Model, Modifiers,
MouseButton, Textbox, Units::*, View, WindowEvent, ZStack,
};

use super::textbox::TextEvent;
Expand All @@ -25,7 +25,7 @@ impl Model for VSDataInternal {
self.edit = *flag;
}

_=> {}
_ => {}
}
}
}
Expand All @@ -37,46 +37,40 @@ pub struct ValueSlider<L> {
on_changing: Option<Box<dyn Fn(&mut Context, f32)>>,
}

impl<L> ValueSlider<L>
impl<L> ValueSlider<L>
where
L: Lens<Target = f32>,
{
pub fn new(cx: &mut Context, lens: L) -> Handle<Self> {
Self {
p: PhantomData::default(),
is_dragging: false,
on_changing: None,
}.build2(cx, |cx|{
Self { p: PhantomData::default(), is_dragging: false, on_changing: None }.build2(cx, |cx| {
VSDataInternal { edit: false }.build(cx);

VSDataInternal {
edit: false,
}.build(cx);

ZStack::new(cx, |cx|{
ZStack::new(cx, |cx| {
Element::new(cx)
.height(Stretch(1.0))
.width(Stretch(1.0))
.background_color(Color::rgb(200, 200, 200))
.bind(lens.clone(), move |handle, l|{
.bind(lens.clone(), move |handle, l| {
let val = *l.get(handle.cx);
handle.width(Percentage(val * 100.0));
});
Binding::new(cx, VSDataInternal::edit, move |cx, edit|{
Binding::new(cx, VSDataInternal::edit, move |cx, edit| {
if *edit.get(cx) {
Textbox::new(cx, lens.clone().map(|val| format!("{:.2}", val)))
.on_create(|cx|{
.on_build(|cx| {
cx.emit(TextEvent::StartEdit);
cx.emit(TextEvent::SelectAll);
})
.on_submit(|cx, txt|{
.on_submit(|cx, txt| {
if let Ok(val) = txt.parse::<f32>() {
let val = val.clamp(0.0, 1.0);
cx.emit(ValueSliderEvent::OnSubmit(val));
}
})
.on_edit_end(|cx|{
.on_edit_end(|cx| {
cx.emit(ValueSliderEvent::SetEdit(false));
})
.background_color(Color::transparent())
.child_space(Stretch(1.0))
.height(Stretch(1.0))
.width(Stretch(1.0));
Expand All @@ -93,46 +87,43 @@ where
}
}

impl<L> View for ValueSlider<L>
where
impl<L> View for ValueSlider<L>
where
L: Lens<Target = f32>,
{
fn event(&mut self, cx: &mut Context, event: &mut Event) {

if let Some(value_slider_event) = event.message.downcast() {
match value_slider_event {
ValueSliderEvent::OnSubmit(val) => {

if let Some(callback) = &self.on_changing {
(callback)(cx, *val);
}
}

_=> {}
_ => {}
}
}

if let Some(window_event) = event.message.downcast() {
match window_event {
WindowEvent::MouseDown(button) if *button == MouseButton::Left => {

if cx.modifiers.contains(Modifiers::ALT) {
cx.emit(ValueSliderEvent::SetEdit(true));
} else {
if let Some(vs_data) = cx.data::<VSDataInternal>() {
if !vs_data.edit {
self.is_dragging = true;
cx.capture();

let mut dx = (cx.mouse.left.pos_down.0
- cx.cache.get_posx(cx.current))
/ cx.cache.get_width(cx.current);

dx = dx.clamp(0.0, 1.0);

if let Some(callback) = self.on_changing.take() {
(callback)(cx, dx);

self.on_changing = Some(callback);
}
}
Expand All @@ -147,9 +138,8 @@ where

WindowEvent::MouseMove(x, _) => {
if self.is_dragging {

let mut dx = (*x - cx.cache.get_posx(cx.current))
/ cx.cache.get_width(cx.current);
let mut dx =
(*x - cx.cache.get_posx(cx.current)) / cx.cache.get_width(cx.current);

dx = dx.clamp(0.0, 1.0);

Expand All @@ -159,17 +149,17 @@ where
}
}

_=> {}
_ => {}
}
}
}
}

impl<'a, L> Handle<'a, ValueSlider<L>>
where
impl<'a, L> Handle<'a, ValueSlider<L>>
where
L: Lens<Target = f32>,
{
pub fn on_changing<F>(self, callback: F) -> Self
pub fn on_changing<F>(self, callback: F) -> Self
where
F: 'static + Fn(&mut Context, f32),
{
Expand All @@ -181,4 +171,4 @@ where

self
}
}
}
3 changes: 1 addition & 2 deletions examples/value_slider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ impl Model for AppData {
}

fn main() {
let mut window_description = WindowDescription::new();
let window_description = WindowDescription::new().with_title("Value Slider");
Application::new(window_description, |cx| {
AppData { val: 0.5 }.build(cx);


ValueSlider::new(cx, AppData::val)
.on_changing(|cx, val| cx.emit(AppEvent::SetValue(val)))
.width(Pixels(300.0))
Expand Down

0 comments on commit 415615c

Please sign in to comment.