Combine platform mouse events to use common MouseEvent struct and remove MouseDragged event in favor of MouseMoved

This commit is contained in:
Keith Simmons 2022-07-06 16:37:56 -07:00
parent 686e57373b
commit bcb553f233
8 changed files with 172 additions and 163 deletions

View file

@ -9,10 +9,9 @@ use crate::{
scene::CursorRegion,
text_layout::TextLayoutCache,
Action, AnyModelHandle, AnyViewHandle, AnyWeakModelHandle, AssetCache, ElementBox, Entity,
FontSystem, LeftMouseDownEvent, LeftMouseDraggedEvent, LeftMouseUpEvent, ModelHandle,
MouseMovedEvent, MouseRegion, MouseRegionId, ReadModel, ReadView, RenderContext, RenderParams,
RightMouseDownEvent, RightMouseUpEvent, Scene, UpgradeModelHandle, UpgradeViewHandle, View,
ViewHandle, WeakModelHandle, WeakViewHandle,
FontSystem, ModelHandle, MouseButton, MouseEvent, MouseMovedEvent, MouseRegion, MouseRegionId,
ReadModel, ReadView, RenderContext, RenderParams, Scene, UpgradeModelHandle, UpgradeViewHandle,
View, ViewHandle, WeakModelHandle, WeakViewHandle,
};
use pathfinder_geometry::vector::{vec2f, Vector2F};
use serde_json::json;
@ -236,7 +235,11 @@ impl Presenter {
let mut dragged_region = None;
match event {
Event::LeftMouseDown(LeftMouseDownEvent { position, .. }) => {
Event::MouseDown(MouseEvent {
position,
button: MouseButton::Left,
..
}) => {
let mut hit = false;
for (region, _) in self.mouse_regions.iter().rev() {
if region.bounds.contains_point(position) {
@ -252,9 +255,10 @@ impl Presenter {
}
}
}
Event::LeftMouseUp(LeftMouseUpEvent {
Event::MouseUp(MouseEvent {
position,
click_count,
button: MouseButton::Left,
..
}) => {
self.prev_drag_position.take();
@ -265,7 +269,11 @@ impl Presenter {
}
}
}
Event::RightMouseDown(RightMouseDownEvent { position, .. }) => {
Event::MouseDown(MouseEvent {
position,
button: MouseButton::Right,
..
}) => {
let mut hit = false;
for (region, _) in self.mouse_regions.iter().rev() {
if region.bounds.contains_point(position) {
@ -280,9 +288,10 @@ impl Presenter {
}
}
}
Event::RightMouseUp(RightMouseUpEvent {
Event::MouseUp(MouseEvent {
position,
click_count,
button: MouseButton::Right,
..
}) => {
if let Some(region) = self.right_clicked_region.take() {
@ -292,34 +301,37 @@ impl Presenter {
}
}
}
Event::MouseMoved { .. } => {
self.last_mouse_moved_event = Some(event.clone());
}
Event::LeftMouseDragged(LeftMouseDraggedEvent {
Event::MouseMoved(MouseMovedEvent {
pressed_button,
position,
shift,
ctrl,
alt,
cmd,
..
}) => {
if let Some((clicked_region, prev_drag_position)) = self
.clicked_region
.as_ref()
.zip(self.prev_drag_position.as_mut())
{
dragged_region =
Some((clicked_region.clone(), position - *prev_drag_position));
*prev_drag_position = position;
if let Some(MouseButton::Left) = pressed_button {
if let Some((clicked_region, prev_drag_position)) = self
.clicked_region
.as_ref()
.zip(self.prev_drag_position.as_mut())
{
dragged_region =
Some((clicked_region.clone(), position - *prev_drag_position));
*prev_drag_position = position;
}
self.last_mouse_moved_event = Some(Event::MouseMoved(MouseMovedEvent {
position,
pressed_button: Some(MouseButton::Left),
shift,
ctrl,
alt,
cmd,
}));
}
self.last_mouse_moved_event = Some(Event::MouseMoved(MouseMovedEvent {
position,
left_mouse_down: true,
shift,
ctrl,
alt,
cmd,
}));
self.last_mouse_moved_event = Some(event.clone());
}
_ => {}
}
@ -413,11 +425,11 @@ impl Presenter {
if let Event::MouseMoved(MouseMovedEvent {
position,
left_mouse_down,
pressed_button,
..
}) = event
{
if !left_mouse_down {
if let None = pressed_button {
let mut style_to_assign = CursorStyle::Arrow;
for region in self.cursor_regions.iter().rev() {
if region.bounds.contains_point(*position) {