diff options
Diffstat (limited to 'vcl/source/gdi/outdev3.cxx')
-rw-r--r-- | vcl/source/gdi/outdev3.cxx | 75 |
1 files changed, 45 insertions, 30 deletions
diff --git a/vcl/source/gdi/outdev3.cxx b/vcl/source/gdi/outdev3.cxx index bfcccbd0002c..c78794d76bb9 100644 --- a/vcl/source/gdi/outdev3.cxx +++ b/vcl/source/gdi/outdev3.cxx @@ -4495,11 +4495,11 @@ bool OutputDevice::ImplDrawRotateText( SalLayout& rSalLayout ) return true; } -void OutputDevice::ImplDrawTextDirect( SalLayout& rSalLayout, bool bTextLines ) +bool OutputDevice::ImplDrawTextDirect( SalLayout& rSalLayout, bool bTextLines, sal_uInt32 flags ) { if( mpFontEntry->mnOwnOrientation ) if( ImplDrawRotateText( rSalLayout ) ) - return; + return true; long nOldX = rSalLayout.DrawBase().X(); if( HasMirroredGraphics() ) @@ -4524,8 +4524,18 @@ void OutputDevice::ImplDrawTextDirect( SalLayout& rSalLayout, bool bTextLines ) rSalLayout.DrawBase().X() = pOutDevRef->mnOutWidth - 1 - (rSalLayout.DrawBase().X() - devX) + devX; } - rSalLayout.DrawText( *mpGraphics ); - + if(flags) + { + if( ! rSalLayout.DrawTextSpecial( *mpGraphics, flags )) + { + rSalLayout.DrawBase().X() = nOldX; + return false; + } + } + else + { + rSalLayout.DrawText( *mpGraphics ); + } rSalLayout.DrawBase().X() = nOldX; if( bTextLines ) @@ -4536,6 +4546,8 @@ void OutputDevice::ImplDrawTextDirect( SalLayout& rSalLayout, bool bTextLines ) // emphasis marks if( maFont.GetEmphasisMark() & EMPHASISMARK_STYLE ) ImplDrawEmphasisMarks( rSalLayout ); + + return true; } void OutputDevice::ImplDrawSpecialText( SalLayout& rSalLayout ) @@ -4626,33 +4638,36 @@ void OutputDevice::ImplDrawSpecialText( SalLayout& rSalLayout ) if ( maFont.IsOutline() ) { - rSalLayout.DrawBase() = aOrigPos + Point(-1,-1); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(+1,+1); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(-1,+0); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(-1,+1); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(+0,+1); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(+0,-1); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(+1,-1); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos + Point(+1,+0); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - rSalLayout.DrawBase() = aOrigPos; + if(! ImplDrawTextDirect( rSalLayout, mbTextLines, DRAWTEXT_F_OUTLINE)) + { + rSalLayout.DrawBase() = aOrigPos + Point(-1,-1); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(+1,+1); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(-1,+0); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(-1,+1); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(+0,+1); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(+0,-1); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(+1,-1); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos + Point(+1,+0); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + rSalLayout.DrawBase() = aOrigPos; - SetTextColor( Color( COL_WHITE ) ); - SetTextLineColor( Color( COL_WHITE ) ); - SetOverlineColor( Color( COL_WHITE ) ); - ImplInitTextColor(); - ImplDrawTextDirect( rSalLayout, mbTextLines ); - SetTextColor( aOldColor ); - SetTextLineColor( aOldTextLineColor ); - SetOverlineColor( aOldOverlineColor ); - ImplInitTextColor(); + SetTextColor( Color( COL_WHITE ) ); + SetTextLineColor( Color( COL_WHITE ) ); + SetOverlineColor( Color( COL_WHITE ) ); + ImplInitTextColor(); + ImplDrawTextDirect( rSalLayout, mbTextLines ); + SetTextColor( aOldColor ); + SetTextLineColor( aOldTextLineColor ); + SetOverlineColor( aOldOverlineColor ); + ImplInitTextColor(); + } } } } |