summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedric.bosdonnat.ooo@free.fr>2011-09-13 10:01:44 +0200
committerCédric Bosdonnat <cedric.bosdonnat.ooo@free.fr>2011-09-13 14:10:50 +0200
commitc900069dee03c5ebf631a5862b94cd2962cbaea0 (patch)
treec7a654679fe0efaf80775a8fd9b71a686617cd85
parentd670cdcf33f93d67293ceca82ceff2cff7ba8a63 (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-xsw/source/core/layout/paintfrm.cxx31
-rw-r--r--sw/source/ui/docvw/HeaderFooterWin.cxx24
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 ) );