summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2015-01-14 16:14:50 -0500
committerKohei Yoshida <kohei.yoshida@collabora.com>2015-01-14 22:17:36 -0500
commit31e5afcd7abcb27aa2af991aebdb184fa0e15849 (patch)
tree0fc0ad66330eb8b9cc00a126897b985eb0d2c27a /sc
parent169b93971bb16058ad83603cc6849a35e22929d7 (diff)
Adjust zoom level for different output tile size.
Change-Id: I54b9f3ca66035b66509c960ca79391446ecf8778
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/view/gridwin4.cxx21
1 files changed, 21 insertions, 0 deletions
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index fc9879b415c8..85ab94f92b44 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -882,6 +882,24 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
// Assumption: always paint the whole sheet i.e. "visible" range is always
// from (0,0) to last data position.
+ // Tile geometry is independent of the zoom level, but the output size is
+ // dependent of the zoom level. Determine the correct zoom level before
+ // we start.
+
+ // TODO : zooming isn't perfect. Find out why.
+ double nOutWTwips = static_cast<double>(nOutputWidth) / PIXEL_PER_TWIPS;
+ double nOutHTwips = static_cast<double>(nOutputHeight) / PIXEL_PER_TWIPS;
+
+ nOutWTwips /= nTileWidth;
+ nOutHTwips /= nTileHeight;
+ Fraction aFracX(nOutWTwips);
+ Fraction aFracY(nOutHTwips);
+
+ pViewData->SetZoom(aFracX, aFracY, true);
+ pViewData->RefreshZoom();
+
+ rDevice.SetOutputSizePixel(Size(nOutputWidth, nOutputHeight));
+
SCTAB nTab = pViewData->GetTabNo();
ScDocument* pDoc = pViewData->GetDocument();
ScAddress aLastPos = pDoc->GetLastDataPos(nTab);
@@ -908,6 +926,9 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice,
}
aOutData.SetGridColor(aGridColor);
+ aOutData.DrawClear();
+ aOutData.DrawDocumentBackground();
+ aOutData.DrawBackground();
aOutData.DrawGrid(true, false);
aOutData.DrawShadow();