mirror of
https://gitlab.freedesktop.org/pipewire/helvum.git
synced 2025-12-20 05:20:03 +01:00
ui: Move view with middle mouse button.
This commit is contained in:
parent
96c079d29e
commit
e78d6f5fb4
1 changed files with 47 additions and 0 deletions
|
|
@ -93,6 +93,9 @@ mod imp {
|
|||
// Memorized data for an in-progress zoom gesture
|
||||
pub zoom_gesture_initial_zoom: Cell<Option<f64>>,
|
||||
pub zoom_gesture_anchor: Cell<Option<(f64, f64)>>,
|
||||
|
||||
// This keeps track of an ongoing move view gesture.
|
||||
pub move_view_state: Cell<(f64, f64)>,
|
||||
}
|
||||
|
||||
impl Default for GraphView {
|
||||
|
|
@ -108,6 +111,7 @@ mod imp {
|
|||
port_drag_cursor: Cell::new(Point::new(0.0, 0.0)),
|
||||
zoom_gesture_initial_zoom: Default::default(),
|
||||
zoom_gesture_anchor: Default::default(),
|
||||
move_view_state: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -136,6 +140,7 @@ mod imp {
|
|||
self.setup_port_drag_and_drop();
|
||||
self.setup_scroll_zooming();
|
||||
self.setup_zoom_gesture();
|
||||
self.setup_move_view();
|
||||
}
|
||||
|
||||
fn dispose(&self) {
|
||||
|
|
@ -465,6 +470,48 @@ mod imp {
|
|||
self.obj().add_controller(zoom_gesture);
|
||||
}
|
||||
|
||||
fn setup_move_view(&self) {
|
||||
let drag_controller = gtk::GestureDrag::new();
|
||||
|
||||
drag_controller.set_button(gtk::gdk::BUTTON_MIDDLE);
|
||||
|
||||
// TODO: set `all-scroll` cursor while dragging view
|
||||
|
||||
drag_controller.connect_drag_begin(|drag_controller, _, _| {
|
||||
let widget = drag_controller
|
||||
.widget()
|
||||
.downcast::<super::GraphView>()
|
||||
.unwrap();
|
||||
|
||||
widget.imp().move_view_state.set((0.0, 0.0));
|
||||
});
|
||||
|
||||
drag_controller.connect_drag_update(|drag_controller, x, y| {
|
||||
let widget = drag_controller
|
||||
.widget()
|
||||
.downcast::<super::GraphView>()
|
||||
.unwrap();
|
||||
|
||||
let imp = widget.imp();
|
||||
let state = imp.move_view_state.replace((x, y));
|
||||
let delta_x = state.0 - x;
|
||||
let delta_y = state.1 - y;
|
||||
|
||||
let hadjustment_ref = imp.hadjustment.borrow();
|
||||
let vadjustment_ref = imp.vadjustment.borrow();
|
||||
let hadjustment = hadjustment_ref.as_ref().unwrap();
|
||||
let vadjustment = vadjustment_ref.as_ref().unwrap();
|
||||
|
||||
let new_hadjustment = hadjustment.value() + delta_x;
|
||||
let new_vadjustment = vadjustment.value() + delta_y;
|
||||
|
||||
hadjustment.set_value(new_hadjustment);
|
||||
vadjustment.set_value(new_vadjustment);
|
||||
});
|
||||
|
||||
self.obj().add_controller(drag_controller);
|
||||
}
|
||||
|
||||
fn draw_link(
|
||||
&self,
|
||||
link_cr: &cairo::Context,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue