diff options
author | Povilas Kanapickas <povilas@radix.lt> | 2022-12-07 03:13:32 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2022-12-14 13:50:43 +0000 |
commit | 4368c4bf80b2751705c500f2574d9cc3d0ee13a1 (patch) | |
tree | d033293770cff95271d91bd7651e4314d63e0683 /starmath | |
parent | 7d5841b435a6794e30f02b62db15660ffe4ee39e (diff) |
starmath: React to touchpad zoom gestures in SmGraphicWidget
Change-Id: Id158d7778ec0c375c143cf9ce492af21b9625c9d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143759
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/inc/view.hxx | 2 | ||||
-rw-r--r-- | starmath/source/view.cxx | 29 |
2 files changed, 30 insertions, 1 deletions
diff --git a/starmath/inc/view.hxx b/starmath/inc/view.hxx index 1905edb02741..41e28a44c3df 100644 --- a/starmath/inc/view.hxx +++ b/starmath/inc/view.hxx @@ -159,6 +159,8 @@ private: AutoTimer aCaretBlinkTimer; rtl::Reference<SmGraphicAccessible> mxAccessible; SmViewShell& mrViewShell; + double mfLastZoomScale = 0; + double mfAccumulatedZoom = 0; }; class SmGraphicController final : public SfxControllerItem diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx index 3c7c8b1554d3..bdc8b0729335 100644 --- a/starmath/source/view.cxx +++ b/starmath/source/view.cxx @@ -795,8 +795,35 @@ bool SmGraphicWidget::Command(const CommandEvent& rCEvt) mrGraphicWindow.SetZoom(nTmpZoom); bCallBase = false; } + break; + } + case CommandEventId::GestureZoom: + { + const CommandGestureZoomData* pData = rCEvt.GetGestureZoomData(); + if (pData) + { + if (pData->meEventType == GestureEventZoomType::Begin) + { + mfLastZoomScale = pData->mfScaleDelta; + } + else if (pData->meEventType == GestureEventZoomType::Update) + { + double deltaBetweenEvents = (pData->mfScaleDelta - mfLastZoomScale) / mfLastZoomScale; + mfLastZoomScale = pData->mfScaleDelta; + + // Accumulate fractional zoom to avoid small zoom changes from being ignored + mfAccumulatedZoom += deltaBetweenEvents; + int nZoomChangePercent = mfAccumulatedZoom * 100; + mfAccumulatedZoom -= nZoomChangePercent / 100.0; + + sal_uInt16 nZoom = mrGraphicWindow.GetZoom(); + nZoom += nZoomChangePercent; + mrGraphicWindow.SetZoom(nZoom); + } + bCallBase = false; + } + break; } - break; default: break; } |