Change direction and center when zooming inspector with scroll wheel
This commit is contained in:
parent
134aa407c0
commit
38c898884d
@ -217,18 +217,14 @@ bool Inspector::on_scroll_event(GdkEventScroll *event)
|
|||||||
// zoom
|
// zoom
|
||||||
beginZoom(event->x, event->y);
|
beginZoom(event->x, event->y);
|
||||||
if (std::fabs(delta_y) > std::fabs(delta_x))
|
if (std::fabs(delta_y) > std::fabs(delta_x))
|
||||||
on_zoom_scale_changed(1.0 + (double)delta_y / imH / deviceScale);
|
on_zoom_scale_changed(1.0 - (double)delta_y / imH / deviceScale);
|
||||||
else
|
else
|
||||||
on_zoom_scale_changed(1.0 + (double)delta_x / imW / deviceScale);
|
on_zoom_scale_changed(1.0 - (double)delta_x / imW / deviceScale);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// scroll
|
// scroll
|
||||||
rtengine::Coord margin; // limit for scroll area
|
moveCenter(delta_x, delta_y, imW, imH, deviceScale);
|
||||||
margin.x = rtengine::min<int>(window.get_width() * deviceScale / scale, imW) / 2;
|
|
||||||
margin.y = rtengine::min<int>(window.get_height() * deviceScale / scale, imH) / 2;
|
|
||||||
center.set(rtengine::LIM<int>(center.x + delta_x, margin.x, imW - margin.x),
|
|
||||||
rtengine::LIM<int>(center.y + delta_y, margin.y, imH - margin.y));
|
|
||||||
|
|
||||||
if (!dirty) {
|
if (!dirty) {
|
||||||
dirty = true;
|
dirty = true;
|
||||||
@ -238,13 +234,30 @@ bool Inspector::on_scroll_event(GdkEventScroll *event)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Inspector::moveCenter(int delta_x, int delta_y, int imW, int imH, int deviceScale)
|
||||||
|
{
|
||||||
|
rtengine::Coord margin; // limit to image size
|
||||||
|
margin.x = rtengine::min<int>(window.get_width() * deviceScale / scale, imW) / 2;
|
||||||
|
margin.y = rtengine::min<int>(window.get_height() * deviceScale / scale, imH) / 2;
|
||||||
|
center.set(rtengine::LIM<int>(center.x + delta_x, margin.x, imW - margin.x),
|
||||||
|
rtengine::LIM<int>(center.y + delta_y, margin.y, imH - margin.y));
|
||||||
|
}
|
||||||
|
|
||||||
void Inspector::beginZoom(double x, double y)
|
void Inspector::beginZoom(double x, double y)
|
||||||
{
|
{
|
||||||
int deviceScale = get_scale_factor();
|
int deviceScale = get_scale_factor();
|
||||||
|
int imW = currImage->imgBuffer.getWidth();
|
||||||
|
int imH = currImage->imgBuffer.getHeight();
|
||||||
|
|
||||||
|
// limit center to image size
|
||||||
|
moveCenter(0, 0, imW, imH, deviceScale);
|
||||||
|
|
||||||
|
// store center and current position for zooming
|
||||||
dcenterBegin.x = (x - window.get_width()/2) / scale * deviceScale;
|
dcenterBegin.x = (x - window.get_width()/2) / scale * deviceScale;
|
||||||
dcenterBegin.y = (y - window.get_height()/2) / scale * deviceScale;
|
dcenterBegin.y = (y - window.get_height()/2) / scale * deviceScale;
|
||||||
centerBegin = center;
|
centerBegin = center;
|
||||||
zoomScaleBegin = zoomScale;
|
zoomScaleBegin = zoomScale;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Inspector::on_zoom_begin(GdkEventSequence *s)
|
void Inspector::on_zoom_begin(GdkEventSequence *s)
|
||||||
|
@ -64,6 +64,7 @@ private:
|
|||||||
|
|
||||||
bool on_button_press_event(GdkEventButton *event) override;
|
bool on_button_press_event(GdkEventButton *event) override;
|
||||||
bool on_scroll_event(GdkEventScroll *event) override;
|
bool on_scroll_event(GdkEventScroll *event) override;
|
||||||
|
void moveCenter(int delta_x, int delta_y, int imW, int imH, int deviceScale);
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::GestureZoom> gestureZoom;
|
Glib::RefPtr<Gtk::GestureZoom> gestureZoom;
|
||||||
void beginZoom(double x, double y);
|
void beginZoom(double x, double y);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user