diff options
-rw-r--r-- | include/vcl/ITiledRenderable.hxx | 4 | ||||
-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 | ||||
-rw-r--r-- | sw/source/uibase/uno/unotxdoc.cxx | 3 |
5 files changed, 64 insertions, 33 deletions
diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx index 905a3262b1a6..fc4be7c3805e 100644 --- a/include/vcl/ITiledRenderable.hxx +++ b/include/vcl/ITiledRenderable.hxx @@ -43,11 +43,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 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 b55803ab5104..8f831dfca9ed 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(); @@ -1102,13 +1090,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) diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx index f7367f429ab9..9060ac40172a 100644 --- a/sw/source/uibase/uno/unotxdoc.cxx +++ b/sw/source/uibase/uno/unotxdoc.cxx @@ -3228,9 +3228,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) { |