diff options
author | Jan Holesovsky <kendy@collabora.com> | 2015-06-09 15:46:31 +0200 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2015-06-09 15:49:15 +0200 |
commit | f76b2b3b1184383695a35fa104470fa3027e477b (patch) | |
tree | c13f1e30444a1dbe267b86f64eedc751e3dc3b6d /sc | |
parent | 6a55792cdd39f95c28a929cd0c1c1a3e89e00cfd (diff) |
calc mapmode: Convert ScOutputData::DrawGrid to draw in logic units.
Change-Id: Ie641c31e9023accf9d6bc510f8ca0b25ced3031b
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/inc/gridmerg.hxx | 4 | ||||
-rw-r--r-- | sc/source/ui/inc/output.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/gridmerg.cxx | 20 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin4.cxx | 13 | ||||
-rw-r--r-- | sc/source/ui/view/hdrcont.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/view/output.cxx | 48 | ||||
-rw-r--r-- | sc/source/ui/view/printfun.cxx | 4 |
7 files changed, 62 insertions, 33 deletions
diff --git a/sc/source/ui/inc/gridmerg.hxx b/sc/source/ui/inc/gridmerg.hxx index 94e8994df881..89be9ffa03eb 100644 --- a/sc/source/ui/inc/gridmerg.hxx +++ b/sc/source/ui/inc/gridmerg.hxx @@ -42,8 +42,8 @@ public: ScGridMerger( OutputDevice* pOutDev, long nOnePixelX, long nOnePixelY ); ~ScGridMerger(); - void AddHorLine( long nX1, long nX2, long nY ); - void AddVerLine( long nX, long nY1, long nY2 ); + void AddHorLine(bool bWorksInPixels, long nX1, long nX2, long nY); + void AddVerLine(bool bWorksInPixels, long nX, long nY1, long nY2); void Flush(); }; diff --git a/sc/source/ui/inc/output.hxx b/sc/source/ui/inc/output.hxx index 8873af7bd287..a7b96f787cb8 100644 --- a/sc/source/ui/inc/output.hxx +++ b/sc/source/ui/inc/output.hxx @@ -297,7 +297,7 @@ public: void SetSnapPixel( bool bSet = true ); - void DrawGrid( bool bGrid, bool bPage ); + void DrawGrid(vcl::RenderContext& rRenderContext, bool bGrid, bool bPage); void DrawStrings( bool bPixelToLogic = false ); /// Draw all strings, or provide Rectangle where the text (defined by rAddress) would be drawn. diff --git a/sc/source/ui/view/gridmerg.cxx b/sc/source/ui/view/gridmerg.cxx index d2d434f89811..6ccc18170f2f 100644 --- a/sc/source/ui/view/gridmerg.cxx +++ b/sc/source/ui/view/gridmerg.cxx @@ -86,8 +86,16 @@ void ScGridMerger::AddLine( long nStart, long nEnd, long nPos ) } } -void ScGridMerger::AddHorLine( long nX1, long nX2, long nY ) +void ScGridMerger::AddHorLine(bool bWorksInPixels, long nX1, long nX2, long nY) { + if (bWorksInPixels) + { + Point aPoint(pDev->PixelToLogic(Point(nX1, nY))); + nX1 = aPoint.X(); + nY = aPoint.Y(); + nX2 = pDev->PixelToLogic(Point(nX2, 0)).X(); + } + if ( bOptimize ) { if ( bVertical ) @@ -101,8 +109,16 @@ void ScGridMerger::AddHorLine( long nX1, long nX2, long nY ) pDev->DrawLine( Point( nX1, nY ), Point( nX2, nY ) ); } -void ScGridMerger::AddVerLine( long nX, long nY1, long nY2 ) +void ScGridMerger::AddVerLine(bool bWorksInPixels, long nX, long nY1, long nY2) { + if (bWorksInPixels) + { + Point aPoint(pDev->PixelToLogic(Point(nX, nY1))); + nX = aPoint.X(); + nY1 = aPoint.Y(); + nY2 = pDev->PixelToLogic(Point(0, nY2)).Y(); + } + if ( bOptimize ) { if ( !bVertical ) diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index de5411635391..b9894c83cd1c 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -720,15 +720,20 @@ void ScGridWindow::DrawContent(OutputDevice &rDevice, const ScTableInfo& rTableI aOutputData.DrawDocumentBackground(); - pContentDev->SetMapMode(MAP_PIXEL); - if ( bGridFirst && ( bGrid || bPage ) ) - aOutputData.DrawGrid( bGrid, bPage ); + aOutputData.DrawGrid(*pContentDev, bGrid, bPage); + + MapMode aPrevMapMode = pContentDev->GetMapMode(); + pContentDev->SetMapMode(MAP_PIXEL); aOutputData.DrawBackground(); + pContentDev->SetMapMode(aPrevMapMode); + if ( !bGridFirst && ( bGrid || bPage ) ) - aOutputData.DrawGrid( bGrid, bPage ); + aOutputData.DrawGrid(*pContentDev, bGrid, bPage); + + pContentDev->SetMapMode(MAP_PIXEL); if ( bPageMode ) { diff --git a/sc/source/ui/view/hdrcont.cxx b/sc/source/ui/view/hdrcont.cxx index 1b094cbe34b2..18f3ce158ef2 100644 --- a/sc/source/ui/view/hdrcont.cxx +++ b/sc/source/ui/view/hdrcont.cxx @@ -498,9 +498,9 @@ void ScHeaderControl::Paint( vcl::RenderContext& /*rRenderContext*/, const Recta if ( nPass == ( bNextToMark ? SC_HDRPAINT_SEL_BOTTOM : SC_HDRPAINT_BOTTOM ) ) { if (bVertical) - aGrid.AddHorLine( aScrPos.X(), aEndPos.X(), aEndPos.Y() ); + aGrid.AddHorLine(/* here we work in pixels */ true, aScrPos.X(), aEndPos.X(), aEndPos.Y()); else - aGrid.AddVerLine( aEndPos.X(), aScrPos.Y(), aEndPos.Y() ); + aGrid.AddVerLine(/* here we work in pixels */ true, aEndPos.X(), aScrPos.Y(), aEndPos.Y()); // thick bottom for hidden rows // (drawn directly, without aGrid) diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx index 4b33d2e80716..a2cc3261293d 100644 --- a/sc/source/ui/view/output.cxx +++ b/sc/source/ui/view/output.cxx @@ -307,7 +307,7 @@ void ScOutputData::SetSyntaxMode( bool bNewMode ) } } -void ScOutputData::DrawGrid( bool bGrid, bool bPage ) +void ScOutputData::DrawGrid(vcl::RenderContext& rRenderContext, bool bGrid, bool bPage) { SCCOL nX; SCROW nY; @@ -324,20 +324,16 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) if (bPagebreakMode) bPage = false; // no "normal" breaks over the whole width/height - //! um den einen Pixel sieht das Metafile (oder die Druck-Ausgabe) anders aus - //! als die Bildschirmdarstellung, aber wenigstens passen Druck und Metafile zusammen - - Size aOnePixel = mpDev->PixelToLogic(Size(1,1)); - long nOneX = aOnePixel.Width(); - long nOneY = aOnePixel.Height(); - if (bMetaFile) - nOneX = nOneY = 1; - - long nLayoutSign = bLayoutRTL ? -1 : 1; - long nSignedOneX = nOneX * nLayoutSign; + // It is a big mess to distinguish when we are using pixels and when logic + // units for drawing. Ultimately we want to work only in the logic units, + // but until that happens, we need to special-case: + // * metafile + // * drawing to the screen - everything is internally counted in pixels there + bool bWorksInPixels = bMetaFile; if ( eType == OUTTYPE_WINDOW ) { + bWorksInPixels = true; const svtools::ColorConfig& rColorCfg = SC_MOD()->GetColorConfig(); aPageColor.SetColor( rColorCfg.GetColorValue(svtools::CALCPAGEBREAKAUTOMATIC).nColor ); aManualColor.SetColor( rColorCfg.GetColorValue(svtools::CALCPAGEBREAKMANUAL).nColor ); @@ -348,8 +344,20 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) aManualColor = aGridColor; } - mpDev->SetLineColor( aGridColor ); - ScGridMerger aGrid( mpDev, nOneX, nOneY ); + long nOneX = 1; + long nOneY = 1; + if (!bWorksInPixels) + { + Size aOnePixel = rRenderContext.PixelToLogic(Size(1,1)); + nOneX = aOnePixel.Width(); + nOneY = aOnePixel.Height(); + } + + long nLayoutSign = bLayoutRTL ? -1 : 1; + long nSignedOneX = nOneX * nLayoutSign; + + rRenderContext.SetLineColor(aGridColor); + ScGridMerger aGrid(&rRenderContext, nOneX, nOneY); // vertical lines @@ -383,7 +391,7 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) if (nBreak != nBreakOld) { aGrid.Flush(); - mpDev->SetLineColor( (nBreak & BREAK_MANUAL) ? aManualColor : + rRenderContext.SetLineColor( (nBreak & BREAK_MANUAL) ? aManualColor : nBreak ? aPageColor : aGridColor ); nBreakOld = nBreak; } @@ -441,14 +449,14 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) if (pThisRowInfo->bChanged && !bHOver) { - aGrid.AddVerLine( nPosX-nSignedOneX, nPosY, nNextY-nOneY ); + aGrid.AddVerLine(bWorksInPixels, nPosX-nSignedOneX, nPosY, nNextY-nOneY); } nPosY = nNextY; } } else { - aGrid.AddVerLine( nPosX-nSignedOneX, nScrY, nScrY+nScrH-nOneY ); + aGrid.AddVerLine(bWorksInPixels, nPosX-nSignedOneX, nScrY, nScrY+nScrH-nOneY); } } } @@ -489,7 +497,7 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) if (nBreakOld != nBreak) { aGrid.Flush(); - mpDev->SetLineColor( (nBreak & BREAK_MANUAL) ? aManualColor : + rRenderContext.SetLineColor( (nBreak & BREAK_MANUAL) ? aManualColor : (nBreak) ? aPageColor : aGridColor ); nBreakOld = nBreak; } @@ -535,7 +543,7 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) } if (!bVOver) { - aGrid.AddHorLine( nPosX, nNextX-nSignedOneX, nPosY-nOneY ); + aGrid.AddHorLine(bWorksInPixels, nPosX, nNextX-nSignedOneX, nPosY-nOneY); } } nPosX = nNextX; @@ -543,7 +551,7 @@ void ScOutputData::DrawGrid( bool bGrid, bool bPage ) } else { - aGrid.AddHorLine( nScrX, nScrX+nScrW-nOneX, nPosY-nOneY ); + aGrid.AddHorLine(bWorksInPixels, nScrX, nScrX+nScrW-nOneX, nPosY-nOneY); } } } diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx index 1e9f4d0c2f0b..716cf99849d4 100644 --- a/sc/source/ui/view/printfun.cxx +++ b/sc/source/ui/view/printfun.cxx @@ -563,7 +563,7 @@ void ScPrintFunc::DrawToDev( ScDocument* pDoc, OutputDevice* pDev, double /* nPr if (!bMetaFile && pViewData) pDev->SetMapMode(aMode); - aOutputData.DrawGrid( true, false ); // no page breaks + aOutputData.DrawGrid(*pDev, true, false); // no page breaks pDev->SetLineColor( COL_BLACK ); @@ -1619,7 +1619,7 @@ void ScPrintFunc::PrintArea( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, } if (aTableParam.bGrid) - aOutputData.DrawGrid( true, false ); // no page breaks + aOutputData.DrawGrid(*pDev, true, false); // no page breaks aOutputData.AddPDFNotes(); // has no effect if not rendering PDF with notes enabled |