starmath/inc/view.hxx    |    2 ++
 starmath/source/view.cxx |   29 ++++++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 1 deletion(-)

New commits:
commit 4368c4bf80b2751705c500f2574d9cc3d0ee13a1
Author:     Povilas Kanapickas <povi...@radix.lt>
AuthorDate: Wed Dec 7 03:13:32 2022 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Wed Dec 14 13:50:43 2022 +0000

    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 <qui...@gmail.com>

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;
         }

Reply via email to