sc/source/ui/view/output.cxx | 95 ++++++++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 37 deletions(-)
New commits: commit b7ef4c31a623b3763434379df0a56c10bec77080 Author: Markus Mohrhard <markus.mohrh...@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; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits