From e82c7873699e03c7204ac6fac79559d670746719 Mon Sep 17 00:00:00 2001 From: rfranke Date: Tue, 4 Aug 2020 18:25:44 +0200 Subject: [PATCH] Implement panning in inspector window with mouse drag (#5867) --- rtgui/inspector.cc | 22 +++++++++++++++++++++- rtgui/inspector.h | 3 +++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/rtgui/inspector.cc b/rtgui/inspector.cc index 3f9fab4fe..8c5abefc8 100644 --- a/rtgui/inspector.cc +++ b/rtgui/inspector.cc @@ -92,7 +92,7 @@ Inspector::Inspector () : currImage(nullptr), scaled(false), scale(1.0), zoomSca window.signal_key_release_event().connect(sigc::mem_fun(*this, &Inspector::on_key_release)); window.signal_key_press_event().connect(sigc::mem_fun(*this, &Inspector::on_key_press)); - add_events(Gdk::BUTTON_PRESS_MASK | Gdk::SCROLL_MASK | Gdk::SMOOTH_SCROLL_MASK); + add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_MOTION_MASK | Gdk::SCROLL_MASK | Gdk::SMOOTH_SCROLL_MASK); gestureZoom = Gtk::GestureZoom::create(*this); gestureZoom->signal_begin().connect(sigc::mem_fun(*this, &Inspector::on_zoom_begin)); gestureZoom->signal_scale_changed().connect(sigc::mem_fun(*this, &Inspector::on_zoom_scale_changed)); @@ -162,6 +162,7 @@ bool Inspector::on_key_press(GdkEventKey *event) bool Inspector::on_button_press_event(GdkEventButton *event) { if (event->type == GDK_BUTTON_PRESS) { + button_pos.set(event->x, event->y); if (!pinned) // pin window with mouse click pinned = true; @@ -170,6 +171,25 @@ bool Inspector::on_button_press_event(GdkEventButton *event) return false; } +bool Inspector::on_motion_notify_event(GdkEventMotion *event) +{ + int deviceScale = get_scale_factor(); + int delta_x = (button_pos.x - event->x)*deviceScale; + int delta_y = (button_pos.y - event->y)*deviceScale; + int imW = currImage->imgBuffer.getWidth(); + int imH = currImage->imgBuffer.getHeight(); + + moveCenter(delta_x, delta_y, imW, imH, deviceScale); + button_pos.set(event->x, event->y); + + if (!dirty) { + dirty = true; + queue_draw(); + } + + return true; +} + bool Inspector::on_scroll_event(GdkEventScroll *event) { if (!currImage) diff --git a/rtgui/inspector.h b/rtgui/inspector.h index 00a8e24a7..08eb87e1c 100644 --- a/rtgui/inspector.h +++ b/rtgui/inspector.h @@ -63,7 +63,10 @@ private: bool on_key_release(GdkEventKey *event); bool on_key_press(GdkEventKey *event); + rtengine::Coord button_pos; bool on_button_press_event(GdkEventButton *event) override; + bool on_motion_notify_event(GdkEventMotion *event) override; + bool on_scroll_event(GdkEventScroll *event) override; void moveCenter(int delta_x, int delta_y, int imW, int imH, int deviceScale);