mirror of
https://github.com/wez/wezterm.git
synced 2024-12-23 21:32:13 +03:00
window: add cursors for resizing up/down left/right
Change the cursor to an appropriate one of these when hoving over and dragging a split. Fix an issue where we wouldn't always change the cursor when hovering over a split when multiple splits are present.
This commit is contained in:
parent
b0fdd15d35
commit
f12df0be9b
@ -3303,7 +3303,7 @@ impl TermWindow {
|
||||
event: &MouseEvent,
|
||||
context: &dyn WindowOps,
|
||||
) {
|
||||
let mut on_split = false;
|
||||
let mut on_split = None;
|
||||
if y >= 0 {
|
||||
let y = y as usize;
|
||||
|
||||
@ -3311,24 +3311,30 @@ impl TermWindow {
|
||||
on_split = match split.direction {
|
||||
SplitDirection::Horizontal => {
|
||||
if x == split.left && y >= split.top && y <= split.top + split.size {
|
||||
true
|
||||
Some(SplitDirection::Horizontal)
|
||||
} else {
|
||||
false
|
||||
None
|
||||
}
|
||||
}
|
||||
SplitDirection::Vertical => {
|
||||
if y == split.top && x >= split.left && x <= split.left + split.size {
|
||||
true
|
||||
Some(SplitDirection::Vertical)
|
||||
} else {
|
||||
false
|
||||
None
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if on_split && event.kind == WMEK::Press(MousePress::Left) {
|
||||
context.set_cursor(Some(MouseCursor::Hand));
|
||||
self.split_drag_start.replace(split);
|
||||
return;
|
||||
if on_split.is_some() {
|
||||
if event.kind == WMEK::Press(MousePress::Left) {
|
||||
context.set_cursor(on_split.map(|d| match d {
|
||||
SplitDirection::Horizontal => MouseCursor::SizeLeftRight,
|
||||
SplitDirection::Vertical => MouseCursor::SizeUpDown,
|
||||
}));
|
||||
self.split_drag_start.replace(split);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3396,12 +3402,18 @@ impl TermWindow {
|
||||
}
|
||||
};
|
||||
|
||||
context.set_cursor(Some(if on_split || self.current_highlight.is_some() {
|
||||
// When hovering over a hyperlink, show an appropriate
|
||||
// mouse cursor to give the cue that it is clickable
|
||||
MouseCursor::Hand
|
||||
} else {
|
||||
MouseCursor::Text
|
||||
context.set_cursor(Some(match on_split {
|
||||
Some(SplitDirection::Horizontal) => MouseCursor::SizeLeftRight,
|
||||
Some(SplitDirection::Vertical) => MouseCursor::SizeUpDown,
|
||||
None => {
|
||||
if self.current_highlight.is_some() {
|
||||
// When hovering over a hyperlink, show an appropriate
|
||||
// mouse cursor to give the cue that it is clickable
|
||||
MouseCursor::Hand
|
||||
} else {
|
||||
MouseCursor::Text
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
let event_trigger_type = match &event.kind {
|
||||
|
@ -105,6 +105,8 @@ pub enum MouseCursor {
|
||||
Arrow,
|
||||
Hand,
|
||||
Text,
|
||||
SizeUpDown,
|
||||
SizeLeftRight,
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
|
@ -653,6 +653,8 @@ impl WindowOpsMut for WindowInner {
|
||||
MouseCursor::Arrow => msg_send![ns_cursor_cls, arrowCursor],
|
||||
MouseCursor::Text => msg_send![ns_cursor_cls, IBeamCursor],
|
||||
MouseCursor::Hand => msg_send![ns_cursor_cls, pointingHandCursor],
|
||||
MouseCursor::SizeUpDown => msg_send![ns_cursor_cls, resizeUpDown],
|
||||
MouseCursor::SizeLeftRight => msg_send![ns_cursor_cls, resizeLeftRight],
|
||||
};
|
||||
let () = msg_send![instance, set];
|
||||
}
|
||||
|
@ -929,6 +929,8 @@ impl WindowOpsMut for WaylandWindowInner {
|
||||
let cursor = match cursor {
|
||||
Some(MouseCursor::Arrow) => "arrow",
|
||||
Some(MouseCursor::Hand) => "hand",
|
||||
Some(MouseCursor::SizeUpDown) => "ns-resize",
|
||||
Some(MouseCursor::SizeLeftRight) => "ew-resize",
|
||||
Some(MouseCursor::Text) => "text",
|
||||
None => return,
|
||||
};
|
||||
|
@ -885,6 +885,8 @@ fn apply_mouse_cursor(cursor: Option<MouseCursor>) {
|
||||
MouseCursor::Arrow => IDC_ARROW,
|
||||
MouseCursor::Hand => IDC_HAND,
|
||||
MouseCursor::Text => IDC_IBEAM,
|
||||
MouseCursor::SizeUpDown => IDC_SIZENS,
|
||||
MouseCursor::SizeLeftRight => IDC_SIZEWE,
|
||||
},
|
||||
));
|
||||
},
|
||||
|
@ -288,6 +288,8 @@ impl XWindowInner {
|
||||
MouseCursor::Arrow => 132,
|
||||
MouseCursor::Hand => 58,
|
||||
MouseCursor::Text => 152,
|
||||
MouseCursor::SizeUpDown => 116,
|
||||
MouseCursor::SizeLeftRight => 108,
|
||||
};
|
||||
|
||||
let cursor_id: xcb::ffi::xcb_cursor_t = conn.generate_id();
|
||||
|
Loading…
Reference in New Issue
Block a user