diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2015-01-14 16:14:50 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2015-01-14 22:17:36 -0500 |
commit | 31e5afcd7abcb27aa2af991aebdb184fa0e15849 (patch) | |
tree | 0fc0ad66330eb8b9cc00a126897b985eb0d2c27a /sc | |
parent | 169b93971bb16058ad83603cc6849a35e22929d7 (diff) |
Adjust zoom level for different output tile size.
Change-Id: I54b9f3ca66035b66509c960ca79391446ecf8778
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/view/gridwin4.cxx | 21 |
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(); |