[Libreoffice-commits] .: sc/source
Markus Mohrhard
mmohrhard at kemper.freedesktop.org
Wed May 9 20:14:12 PDT 2012
sc/source/ui/view/output.cxx | 95 ++++++++++++++++++++++++++-----------------
1 file changed, 58 insertions(+), 37 deletions(-)
New commits:
commit b7ef4c31a623b3763434379df0a56c10bec77080
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Thu May 10 05:12:27 2012 +0200
render color scales correctly
Change-Id: I622b8911122e1c0693e0cbf5de8e6da1b09411c0
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 08d1377..0c46c0b 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -788,6 +788,59 @@ void ScOutputData::DrawDocumentBackground()
pDev->DrawRect(aRect);
}
+namespace {
+
+void drawCells(const Color* pColor, const SvxBrushItem* pBackground, const Color*& pOldColor, const SvxBrushItem*& pOldBackground,
+ Rectangle& rRect, long nPosX, long nSignedOneX, OutputDevice* pDev)
+{
+
+ // need to paint if old color scale has been used and now
+ // we have a different color or a style based background
+ // we can here fall back to pointer comparison
+ if (pOldColor && (pBackground || pOldColor != pColor))
+ {
+
+ rRect.Right() = nPosX-nSignedOneX;
+ if( !pOldColor->GetTransparency() )
+ {
+ pDev->SetFillColor( *pOldColor );
+ pDev->DrawRect( rRect );
+ }
+ rRect.Left() = nPosX - nSignedOneX;
+ }
+
+ if ( pOldBackground && (pColor ||pBackground != pOldBackground) )
+ {
+ rRect.Right() = nPosX-nSignedOneX;
+ if (pOldBackground) // ==0 if hidden
+ {
+ Color aBackCol = pOldBackground->GetColor();
+ if ( !aBackCol.GetTransparency() ) //! partial transparency?
+ {
+ pDev->SetFillColor( aBackCol );
+ pDev->DrawRect( rRect );
+ }
+ }
+ rRect.Left() = nPosX - nSignedOneX;
+ }
+
+ if(pColor)
+ {
+ // only update pOldColor if the colors changed
+ if (!pOldColor || *pOldColor != *pColor)
+ pOldColor = pColor;
+
+ pOldBackground = NULL;
+ }
+ else if(pBackground)
+ {
+ pOldBackground = pBackground;
+ pOldColor = NULL;
+ }
+}
+
+}
+
void ScOutputData::DrawBackground()
{
FindRotated(); //! von aussen ?
@@ -842,6 +895,8 @@ void ScOutputData::DrawBackground()
const SvxBrushItem* pOldBackground = NULL;
const SvxBrushItem* pBackground;
+ const Color* pOldColor = NULL;
+ const Color* pColor = NULL;
for (SCCOL nX=nX1; nX<=nX2; nX++)
{
CellInfo* pInfo = &pThisRowInfo->pCellInfo[nX+1];
@@ -880,46 +935,12 @@ void ScOutputData::DrawBackground()
pBackground = lcl_FindBackground( pDoc, nX, nY, nTab );
}
- if( pInfo->pColorScale )
- {
- pOldBackground = NULL;
+ pColor = pInfo->pColorScale;
+ drawCells( pColor, pBackground, pOldColor, pOldBackground, aRect, nPosX, nSignedOneX, pDev );
- aRect.Right() = nPosX-nSignedOneX;
- const Color* pColor = pInfo->pColorScale;
- if( !pColor->GetTransparency() )
- {
- pDev->SetFillColor( *pColor );
- pDev->DrawRect( aRect );
- }
- aRect.Left() = nPosX - nSignedOneX;
- }
- else if ( pBackground != pOldBackground )
- {
- aRect.Right() = nPosX-nSignedOneX;
- if (pOldBackground) // ==0 if hidden
- {
- Color aBackCol = pOldBackground->GetColor();
- if ( !aBackCol.GetTransparency() ) //! partial transparency?
- {
- pDev->SetFillColor( aBackCol );
- pDev->DrawRect( aRect );
- }
- }
- aRect.Left() = nPosX - nSignedOneX;
- pOldBackground = pBackground;
- }
nPosX += pRowInfo[0].pCellInfo[nX+1].nWidth * nLayoutSign;
}
- aRect.Right() = nPosX-nSignedOneX;
- if (pOldBackground)
- {
- Color aBackCol = pOldBackground->GetColor();
- if ( !aBackCol.GetTransparency() ) //! partial transparency?
- {
- pDev->SetFillColor( aBackCol );
- pDev->DrawRect( aRect );
- }
- }
+ drawCells( NULL, NULL, pOldColor, pOldBackground, aRect, nPosX, nSignedOneX, pDev );
nArrY += nSkip;
}
More information about the Libreoffice-commits
mailing list