From 7b4ff5d82328911017efd70fbb0e2134dc9ab7a6 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 6 May 2023 21:40:36 +0200 Subject: [PATCH] Zoom in/out menu functions now use mouse position for zoom center instead of center (if mouse is inside window) --- src/laybasic/laybasic/layLayoutViewBase.cc | 17 +++++++++++++++-- src/laybasic/laybasic/layLayoutViewBase.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/laybasic/laybasic/layLayoutViewBase.cc b/src/laybasic/laybasic/layLayoutViewBase.cc index b59495ef3..9d9e58598 100644 --- a/src/laybasic/laybasic/layLayoutViewBase.cc +++ b/src/laybasic/laybasic/layLayoutViewBase.cc @@ -3852,13 +3852,26 @@ LayoutViewBase::pan_center (const db::DPoint &p) void LayoutViewBase::zoom_in () { - shift_window (zoom_factor, 0.0, 0.0); + zoom_by (zoom_factor); } void LayoutViewBase::zoom_out () { - shift_window (1.0 / zoom_factor, 0.0, 0.0); + zoom_by (1.0 / zoom_factor); +} + +void +LayoutViewBase::zoom_by (double f) +{ + db::DBox b = mp_canvas->viewport ().box (); + + db::DPoint c = b.center (); + if (mp_canvas->mouse_in_window ()) { + c = mp_canvas->mouse_position_um (); + } + + zoom_box ((b.moved (db::DPoint () - c) * f).moved (c - db::DPoint ())); } void diff --git a/src/laybasic/laybasic/layLayoutViewBase.h b/src/laybasic/laybasic/layLayoutViewBase.h index 0f8281458..d3328384b 100644 --- a/src/laybasic/laybasic/layLayoutViewBase.h +++ b/src/laybasic/laybasic/layLayoutViewBase.h @@ -2881,6 +2881,8 @@ private: bool has_max_hier () const; int max_hier_level () const; + void zoom_by (double f); + void update_event_handlers (); void viewport_changed (); void cellview_changed (unsigned int index);