diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2019-12-02 21:03:05 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2019-12-03 09:46:06 +0100 |
commit | 3b7661cda1c910524a2c4e3394417971fa025f31 (patch) | |
tree | c0e930b669aba1afbc73b29317ffd7b865e91176 /sc | |
parent | ca7004569b39721c3e7247551a43d544fd3204fe (diff) |
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/84281
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/tiledrendering/tiledrendering.cxx | 50 | ||||
-rw-r--r-- | sc/source/ui/unoobj/docuno.cxx | 33 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin4.cxx | 7 |
3 files changed, 64 insertions, 26 deletions
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index 9af67980b512..c0386f16cd38 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -67,6 +67,7 @@ public: virtual void setUp() override; virtual void tearDown() override; + void testRowColumnHeaders(); void testRowColumnSelections(); void testSortAscendingDescending(); void testPartHash(); @@ -107,6 +108,7 @@ public: void testJumpToLastRowInvalidation(); CPPUNIT_TEST_SUITE(ScTiledRenderingTest); + CPPUNIT_TEST(testRowColumnHeaders); CPPUNIT_TEST(testRowColumnSelections); CPPUNIT_TEST(testSortAscendingDescending); CPPUNIT_TEST(testPartHash); @@ -1843,6 +1845,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 aec2102f2d63..12de81d3556b 100644 --- a/sc/source/ui/unoobj/docuno.cxx +++ b/sc/source/ui/unoobj/docuno.cxx @@ -653,10 +653,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); @@ -693,10 +689,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()) @@ -804,9 +796,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(); @@ -890,10 +879,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) @@ -903,10 +895,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(); @@ -1112,13 +1100,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 d0e530be77e8..823fa87d7d4e 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -1114,6 +1114,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 @@ -1132,6 +1135,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 ? + // page break zoom, and aLogicMode in ScViewData pViewData->SetZoom(aFracX, aFracY, true); @@ -1239,6 +1244,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) |