You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by hd...@apache.org on 2014/05/19 14:05:28 UTC
svn commit: r1595858 - in /openoffice/trunk/main/vcl:
aqua/source/gdi/ctfonts.cxx aqua/source/gdi/ctfonts.hxx
aqua/source/gdi/ctlayout.cxx source/gdi/outdev3.cxx
Author: hdu
Date: Mon May 19 12:05:27 2014
New Revision: 1595858
URL: http://svn.apache.org/r1595858
Log:
#i124922# allow late setting of the font color for CoreText-layouted text
Modified:
openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.cxx
openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.hxx
openoffice/trunk/main/vcl/aqua/source/gdi/ctlayout.cxx
openoffice/trunk/main/vcl/source/gdi/outdev3.cxx
Modified: openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.cxx?rev=1595858&r1=1595857&r2=1595858&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.cxx (original)
+++ openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.cxx Mon May 19 12:05:27 2014
@@ -140,6 +140,9 @@ CTTextStyle::CTTextStyle( const ImplFont
CFDictionarySetValue( mpStyleDict, kCTFontAttributeName, pNewCTFont );
CFRelease( pNewCTFont);
+ // allow delayed setting the font color, i.e. after the text layout
+ CFDictionarySetValue( mpStyleDict, kCTForegroundColorFromContextAttributeName, kCFBooleanTrue );
+
// handle emulation of bold styles if requested and the font that doesn't provide them
if( (pReqFont->meWeight > WEIGHT_MEDIUM)
&& (mpFontData->meWeight <= WEIGHT_MEDIUM)
@@ -282,21 +285,6 @@ bool CTTextStyle::GetGlyphOutline( sal_G
return true;
}
-// -----------------------------------------------------------------------
-
-void CTTextStyle::SetTextColor( const RGBAColor& rColor )
-{
-#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
- CGColorRef pCGColor = CGColorCreateGenericRGB( rColor.GetRed(),
- rColor.GetGreen(), rColor.GetBlue(), rColor.GetAlpha() );
-#else // for builds on OSX 10.4 SDK
- const CGColorSpaceRef pCGColorSpace = GetSalData()->mxRGBSpace;
- CGColorRef pCGColor = CGColorCreate( pCGColorSpace, rColor.AsArray() );
-#endif
- CFDictionarySetValue( mpStyleDict, kCTForegroundColorAttributeName, pCGColor );
- CFRelease( pCGColor);
-}
-
// =======================================================================
CTFontData::CTFontData( const ImplDevFontAttributes& rDFA, sal_IntPtr nFontId )
Modified: openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.hxx?rev=1595858&r1=1595857&r2=1595858&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.hxx (original)
+++ openoffice/trunk/main/vcl/aqua/source/gdi/ctfonts.hxx Mon May 19 12:05:27 2014
@@ -39,7 +39,7 @@ public:
virtual bool GetGlyphBoundRect( sal_GlyphId, Rectangle& ) const;
virtual bool GetGlyphOutline( sal_GlyphId, basegfx::B2DPolyPolygon& ) const;
- virtual void SetTextColor( const RGBAColor& );
+ virtual void SetTextColor( const RGBAColor& ) {}
private:
/// CoreText text style object
Modified: openoffice/trunk/main/vcl/aqua/source/gdi/ctlayout.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/aqua/source/gdi/ctlayout.cxx?rev=1595858&r1=1595857&r2=1595858&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/aqua/source/gdi/ctlayout.cxx (original)
+++ openoffice/trunk/main/vcl/aqua/source/gdi/ctlayout.cxx Mon May 19 12:05:27 2014
@@ -111,6 +111,7 @@ CTLayout::~CTLayout()
bool CTLayout::LayoutText( ImplLayoutArgs& rArgs )
{
+ // release an eventual older layout
if( mpAttrString )
CFRelease( mpAttrString );
mpAttrString = NULL;
@@ -118,6 +119,7 @@ bool CTLayout::LayoutText( ImplLayoutArg
CFRelease( mpCTLine );
mpCTLine = NULL;
+ // initialize the new layout
SalLayout::AdjustLayout( rArgs );
mnCharCount = mnEndCharPos - mnMinCharPos;
@@ -236,12 +238,12 @@ void CTLayout::AdjustLayout( ImplLayoutA
void CTLayout::DrawText( SalGraphics& rGraphics ) const
{
AquaSalGraphics& rAquaGraphics = static_cast<AquaSalGraphics&>(rGraphics);
-
+
// short circuit if there is nothing to do
if( (mnCharCount <= 0)
|| !rAquaGraphics.CheckContext() )
return;
-
+
// the view is vertically flipped => flipped glyphs
// so apply a temporary transformation that it flips back
// also compensate if the font was size limited
@@ -249,7 +251,7 @@ void CTLayout::DrawText( SalGraphics& rG
CGContextScaleCTM( rAquaGraphics.mrContext, +mfFontScale, -mfFontScale );
CGContextSetShouldAntialias( rAquaGraphics.mrContext, !rAquaGraphics.mbNonAntialiasedText );
- // Draw the text
+ // set the text transformation (e.g. position)
const Point aVclPos = GetDrawPosition( Point(mnBaseAdv,0) );
CGPoint aTextPos = { +aVclPos.X()/mfFontScale, -aVclPos.Y()/mfFontScale };
@@ -262,6 +264,11 @@ void CTLayout::DrawText( SalGraphics& rG
}
CGContextSetTextPosition( rAquaGraphics.mrContext, aTextPos.x, aTextPos.y );
+
+ // set the text color as fill color (see kCTForegroundColorFromContextAttributeName)
+ CGContextSetFillColor( rAquaGraphics.mrContext, rAquaGraphics.maTextColor.AsArray() );
+
+ // draw the text
CTLineDraw( mpCTLine, rAquaGraphics.mrContext );
// request an update of the changed window area
Modified: openoffice/trunk/main/vcl/source/gdi/outdev3.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/vcl/source/gdi/outdev3.cxx?rev=1595858&r1=1595857&r2=1595858&view=diff
==============================================================================
--- openoffice/trunk/main/vcl/source/gdi/outdev3.cxx (original)
+++ openoffice/trunk/main/vcl/source/gdi/outdev3.cxx Mon May 19 12:05:27 2014
@@ -6043,14 +6043,6 @@ SalLayout* OutputDevice::ImplLayout( con
ImplLayoutArgs aLayoutArgs = ImplPrepareLayoutArgs( aStr, nMinIndex, nLen, nPixelWidth, pDXArray );
-#ifdef MACOSX
- // CoreText layouts are immutable and already contain the text color
- // so we need to provide the color already for the layout request
- // even if this layout will never be drawn
- if( mbInitTextColor )
- const_cast<OutputDevice&>(*this).ImplInitTextColor();
-#endif
-
// get matching layout object for base font
SalLayout* pSalLayout = NULL;
if( mpPDFWriter )