include/vcl/ITiledRenderable.hxx             |    4 --
 sc/qa/unit/tiledrendering/tiledrendering.cxx |   50 +++++++++++++++++++++++++++
 sc/source/ui/unoobj/docuno.cxx               |   33 +++--------------
 sc/source/ui/view/gridwin4.cxx               |    7 +++
 sw/source/uibase/uno/unotxdoc.cxx            |    3 -
 5 files changed, 64 insertions(+), 33 deletions(-)

New commits:
commit e8fc0d70d59e0fc3f1aaf3627fa5d38f4ee7d048
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Mon Dec 2 21:03:05 2019 +0000
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Tue Dec 3 09:50:50 2019 +0100

    lok: calc - store zoom in the view itself.
    
    Don't duplicate this on the ITiledRenderable interface, which is not a
    per-view construct, this just confuses everything.
    
    Store & restore the zoom level before/after rendering a tile -
    unfortunately this is not done by the most optimal view yet.
    
    Change-Id: I1f7dfaa353333f45c5601d49a9bca784d34fb81a
    Reviewed-on: https://gerrit.libreoffice.org/84280
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>
    Tested-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx
index 0cb93fd6f7d4..c1c5c1c0d924 100644
--- a/include/vcl/ITiledRenderable.hxx
+++ b/include/vcl/ITiledRenderable.hxx
@@ -96,11 +96,7 @@ namespace vcl
 
 class VCL_DLLPUBLIC ITiledRenderable
 {
-protected:
-    int mnTilePixelWidth, mnTilePixelHeight;
-    int mnTileTwipWidth, mnTileTwipHeight;
 public:
-
     virtual ~ITiledRenderable();
 
     /**
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx 
b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index 1ae084e5eb49..b3b73fc03b0a 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -71,6 +71,7 @@ public:
     virtual void setUp() override;
     virtual void tearDown() override;
 
+    void testRowColumnHeaders();
     void testRowColumnSelections();
     void testSortAscendingDescending();
     void testPartHash();
@@ -110,6 +111,7 @@ public:
     void testJumpToLastRowInvalidation();
 
     CPPUNIT_TEST_SUITE(ScTiledRenderingTest);
+    CPPUNIT_TEST(testRowColumnHeaders);
     CPPUNIT_TEST(testRowColumnSelections);
     CPPUNIT_TEST(testSortAscendingDescending);
     CPPUNIT_TEST(testPartHash);
@@ -1894,6 +1896,54 @@ void 
ScTiledRenderingTest::testJumpToLastRowInvalidation()
     CPPUNIT_ASSERT_EQUAL(tools::Rectangle(0, 13005, 26775, 127500255), 
aView1.m_aInvalidations[0]);
 }
 
+// We need to ensure that views are not perterbed by rendering (!?) hmm ...
+void ScTiledRenderingTest::testRowColumnHeaders()
+{
+    comphelper::LibreOfficeKit::setActive();
+
+    ScModelObj* pModelObj = createDoc("empty.ods");
+    ScViewData* pViewData = ScDocShell::GetViewData();
+    CPPUNIT_ASSERT(pViewData);
+
+    // view #1
+    ViewCallback aView1;
+    int nView1 = SfxLokHelper::getView();
+    
SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback,
 &aView1);
+    CPPUNIT_ASSERT(!lcl_hasEditView(*pViewData));
+
+    // view #2
+    SfxLokHelper::createView();
+    int nView2 = SfxLokHelper::getView();
+    ViewCallback aView2;
+    
pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>());
+    
SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback,
 &aView2);
+
+    // ViewRowColumnHeaders test
+    SfxLokHelper::setView(nView1);
+    OUString aHeaders1 = 
pModelObj->getRowColumnHeaders(tools::Rectangle(65,723,10410,4695));
+
+    SfxLokHelper::setView(nView2);
+    // 50% zoom
+    pModelObj->setClientVisibleArea(tools::Rectangle(0, 0, 22474, 47333));
+    pModelObj->setClientZoom(256, 256, 6636, 6636);
+    OUString aHeaders2 = 
pModelObj->getRowColumnHeaders(tools::Rectangle(65,723,10410,4695));
+
+    // Check vs. view #1
+    SfxLokHelper::setView(nView1);
+    OUString aHeaders1_2 = 
pModelObj->getRowColumnHeaders(tools::Rectangle(65,723,10410,4695));
+    CPPUNIT_ASSERT_EQUAL(aHeaders1, aHeaders1_2);
+
+    // Check vs. view #2
+    SfxLokHelper::setView(nView2);
+    OUString aHeaders2_2 = 
pModelObj->getRowColumnHeaders(tools::Rectangle(65,723,10410,4695));
+    CPPUNIT_ASSERT_EQUAL(aHeaders2, aHeaders2_2);
+
+    SfxLokHelper::setView(nView1);
+    SfxViewShell::Current()->registerLibreOfficeKitViewCallback(nullptr, 
nullptr);
+    SfxLokHelper::setView(nView2);
+    SfxViewShell::Current()->registerLibreOfficeKitViewCallback(nullptr, 
nullptr);
+}
+
 }
 
 CPPUNIT_TEST_SUITE_REGISTRATION(ScTiledRenderingTest);
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index 8c99b02afd0d..44d66e768404 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -659,10 +659,6 @@ void ScModelObj::postMouseEvent(int nType, int nX, int nY, 
int nCount, int nButt
     if (!pGridWindow)
         return;
 
-    // update the aLogicMode in ScViewData to something predictable
-    pViewData->SetZoom(Fraction(mnTilePixelWidth * TWIPS_PER_PIXEL, 
mnTileTwipWidth),
-                       Fraction(mnTilePixelHeight * TWIPS_PER_PIXEL, 
mnTileTwipHeight), true);
-
     // check if user hit a chart which is being edited by him
     ScTabViewShell * pTabViewShell = pViewData->GetViewShell();
     LokChartHelper aChartHelper(pTabViewShell);
@@ -699,10 +695,6 @@ void ScModelObj::setTextSelection(int nType, int nX, int 
nY)
     ScInputHandler* pInputHandler = SC_MOD()->GetInputHdl(pViewShell);
     ScDrawView* pDrawView = pViewData->GetScDrawView();
 
-    // update the aLogicMode in ScViewData to something predictable
-    pViewData->SetZoom(Fraction(mnTilePixelWidth * TWIPS_PER_PIXEL, 
mnTileTwipWidth),
-                       Fraction(mnTilePixelHeight * TWIPS_PER_PIXEL, 
mnTileTwipHeight), true);
-
     bool bHandled = false;
 
     if (pInputHandler && pInputHandler->IsInputMode())
@@ -810,9 +802,6 @@ void ScModelObj::setGraphicSelection(int nType, int nX, int 
nY)
     ScViewData* pViewData = ScDocShell::GetViewData();
     ScGridWindow* pGridWindow = pViewData->GetActiveWin();
 
-    // update the aLogicMode in ScViewData to something predictable
-    pViewData->SetZoom(Fraction(mnTilePixelWidth * TWIPS_PER_PIXEL, 
mnTileTwipWidth),
-                       Fraction(mnTilePixelHeight * TWIPS_PER_PIXEL, 
mnTileTwipHeight), true);
     double fPPTX = pViewData->GetPPTX();
     double fPPTY = pViewData->GetPPTY();
 
@@ -896,10 +885,13 @@ bool ScModelObj::isMimeTypeSupported()
 
 void ScModelObj::setClientZoom(int nTilePixelWidth_, int nTilePixelHeight_, 
int nTileTwipWidth_, int nTileTwipHeight_)
 {
-    mnTilePixelWidth = nTilePixelWidth_;
-    mnTilePixelHeight = nTilePixelHeight_;
-    mnTileTwipWidth = nTileTwipWidth_;
-    mnTileTwipHeight = nTileTwipHeight_;
+    ScViewData* pViewData = ScDocShell::GetViewData();
+
+    if (!pViewData)
+        return;
+
+    pViewData->SetZoom(Fraction(nTilePixelWidth_ * TWIPS_PER_PIXEL, 
nTileTwipWidth_),
+                       Fraction(nTilePixelHeight_ * TWIPS_PER_PIXEL, 
nTileTwipHeight_), true);
 }
 
 OUString ScModelObj::getRowColumnHeaders(const tools::Rectangle& rRectangle)
@@ -909,10 +901,6 @@ OUString ScModelObj::getRowColumnHeaders(const 
tools::Rectangle& rRectangle)
     if (!pViewData)
         return OUString();
 
-    // update the aLogicMode in ScViewData to something predictable
-    pViewData->SetZoom(Fraction(mnTilePixelWidth * TWIPS_PER_PIXEL, 
mnTileTwipWidth),
-                       Fraction(mnTilePixelHeight * TWIPS_PER_PIXEL, 
mnTileTwipHeight), true);
-
     ScTabView* pTabView = pViewData->GetView();
     if (!pTabView)
         return OUString();
@@ -1118,13 +1106,6 @@ void ScModelObj::initializeForTiledRendering(const 
css::uno::Sequence<css::beans
     // causing 'Save' being disabled; so let's always save to the original
     // format
     SvtSaveOptions().SetWarnAlienFormat(false);
-
-    // default tile size in pixels
-    mnTilePixelWidth = 256;
-    mnTilePixelHeight = 256;
-    // the default zoom level will be 1
-    mnTileTwipWidth = mnTilePixelWidth * TWIPS_PER_PIXEL;
-    mnTileTwipHeight = mnTilePixelHeight * TWIPS_PER_PIXEL;
 }
 
 uno::Any SAL_CALL ScModelObj::queryInterface( const uno::Type& rType )
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index a861daec3177..ac970535d72c 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -1098,6 +1098,9 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
                               int nTilePosX, int nTilePosY,
                               long nTileWidth, long nTileHeight )
 {
+    Fraction origZoomX = pViewData->GetZoomX();
+    Fraction origZoomY = pViewData->GetZoomY();
+
     // Output size is in pixels while tile position and size are in logical 
units (twips).
 
     // Assumption: always paint the whole sheet i.e. "visible" range is always
@@ -1116,6 +1119,8 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
     Fraction aFracX(long(nOutputWidth * TWIPS_PER_PIXEL), nTileWidth);
     Fraction aFracY(long(nOutputHeight * TWIPS_PER_PIXEL), nTileHeight);
 
+    // FIXME: compare vs. origZoomX/Y and avoid re-setting the zoom ?
+
     // page break zoom, and aLogicMode in ScViewData
     pViewData->SetZoom(aFracX, aFracY, true);
 
@@ -1224,6 +1229,8 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
     // Flag drawn formula cells "unchanged".
     pDoc->ResetChanged(ScRange(nTopLeftTileCol, nTopLeftTileRow, nTab, 
nBottomRightTileCol, nBottomRightTileRow, nTab));
     pDoc->PrepareFormulaCalc();
+
+    pViewData->SetZoom(origZoomX, origZoomY, true);
 }
 
 void ScGridWindow::LogicInvalidate(const tools::Rectangle* pRectangle)
diff --git a/sw/source/uibase/uno/unotxdoc.cxx 
b/sw/source/uibase/uno/unotxdoc.cxx
index 9a6b70eb063c..aa1db2bf3c4e 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -3259,9 +3259,6 @@ void SwXTextDocument::setClientZoom(int nTilePixelWidth_, 
int /*nTilePixelHeight
     // This value is used in postMouseEvent and setGraphicSelection methods
     // for in place chart editing. We assume that x and y scale is roughly
     // the same.
-    // Indeed we could set mnTilePixelWidth, mnTilePixelHeight, 
mnTileTwipWidth,
-    // mnTileTwipHeight data members of this class but they are not very useful
-    // since we need to be able to retrieve the zoom value for each view shell.
     SfxInPlaceClient* pIPClient = pDocShell->GetView()->GetIPClient();
     if (pIPClient)
     {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to