Use InteractiveBounds everywhere we change the cursor style

This commit is contained in:
Antonio Scandurra
2023-12-20 13:59:52 +01:00
parent 2f57a3ccfb
commit 5781cf6604
3 changed files with 22 additions and 11 deletions
+11 -3
View File
@@ -884,7 +884,11 @@ impl EditorElement {
bounds: text_bounds,
}),
|cx| {
if text_bounds.contains(&cx.mouse_position()) {
let interactive_text_bounds = InteractiveBounds {
bounds: text_bounds,
stacking_order: cx.stacking_order().clone(),
};
if interactive_text_bounds.visibly_contains(&cx.mouse_position(), cx) {
if self
.editor
.read(cx)
@@ -1361,8 +1365,12 @@ impl EditorElement {
));
}
let interactive_track_bounds = InteractiveBounds {
bounds: track_bounds,
stacking_order: cx.stacking_order().clone(),
};
let mut mouse_position = cx.mouse_position();
if track_bounds.contains(&mouse_position) {
if interactive_track_bounds.visibly_contains(&mouse_position, cx) {
cx.set_cursor_style(CursorStyle::Arrow);
}
@@ -1392,7 +1400,7 @@ impl EditorElement {
cx.stop_propagation();
} else {
editor.scroll_manager.set_is_dragging_scrollbar(false, cx);
if track_bounds.contains(&event.position) {
if interactive_track_bounds.visibly_contains(&event.position, cx) {
editor.scroll_manager.show_scrollbar(cx);
}
}
+3 -4
View File
@@ -358,14 +358,13 @@ impl Element for InteractiveText {
fn paint(&mut self, bounds: Bounds<Pixels>, state: &mut Self::State, cx: &mut WindowContext) {
if let Some(click_listener) = self.click_listener.take() {
if let Some(ix) = state
.text_state
.index_for_position(bounds, cx.mouse_position())
{
let mouse_position = cx.mouse_position();
if let Some(ix) = state.text_state.index_for_position(bounds, mouse_position) {
if self
.clickable_ranges
.iter()
.any(|range| range.contains(&ix))
&& cx.was_top_layer(&mouse_position, cx.stacking_order())
{
cx.set_cursor_style(crate::CursorStyle::PointingHand)
}
+8 -4
View File
@@ -564,9 +564,9 @@ mod element {
use std::{cell::RefCell, iter, rc::Rc, sync::Arc};
use gpui::{
px, relative, Along, AnyElement, Axis, Bounds, CursorStyle, Element, IntoElement,
MouseDownEvent, MouseMoveEvent, MouseUpEvent, ParentElement, Pixels, Point, Size, Style,
WindowContext,
px, relative, Along, AnyElement, Axis, Bounds, CursorStyle, Element, InteractiveBounds,
IntoElement, MouseDownEvent, MouseMoveEvent, MouseUpEvent, ParentElement, Pixels, Point,
Size, Style, WindowContext,
};
use parking_lot::Mutex;
use smallvec::SmallVec;
@@ -717,7 +717,11 @@ mod element {
};
cx.with_z_index(3, |cx| {
if handle_bounds.contains(&cx.mouse_position()) {
let interactive_handle_bounds = InteractiveBounds {
bounds: handle_bounds,
stacking_order: cx.stacking_order().clone(),
};
if interactive_handle_bounds.visibly_contains(&cx.mouse_position(), cx) {
cx.set_cursor_style(match axis {
Axis::Vertical => CursorStyle::ResizeUpDown,
Axis::Horizontal => CursorStyle::ResizeLeftRight,