Rename Window::mouse_position to last_mouse_position
We want to encourage people to use WindowContext::mouse_position, which requests the position from the platform. Co-Authored-By: Conrad Irwin <conrad@zed.dev>
This commit is contained in:
parent
684db11afd
commit
8e3b23e510
1 changed files with 12 additions and 21 deletions
|
@ -59,10 +59,10 @@ pub struct Window {
|
||||||
mouse_regions: Vec<(MouseRegion, usize)>,
|
mouse_regions: Vec<(MouseRegion, usize)>,
|
||||||
event_handlers: Vec<EventHandler>,
|
event_handlers: Vec<EventHandler>,
|
||||||
last_mouse_moved_event: Option<Event>,
|
last_mouse_moved_event: Option<Event>,
|
||||||
|
last_mouse_position: Vector2F,
|
||||||
pub(crate) hovered_region_ids: Vec<MouseRegionId>,
|
pub(crate) hovered_region_ids: Vec<MouseRegionId>,
|
||||||
pub(crate) clicked_region_ids: Vec<MouseRegionId>,
|
pub(crate) clicked_region_ids: Vec<MouseRegionId>,
|
||||||
pub(crate) clicked_region: Option<(MouseRegionId, MouseButton)>,
|
pub(crate) clicked_region: Option<(MouseRegionId, MouseButton)>,
|
||||||
mouse_position: Vector2F,
|
|
||||||
text_layout_cache: TextLayoutCache,
|
text_layout_cache: TextLayoutCache,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,10 +94,10 @@ impl Window {
|
||||||
event_handlers: Default::default(),
|
event_handlers: Default::default(),
|
||||||
text_layout_cache: TextLayoutCache::new(cx.font_system.clone()),
|
text_layout_cache: TextLayoutCache::new(cx.font_system.clone()),
|
||||||
last_mouse_moved_event: None,
|
last_mouse_moved_event: None,
|
||||||
|
last_mouse_position: Vector2F::zero(),
|
||||||
hovered_region_ids: Default::default(),
|
hovered_region_ids: Default::default(),
|
||||||
clicked_region_ids: Default::default(),
|
clicked_region_ids: Default::default(),
|
||||||
clicked_region: None,
|
clicked_region: None,
|
||||||
mouse_position: Default::default(),
|
|
||||||
titlebar_height,
|
titlebar_height,
|
||||||
appearance,
|
appearance,
|
||||||
};
|
};
|
||||||
|
@ -259,7 +259,7 @@ impl<'a> WindowContext<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn mouse_position(&self) -> Vector2F {
|
pub fn mouse_position(&self) -> Vector2F {
|
||||||
self.window.mouse_position
|
self.window.platform_window.mouse_position()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn text_layout_cache(&self) -> &TextLayoutCache {
|
pub fn text_layout_cache(&self) -> &TextLayoutCache {
|
||||||
|
@ -578,7 +578,7 @@ impl<'a> WindowContext<'a> {
|
||||||
// Synthesize one last drag event to end the drag
|
// Synthesize one last drag event to end the drag
|
||||||
mouse_events.push(MouseEvent::Drag(MouseDrag {
|
mouse_events.push(MouseEvent::Drag(MouseDrag {
|
||||||
region: Default::default(),
|
region: Default::default(),
|
||||||
prev_mouse_position: self.window.mouse_position,
|
prev_mouse_position: self.window.last_mouse_position,
|
||||||
platform_event: MouseMovedEvent {
|
platform_event: MouseMovedEvent {
|
||||||
position: e.position,
|
position: e.position,
|
||||||
pressed_button: Some(e.button),
|
pressed_button: Some(e.button),
|
||||||
|
@ -631,14 +631,14 @@ impl<'a> WindowContext<'a> {
|
||||||
if pressed_button.is_some() {
|
if pressed_button.is_some() {
|
||||||
mouse_events.push(MouseEvent::Drag(MouseDrag {
|
mouse_events.push(MouseEvent::Drag(MouseDrag {
|
||||||
region: Default::default(),
|
region: Default::default(),
|
||||||
prev_mouse_position: self.window.mouse_position,
|
prev_mouse_position: self.window.last_mouse_position,
|
||||||
platform_event: e.clone(),
|
platform_event: e.clone(),
|
||||||
end: false,
|
end: false,
|
||||||
}));
|
}));
|
||||||
} else if let Some((_, clicked_button)) = self.window.clicked_region {
|
} else if let Some((_, clicked_button)) = self.window.clicked_region {
|
||||||
mouse_events.push(MouseEvent::Drag(MouseDrag {
|
mouse_events.push(MouseEvent::Drag(MouseDrag {
|
||||||
region: Default::default(),
|
region: Default::default(),
|
||||||
prev_mouse_position: self.window.mouse_position,
|
prev_mouse_position: self.window.last_mouse_position,
|
||||||
platform_event: e.clone(),
|
platform_event: e.clone(),
|
||||||
end: true,
|
end: true,
|
||||||
}));
|
}));
|
||||||
|
@ -698,7 +698,7 @@ impl<'a> WindowContext<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(position) = event.position() {
|
if let Some(position) = event.position() {
|
||||||
self.window.mouse_position = position;
|
self.window.last_mouse_position = position;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Dispatch mouse events on regions
|
// 2. Dispatch mouse events on regions
|
||||||
|
@ -712,7 +712,7 @@ impl<'a> WindowContext<'a> {
|
||||||
match &mouse_event {
|
match &mouse_event {
|
||||||
MouseEvent::Hover(_) => {
|
MouseEvent::Hover(_) => {
|
||||||
let mut highest_z_index = None;
|
let mut highest_z_index = None;
|
||||||
let mouse_position = self.window.mouse_position.clone();
|
let mouse_position = self.mouse_position();
|
||||||
let window = &mut *self.window;
|
let window = &mut *self.window;
|
||||||
let prev_hovered_regions = mem::take(&mut window.hovered_region_ids);
|
let prev_hovered_regions = mem::take(&mut window.hovered_region_ids);
|
||||||
for (region, z_index) in window.mouse_regions.iter().rev() {
|
for (region, z_index) in window.mouse_regions.iter().rev() {
|
||||||
|
@ -757,7 +757,7 @@ impl<'a> WindowContext<'a> {
|
||||||
|
|
||||||
MouseEvent::Down(_) | MouseEvent::Up(_) => {
|
MouseEvent::Down(_) | MouseEvent::Up(_) => {
|
||||||
for (region, _) in self.window.mouse_regions.iter().rev() {
|
for (region, _) in self.window.mouse_regions.iter().rev() {
|
||||||
if region.bounds.contains_point(self.window.mouse_position) {
|
if region.bounds.contains_point(self.mouse_position()) {
|
||||||
valid_regions.push(region.clone());
|
valid_regions.push(region.clone());
|
||||||
if region.notify_on_click {
|
if region.notify_on_click {
|
||||||
notified_views.insert(region.id().view_id());
|
notified_views.insert(region.id().view_id());
|
||||||
|
@ -784,10 +784,7 @@ impl<'a> WindowContext<'a> {
|
||||||
// Find regions which still overlap with the mouse since the last MouseDown happened
|
// Find regions which still overlap with the mouse since the last MouseDown happened
|
||||||
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
|
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
|
||||||
if clicked_region_ids.contains(&mouse_region.id()) {
|
if clicked_region_ids.contains(&mouse_region.id()) {
|
||||||
if mouse_region
|
if mouse_region.bounds.contains_point(self.mouse_position()) {
|
||||||
.bounds
|
|
||||||
.contains_point(self.window.mouse_position)
|
|
||||||
{
|
|
||||||
valid_regions.push(mouse_region.clone());
|
valid_regions.push(mouse_region.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -809,10 +806,7 @@ impl<'a> WindowContext<'a> {
|
||||||
| MouseEvent::ClickOut(_) => {
|
| MouseEvent::ClickOut(_) => {
|
||||||
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
|
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
|
||||||
// NOT contains
|
// NOT contains
|
||||||
if !mouse_region
|
if !mouse_region.bounds.contains_point(self.mouse_position()) {
|
||||||
.bounds
|
|
||||||
.contains_point(self.window.mouse_position)
|
|
||||||
{
|
|
||||||
valid_regions.push(mouse_region.clone());
|
valid_regions.push(mouse_region.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -821,10 +815,7 @@ impl<'a> WindowContext<'a> {
|
||||||
_ => {
|
_ => {
|
||||||
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
|
for (mouse_region, _) in self.window.mouse_regions.iter().rev() {
|
||||||
// Contains
|
// Contains
|
||||||
if mouse_region
|
if mouse_region.bounds.contains_point(self.mouse_position()) {
|
||||||
.bounds
|
|
||||||
.contains_point(self.window.mouse_position)
|
|
||||||
{
|
|
||||||
valid_regions.push(mouse_region.clone());
|
valid_regions.push(mouse_region.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue