summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2019-12-02 21:03:05 +0000
committerMichael Meeks <michael.meeks@collabora.com>2019-12-03 09:50:50 +0100
commite8fc0d70d59e0fc3f1aaf3627fa5d38f4ee7d048 (patch)
treef75f19b5098565ec9d58c0f8b84892fe82c6602d /sc
parentd042c73ad1205e186ef4137568049da4781d9343 (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/84280 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx50
-rw-r--r--sc/source/ui/unoobj/docuno.cxx33
-rw-r--r--sc/source/ui/view/gridwin4.cxx7
3 files changed, 64 insertions, 26 deletions
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)