Detailed changes
@@ -91,7 +91,7 @@ impl Element for EventHandler {
click: Some(Rc::new(|_, _, _| {})),
right_mouse_down: Some(Rc::new(|_, _| {})),
right_click: Some(Rc::new(|_, _, _| {})),
- drag: Some(Rc::new(|_, _| {})),
+ drag: Some(Rc::new(|_, _, _| {})),
mouse_down_out: Some(Rc::new(|_, _| {})),
right_mouse_down_out: Some(Rc::new(|_, _| {})),
});
@@ -24,7 +24,7 @@ pub struct MouseEventHandler {
right_click: Option<Rc<dyn Fn(Vector2F, usize, &mut EventContext)>>,
mouse_down_out: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
right_mouse_down_out: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
- drag: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
+ drag: Option<Rc<dyn Fn(Vector2F, Vector2F, &mut EventContext)>>,
hover: Option<Rc<dyn Fn(Vector2F, bool, &mut EventContext)>>,
padding: Padding,
}
@@ -106,7 +106,10 @@ impl MouseEventHandler {
self
}
- pub fn on_drag(mut self, handler: impl Fn(Vector2F, &mut EventContext) + 'static) -> Self {
+ pub fn on_drag(
+ mut self,
+ handler: impl Fn(Vector2F, Vector2F, &mut EventContext) + 'static,
+ ) -> Self {
self.drag = Some(Rc::new(handler));
self
}
@@ -317,7 +317,7 @@ impl Presenter {
.zip(self.prev_drag_position.as_mut())
{
dragged_region =
- Some((clicked_region.clone(), position - *prev_drag_position));
+ Some((clicked_region.clone(), *prev_drag_position, position));
*prev_drag_position = position;
}
@@ -379,11 +379,11 @@ impl Presenter {
}
}
- if let Some((dragged_region, delta)) = dragged_region {
+ if let Some((dragged_region, prev_position, position)) = dragged_region {
handled = true;
if let Some(drag_callback) = dragged_region.drag {
event_cx.with_current_view(dragged_region.view_id, |event_cx| {
- drag_callback(delta, event_cx);
+ drag_callback(prev_position, position, event_cx);
})
}
}
@@ -661,6 +661,16 @@ impl<'a> PaintContext<'a> {
}
}
+ #[inline]
+ pub fn paint_layer<F>(&mut self, clip_bounds: Option<RectF>, f: F)
+ where
+ F: FnOnce(&mut Self) -> (),
+ {
+ self.scene.push_layer(clip_bounds);
+ f(self);
+ self.scene.pop_layer();
+ }
+
pub fn current_view_id(&self) -> usize {
*self.view_stack.last().unwrap()
}
@@ -65,7 +65,7 @@ pub struct MouseRegion {
pub click: Option<Rc<dyn Fn(Vector2F, usize, &mut EventContext)>>,
pub right_mouse_down: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
pub right_click: Option<Rc<dyn Fn(Vector2F, usize, &mut EventContext)>>,
- pub drag: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
+ pub drag: Option<Rc<dyn Fn(Vector2F, Vector2F, &mut EventContext)>>,
pub mouse_down_out: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
pub right_mouse_down_out: Option<Rc<dyn Fn(Vector2F, &mut EventContext)>>,
}
@@ -188,12 +188,13 @@ impl Sidebar {
})
.with_cursor_style(CursorStyle::ResizeLeftRight)
.on_mouse_down(|_, _| {}) // This prevents the mouse down event from being propagated elsewhere
- .on_drag(move |delta, cx| {
+ .on_drag(move |old_position, new_position, cx| {
+ let delta = new_position.x() - old_position.x();
let prev_width = *actual_width.borrow();
*custom_width.borrow_mut() = 0f32
.max(match side {
- Side::Left => prev_width + delta.x(),
- Side::Right => prev_width - delta.x(),
+ Side::Left => prev_width + delta,
+ Side::Right => prev_width - delta,
})
.round();
@@ -5,7 +5,6 @@
"requires": true,
"packages": {
"": {
- "name": "styles",
"version": "1.0.0",
"license": "ISC",
"dependencies": {