Implement panning in inspector window with mouse drag (#5867)
This commit is contained in:
@@ -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)
|
||||
|
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user