diff options
author | Cédric Bosdonnat <cedric.bosdonnat.ooo@free.fr> | 2011-09-13 10:01:44 +0200 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat.ooo@free.fr> | 2011-09-13 14:10:50 +0200 |
commit | c900069dee03c5ebf631a5862b94cd2962cbaea0 (patch) | |
tree | c7a654679fe0efaf80775a8fd9b71a686617cd85 | |
parent | d670cdcf33f93d67293ceca82ceff2cff7ba8a63 (diff) |
Header/Footer: display improvements
Changed the following:
+ Draw a gradient in the separator tabs background
+ Draw a solid line under the dotted one to have a contrast for some page
background colors.
-rwxr-xr-x | sw/source/core/layout/paintfrm.cxx | 31 | ||||
-rw-r--r-- | sw/source/ui/docvw/HeaderFooterWin.cxx | 24 |
2 files changed, 46 insertions, 9 deletions
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index 38247ed0aaec..eee5966ea889 100755 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -3279,31 +3279,48 @@ drawinglayer::primitive2d::Primitive2DSequence lcl_CreateHeaderFooterSeparatorPr const SwPageFrm* pPageFrm, double nLineY ) { // Adjust the Y-coordinate of the line to the header/footer box - drawinglayer::primitive2d::Primitive2DSequence aSeq( 1 ); + drawinglayer::primitive2d::Primitive2DSequence aSeq( 2 ); basegfx::B2DPoint aLeft ( pPageFrm->Frm().Left(), nLineY ); basegfx::B2DPoint aRight( pPageFrm->Frm().Right(), nLineY ); basegfx::BColor aLineColor = SwViewOption::GetHeaderFooterMarkColor().getBColor(); + // Get a color for the contrast + basegfx::BColor aHslLine = basegfx::tools::rgb2hsl( aLineColor ); + double nLuminance = aHslLine.getZ() * 2.5; + if ( nLuminance == 0 ) + nLuminance = 0.5; + else if ( nLuminance >= 1.0 ) + nLuminance = aHslLine.getZ() * 0.4; + aHslLine.setZ( nLuminance ); + const basegfx::BColor aOtherColor = basegfx::tools::hsl2rgb( aHslLine ); + + // Compute the plain line + basegfx::B2DPolygon aLinePolygon; + aLinePolygon.append( aLeft ); + aLinePolygon.append( aRight ); + + drawinglayer::primitive2d::PolygonHairlinePrimitive2D * pPlainLine = + new drawinglayer::primitive2d::PolygonHairlinePrimitive2D( + aLinePolygon, aOtherColor ); + + aSeq[0] = drawinglayer::primitive2d::Primitive2DReference( pPlainLine ); + + // Dashed line in twips std::vector< double > aStrokePattern; aStrokePattern.push_back( 40 ); aStrokePattern.push_back( 40 ); - // Compute the dashed line primitive - basegfx::B2DPolygon aLinePolygon; - aLinePolygon.append( aLeft ); - aLinePolygon.append( aRight ); - drawinglayer::primitive2d::PolyPolygonStrokePrimitive2D * pLine = new drawinglayer::primitive2d::PolyPolygonStrokePrimitive2D ( basegfx::B2DPolyPolygon( aLinePolygon ), drawinglayer::attribute::LineAttribute( aLineColor ), drawinglayer::attribute::StrokeAttribute( aStrokePattern ) ); - aSeq[0] = drawinglayer::primitive2d::Primitive2DReference( pLine ); + aSeq[1] = drawinglayer::primitive2d::Primitive2DReference( pLine ); return aSeq; } diff --git a/sw/source/ui/docvw/HeaderFooterWin.cxx b/sw/source/ui/docvw/HeaderFooterWin.cxx index 65b4176f7515..d7c9c848199a 100644 --- a/sw/source/ui/docvw/HeaderFooterWin.cxx +++ b/sw/source/ui/docvw/HeaderFooterWin.cxx @@ -48,6 +48,7 @@ #include <editeng/ulspitem.hxx> #include <svtools/svtdata.hxx> #include <vcl/decoview.hxx> +#include <vcl/gradient.hxx> #include <vcl/menubtn.hxx> #include <vcl/svapp.hxx> @@ -69,16 +70,35 @@ namespace return basegfx::tools::hsl2rgb( aHslLine ); } + basegfx::BColor lcl_GetLighterGradientColor( basegfx::BColor aDarkColor ) + { + basegfx::BColor aHslDark = basegfx::tools::rgb2hsl( aDarkColor ); + double nLuminance = aHslDark.getZ() * 255 + 20; + aHslDark.setZ( nLuminance / 255.0 ); + return basegfx::tools::hsl2rgb( aHslDark ); + } + void lcl_DrawBackground( OutputDevice* pOut, const Rectangle& rRect, bool bHeader ) { // Colors basegfx::BColor aLineColor = SwViewOption::GetHeaderFooterMarkColor().getBColor(); basegfx::BColor aFillColor = lcl_GetFillColor( aLineColor ); + basegfx::BColor aLighterColor = lcl_GetLighterGradientColor( aFillColor ); + + // Draw the background gradient + Gradient aGradient; + if ( bHeader ) + aGradient = Gradient( GRADIENT_LINEAR, + Color( aLighterColor ), Color( aFillColor ) ); + else + aGradient = Gradient( GRADIENT_LINEAR, + Color( aFillColor ), Color( aLighterColor ) ); + + pOut->DrawGradient( rRect, aGradient ); - // Draw the background rect pOut->SetFillColor( Color ( aFillColor ) ); pOut->SetLineColor( Color ( aFillColor ) ); - pOut->DrawRect( rRect ); + // Draw the lines around the rect pOut->SetLineColor( Color( aLineColor ) ); |