You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2014/03/19 11:15:07 UTC

svn commit: r1579184 [31/33] - in /openoffice/branches/alg_writerframes: ./ ext_sources/ extras/l10n/source/de/ extras/l10n/source/es/ extras/l10n/source/eu/ extras/l10n/source/hi/ extras/l10n/source/kk/ extras/l10n/source/lt/ extras/l10n/source/nb/ ex...

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdi.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdi.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdi.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdi.cxx Wed Mar 19 10:14:42 2014
@@ -19,8 +19,6 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_vcl.hxx"
 
@@ -46,25 +44,43 @@
 #include "aqua/salbmp.h"
 #include "aqua/salframe.h"
 #include "aqua/salcolorutils.hxx"
+#ifdef USE_ATSU
 #include "atsfonts.hxx"
+#else // !USE_ATSU
+#include "ctfonts.hxx"
+#endif
 
 #include "fontsubset.hxx"
 #include "impfont.hxx"
 #include "sallayout.hxx"
 #include "sft.hxx"
 
-
 using namespace vcl;
 
-//typedef unsigned char Boolean; // copied from MacTypes.h, should be properly included
-typedef std::vector<unsigned char> ByteVector;
+// =======================================================================
 
+SystemFontList::~SystemFontList( void )
+{}
 
 // =======================================================================
 
-ImplMacFontData::ImplMacFontData( const ImplDevFontAttributes& rDFA, ATSUFontID nFontId )
-:   ImplFontData( rDFA, 0 )
-,   mnFontId( nFontId )
+ImplMacTextStyle::ImplMacTextStyle( const ImplFontSelectData& rReqFont )
+:	mpFontData( (ImplMacFontData*)rReqFont.mpFontData )
+,	mfFontScale( 1.0 )
+,	mfFontStretch( 1.0 )
+,	mfFontRotation( 0.0 )
+{}
+
+// -----------------------------------------------------------------------
+
+ImplMacTextStyle::~ImplMacTextStyle( void )
+{}
+
+// =======================================================================
+
+ImplMacFontData::ImplMacFontData( const ImplDevFontAttributes& rDFA, sal_IntPtr nFontId )
+:	ImplFontData( rDFA, 0 )
+,	mnFontId( nFontId )
 ,	mpCharMap( NULL )
 ,	mbOs2Read( false )
 ,	mbHasOs2Table( false )
@@ -74,43 +90,43 @@ ImplMacFontData::ImplMacFontData( const 
 
 // -----------------------------------------------------------------------
 
-ImplMacFontData::~ImplMacFontData()
+ImplMacFontData::ImplMacFontData( const ImplMacFontData& rSrc )
+:	ImplFontData(       rSrc)
+,	mnFontId(           rSrc.mnFontId)
+,	mpCharMap(          rSrc.mpCharMap)
+,	mbOs2Read(          rSrc.mbOs2Read)
+,	mbHasOs2Table(      rSrc.mbHasOs2Table)
+,	mbCmapEncodingRead( rSrc.mbCmapEncodingRead)
+,	mbHasCJKSupport(    rSrc.mbHasCJKSupport)
 {
 	if( mpCharMap )
-		mpCharMap->DeReference();
+		mpCharMap->AddReference();
 }
 
 // -----------------------------------------------------------------------
 
-sal_IntPtr ImplMacFontData::GetFontId() const
+ImplMacFontData::~ImplMacFontData()
 {
-    return (sal_IntPtr)mnFontId;
+	if( mpCharMap )
+		mpCharMap->DeReference();
 }
 
 // -----------------------------------------------------------------------
 
-ImplFontData* ImplMacFontData::Clone() const
+sal_IntPtr ImplMacFontData::GetFontId() const
 {
-	ImplMacFontData* pClone = new ImplMacFontData(*this);
-	if( mpCharMap )
-		mpCharMap->AddReference();
-    return pClone;
+    return reinterpret_cast<sal_IntPtr>( mnFontId);
 }
 
 // -----------------------------------------------------------------------
 
 ImplFontEntry* ImplMacFontData::CreateFontInstance(ImplFontSelectData& rFSD) const
 {
-    return new ImplFontEntry(rFSD);
+	return new ImplFontEntry(rFSD);
 }
 
 // -----------------------------------------------------------------------
 
-inline FourCharCode GetTag(const char aTagName[5])
-{
-	return (aTagName[0]<<24)+(aTagName[1]<<16)+(aTagName[2]<<8)+(aTagName[3]);
-}
-
 static unsigned GetUShort( const unsigned char* p ){return((p[0]<<8)+p[1]);}
 static unsigned GetUInt( const unsigned char* p ) { return((p[0]<<24)+(p[1]<<16)+(p[2]<<8)+p[3]);}
 
@@ -125,27 +141,23 @@ const ImplFontCharMap* ImplMacFontData::
 	mpCharMap->AddReference();
 
 	// get the CMAP byte size
-	ATSFontRef rFont = FMGetATSFontRefFromFont( mnFontId );
-	ByteCount nBufSize = 0;
-    OSStatus eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, 0, NULL, &nBufSize );
-	DBG_ASSERT( (eStatus==noErr), "ImplMacFontData::GetImplFontCharMap : ATSFontGetTable1 failed!\n");
-	if( eStatus != noErr )
-		return mpCharMap;
-
 	// allocate a buffer for the CMAP raw data
-	ByteVector aBuffer( nBufSize );
+	const int nBufSize = GetFontTable( "cmap", NULL );
+	DBG_ASSERT( (nBufSize > 0), "ImplMacFontData::GetImplFontCharMap : FontGetTable1 failed!\n");
+	if( nBufSize <= 0 )
+		return mpCharMap;
 
 	// get the CMAP raw data
-	ByteCount nRawLength = 0;
-	eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
-	DBG_ASSERT( (eStatus==noErr), "ImplMacFontData::GetImplFontCharMap : ATSFontGetTable2 failed!\n");
-	if( eStatus != noErr )
+	ByteVector aBuffer( nBufSize );
+	const int nRawSize = GetFontTable( "cmap", &aBuffer[0] );
+	DBG_ASSERT( (nRawSize > 0), "ImplMacFontData::GetImplFontCharMap : ATSFontGetTable2 failed!\n");
+	if( nRawSize <= 0 )
 		return mpCharMap;
-	DBG_ASSERT( (nBufSize==nRawLength), "ImplMacFontData::GetImplFontCharMap : ByteCount mismatch!\n");
+	DBG_ASSERT( (nBufSize==nRawSize), "ImplMacFontData::GetImplFontCharMap : ByteCount mismatch!\n");
 
 	// parse the CMAP
 	CmapResult aCmapResult;
-	if( ParseCMAP( &aBuffer[0], nRawLength, aCmapResult ) )
+	if( ParseCMAP( &aBuffer[0], nRawSize, aCmapResult ) )
 	{
 		// create the matching charmap
 		mpCharMap->DeReference();
@@ -164,25 +176,21 @@ void ImplMacFontData::ReadOs2Table( void
 	if( mbOs2Read )
 		return;
 	mbOs2Read = true;
+	mbHasOs2Table = false;
 
 	// prepare to get the OS/2 table raw data
-	ATSFontRef rFont = FMGetATSFontRefFromFont( mnFontId );
-	ByteCount nBufSize = 0;
-	OSStatus eStatus = ATSFontGetTable( rFont, GetTag("OS/2"), 0, 0, NULL, &nBufSize );
-	DBG_ASSERT( (eStatus==noErr), "ImplMacFontData::ReadOs2Table : ATSFontGetTable1 failed!\n");
-	if( eStatus != noErr )
+	const int nBufSize = GetFontTable( "OS/2", NULL );
+	DBG_ASSERT( (nBufSize > 0), "ImplMacFontData::ReadOs2Table : FontGetTable1 failed!\n");
+	if( nBufSize <= 0 )
 		return;
 
-	// allocate a buffer for the OS/2 raw data
-	ByteVector aBuffer( nBufSize );
-
 	// get the OS/2 raw data
-	ByteCount nRawLength = 0;
-	eStatus = ATSFontGetTable( rFont, GetTag("OS/2"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
-	DBG_ASSERT( (eStatus==noErr), "ImplMacFontData::ReadOs2Table : ATSFontGetTable2 failed!\n");
-	if( eStatus != noErr )
+	ByteVector aBuffer( nBufSize );
+	const int nRawSize = GetFontTable( "cmap", &aBuffer[0] );
+	DBG_ASSERT( (nRawSize > 0), "ImplMacFontData::ReadOs2Table : ATSFontGetTable2 failed!\n");
+	if( nRawSize <= 0 )
 		return;
-	DBG_ASSERT( (nBufSize==nRawLength), "ImplMacFontData::ReadOs2Table : ByteCount mismatch!\n");
+	DBG_ASSERT( (nBufSize == nRawSize), "ImplMacFontData::ReadOs2Table : ByteCount mismatch!\n");
 	mbHasOs2Table = true;
 
 	// parse the OS/2 raw data
@@ -190,63 +198,53 @@ void ImplMacFontData::ReadOs2Table( void
 
 	// check if the fonts needs the "CJK extra leading" heuristic
 	const unsigned char* pOS2map = &aBuffer[0];
-    const sal_uInt32 nVersion = GetUShort( pOS2map );
-    if( nVersion >= 0x0001 )
-    {
-        sal_uInt32 ulUnicodeRange2 = GetUInt( pOS2map + 46 );
-        if( ulUnicodeRange2 & 0x2DF00000 )
-            mbHasCJKSupport = true;
-    }
+	const sal_uInt32 nVersion = GetUShort( pOS2map );
+	if( nVersion >= 0x0001 )
+	{
+		const sal_uInt32 ulUnicodeRange2 = GetUInt( pOS2map + 46 );
+		if( ulUnicodeRange2 & 0x2DF00000 )
+			mbHasCJKSupport = true;
+	}
 }
 
 void ImplMacFontData::ReadMacCmapEncoding( void ) const
 {
-    // read this only once per font
-    if( mbCmapEncodingRead )
-        return;
-    mbCmapEncodingRead = true;
-
-    ATSFontRef rFont = FMGetATSFontRefFromFont( mnFontId );
-    ByteCount nBufSize = 0;
-    OSStatus eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, 0, NULL, &nBufSize );
-    DBG_ASSERT( (eStatus==noErr), "ImplMacFontData::ReadMacCmapEncoding : ATSFontGetTable1 failed!\n");
-    if( eStatus != noErr )
-        return;
-
-    ByteVector aBuffer( nBufSize );
-
-    ByteCount nRawLength = 0;
-    eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
-    DBG_ASSERT( (eStatus==noErr), "ImplMacFontData::ReadMacCmapEncoding : ATSFontGetTable2 failed!\n");
-    if( eStatus != noErr )
-        return;
-    DBG_ASSERT( (nBufSize==nRawLength), "ImplMacFontData::ReadMacCmapEncoding : ByteCount mismatch!\n");
+	// read this only once per font
+	if( mbCmapEncodingRead )
+		return;
+	mbCmapEncodingRead = true;
 
-    const unsigned char* pCmap = &aBuffer[0];
+	const int nBufSize = GetFontTable( "cmap", NULL );
+	if( nBufSize <= 0 )
+		return;
 
-    if (nRawLength < 24 )
-        return;
-    if( GetUShort( pCmap ) != 0x0000 )
-        return;
+	// get the CMAP raw data
+	ByteVector aBuffer( nBufSize );
+	const int nRawSize = GetFontTable( "cmap", &aBuffer[0] );
+	if( nRawSize < 24 )
+		return;
 
-    // check if the fonts needs the "CJK extra leading" heuristic
-    int nSubTables = GetUShort( pCmap + 2 );
+	const unsigned char* pCmap = &aBuffer[0];
+	if( GetUShort( pCmap ) != 0x0000 )
+		return;
 
-    for( const unsigned char* p = pCmap + 4; --nSubTables >= 0; p += 8 )
-    {
-        int nPlatform = GetUShort( p );
-        if( nPlatform == kFontMacintoshPlatform ) {
-            int nEncoding = GetUShort (p + 2 );
-            if( nEncoding == kFontJapaneseScript ||
-                nEncoding == kFontTraditionalChineseScript ||
-                nEncoding == kFontKoreanScript ||
-                nEncoding == kFontSimpleChineseScript )
-            {
-                mbHasCJKSupport = true;
-                break;
-            }
-        }
-    }
+	// check if the fonts needs the "CJK extra leading" heuristic
+	int nSubTables = GetUShort( pCmap + 2 );
+	for( const unsigned char* p = pCmap + 4; --nSubTables >= 0; p += 8 )
+	{
+		int nPlatform = GetUShort( p );
+		if( nPlatform == kFontMacintoshPlatform ) {
+			const int nEncoding = GetUShort (p + 2 );
+			if( nEncoding == kFontJapaneseScript ||
+			    nEncoding == kFontTraditionalChineseScript ||
+			    nEncoding == kFontKoreanScript ||
+			    nEncoding == kFontSimpleChineseScript )
+			{
+				mbHasCJKSupport = true;
+				break;
+			}
+		}
+	}
 }
 
 // -----------------------------------------------------------------------
@@ -254,8 +252,8 @@ void ImplMacFontData::ReadMacCmapEncodin
 bool ImplMacFontData::HasCJKSupport( void ) const
 {
 	ReadOs2Table();
-    if( !mbHasOs2Table )
-        ReadMacCmapEncoding();
+	if( !mbHasOs2Table )
+		ReadMacCmapEncoding();
 
 	return mbHasCJKSupport;
 }
@@ -277,59 +275,51 @@ AquaSalGraphics::AquaSalGraphics()
     , mxClipPath( NULL )
     , maLineColor( COL_WHITE )
     , maFillColor( COL_BLACK )
-	, mpMacFontData( NULL )
-    , mnATSUIRotation( 0 )
-    , mfFontScale( 1.0 )
-    , mfFontStretch( 1.0 )
+    , mpMacFontData( NULL )
+    , mpMacTextStyle( NULL )
+    , maTextColor( COL_BLACK )
     , mbNonAntialiasedText( false )
     , mbPrinter( false )
     , mbVirDev( false )
     , mbWindow( false )
-{
-    // create the style object for font attributes
-    ATSUCreateStyle( &maATSUStyle );
-}
+{}
 
 // -----------------------------------------------------------------------
 
 AquaSalGraphics::~AquaSalGraphics()
 {
-/*
-	if( mnUpdateGraphicsEvent )
-	{
-		Application::RemoveUserEvent( mnUpdateGraphicsEvent );
-	}
-*/
-    CGPathRelease( mxClipPath );
-    ATSUDisposeStyle( maATSUStyle );
+	CGPathRelease( mxClipPath );
+
+    delete mpMacTextStyle;
 
 	if( mpXorEmulation )
 		delete mpXorEmulation;
 
 	if( mxLayer )
-    	CGLayerRelease( mxLayer );
+		CGLayerRelease( mxLayer );
 	else if( mrContext && mbWindow )
 	{
 		// destroy backbuffer bitmap context that we created ourself
 		CGContextRelease( mrContext );
 		mrContext = NULL;
-        // memory is freed automatically by maOwnContextMemory
+		// memory is freed automatically by maOwnContextMemory
 	}
 }
 
 bool AquaSalGraphics::supportsOperation( OutDevSupportType eType ) const
 {
-    bool bRet = false;
-    switch( eType )
-    {
-    case OutDevSupport_TransparentRect:
-    case OutDevSupport_B2DClip:
-    case OutDevSupport_B2DDraw:
-        bRet = true;
-        break;
-    default: break;
-    }
-    return bRet;
+	bool bRet = false;
+	switch( eType )
+	{
+		case OutDevSupport_TransparentRect:
+		case OutDevSupport_B2DClip:
+		case OutDevSupport_B2DDraw:
+			bRet = true;
+			break;
+		default:
+			break;
+	}
+	return bRet;
 }
 
 // =======================================================================
@@ -1368,7 +1358,7 @@ static void DrawPattern50( void*, CGCont
 
 void AquaSalGraphics::Pattern50Fill()
 {
-    static const float aFillCol[4] = { 1,1,1,1 };
+    static const CGFloat aFillCol[4] = { 1,1,1,1 };
     static const CGPatternCallbacks aCallback = { 0, &DrawPattern50, NULL };
     if( ! GetSalData()->mxP50Space )
         GetSalData()->mxP50Space = CGColorSpaceCreatePattern( GetSalData()->mxRGBSpace );
@@ -1392,7 +1382,7 @@ void AquaSalGraphics::invert( long nX, l
 
         if ( nFlags & SAL_INVERT_TRACKFRAME )
         {
-            const float dashLengths[2]  = { 4.0, 4.0 };     // for drawing dashed line
+            const CGFloat dashLengths[2]  = { 4.0, 4.0 };     // for drawing dashed line
             CGContextSetBlendMode( mrContext, kCGBlendModeDifference );
             CGContextSetRGBStrokeColor ( mrContext, 1.0, 1.0, 1.0, 1.0 );
             CGContextSetLineDash ( mrContext, 0, dashLengths, 2 );
@@ -1429,7 +1419,7 @@ void AquaSalGraphics::invert( sal_uInt32
         CGContextAddLines ( mrContext, CGpoints, nPoints );
         if ( nSalFlags & SAL_INVERT_TRACKFRAME )
         {
-            const float dashLengths[2]  = { 4.0, 4.0 };     // for drawing dashed line
+            const CGFloat dashLengths[2]  = { 4.0, 4.0 };     // for drawing dashed line
             CGContextSetBlendMode( mrContext, kCGBlendModeDifference );
             CGContextSetRGBStrokeColor ( mrContext, 1.0, 1.0, 1.0, 1.0 );
             CGContextSetLineDash ( mrContext, 0, dashLengths, 2 );
@@ -1599,73 +1589,23 @@ bool AquaSalGraphics::drawAlphaRect( lon
 	// restore state
 	CGContextRestoreGState(mrContext);
 	RefreshRect( aRect );
-    return true;
+	return true;
 }
 
 // -----------------------------------------------------------------------
 
 void AquaSalGraphics::SetTextColor( SalColor nSalColor )
 {
-    RGBColor color;
-    color.red     = (unsigned short) ( SALCOLOR_RED(nSalColor)   * 65535.0 / 255.0 );
-    color.green   = (unsigned short) ( SALCOLOR_GREEN(nSalColor) * 65535.0 / 255.0 );
-    color.blue    = (unsigned short) ( SALCOLOR_BLUE(nSalColor)  * 65535.0 / 255.0 );
-
-    ATSUAttributeTag aTag = kATSUColorTag;
-    ByteCount aValueSize = sizeof( color );
-    ATSUAttributeValuePtr aValue = &color;
-
-    OSStatus err = ATSUSetAttributes( maATSUStyle, 1, &aTag, &aValueSize, &aValue );
-	DBG_ASSERT( (err==noErr), "AquaSalGraphics::SetTextColor() : Could not set font attributes!\n");
-	if( err != noErr )
-		return;
+	maTextColor = RGBAColor( nSalColor );
+	if( mpMacTextStyle)
+		mpMacTextStyle->SetTextColor( maTextColor );
 }
 
 // -----------------------------------------------------------------------
 
-void AquaSalGraphics::GetFontMetric( ImplFontMetricData* pMetric, int nFallbackLevel )
+void AquaSalGraphics::GetFontMetric( ImplFontMetricData* pMetric, int /*nFallbackLevel*/ )
 {
-	(void)nFallbackLevel; // glyph-fallback on ATSU is done differently -> no fallback level
-
-	// get the ATSU font metrics (in point units)
-	// of the font that has eventually been size-limited
-
-    ATSUFontID fontId; 	 
-    OSStatus err = ATSUGetAttribute( maATSUStyle, kATSUFontTag, sizeof(ATSUFontID), &fontId, 0 );
-    DBG_ASSERT( (err==noErr), "AquaSalGraphics::GetFontMetric() : could not get font id\n");
-
-    ATSFontMetrics aMetrics;
-    ATSFontRef rFont = FMGetATSFontRefFromFont( fontId );
-    err = ATSFontGetHorizontalMetrics ( rFont, kATSOptionFlagsDefault, &aMetrics );
-	DBG_ASSERT( (err==noErr), "AquaSalGraphics::GetFontMetric() : could not get font metrics\n");
-    if( err != noErr )
-		return;
-
-	// all ATS fonts are scalable fonts
-	pMetric->mbScalableFont = true;
-	// TODO: check if any kerning is possible
-	pMetric->mbKernableFont = true;
-
-	// convert into VCL font metrics (in unscaled pixel units)
-
-    Fixed ptSize;
-    err = ATSUGetAttribute( maATSUStyle, kATSUSizeTag, sizeof(Fixed), &ptSize, 0);
-    DBG_ASSERT( (err==noErr), "AquaSalGraphics::GetFontMetric() : could not get font size\n");
-	const double fPointSize = Fix2X( ptSize );
-
-	// convert quartz units to pixel units
-	// please see the comment in AquaSalGraphics::SetFont() for details
-    const double fPixelSize = (mfFontScale * mfFakeDPIScale * fPointSize);
-    pMetric->mnAscent       = static_cast<long>(+aMetrics.ascent  * fPixelSize + 0.5);
-    pMetric->mnDescent      = static_cast<long>(-aMetrics.descent * fPixelSize + 0.5);
-    const long nExtDescent  = static_cast<long>((-aMetrics.descent + aMetrics.leading) * fPixelSize + 0.5);
-    pMetric->mnExtLeading   = nExtDescent - pMetric->mnDescent;
-    pMetric->mnIntLeading   = 0;
-    // ATSFontMetrics.avgAdvanceWidth is obsolete, so it is usually set to zero
-    // since ImplFontMetricData::mnWidth is only used for stretching/squeezing fonts
-    // setting this width to the pixel height of the fontsize is good enough
-    // it also makes the calculation of the stretch factor simple
-    pMetric->mnWidth        = static_cast<long>(mfFontStretch * fPixelSize + 0.5);
+	mpMacTextStyle->GetFontMetric( mfFakeDPIScale, *pMetric );
 }
 
 // -----------------------------------------------------------------------
@@ -1748,19 +1688,26 @@ void AquaSalGraphics::GetDevFontList( Im
 {
 	DBG_ASSERT( pFontList, "AquaSalGraphics::GetDevFontList(NULL) !");
 
-    AddLocalTempFontDirs();
+	AddLocalTempFontDirs();
  
 	// The idea is to cache the list of system fonts once it has been generated. 
 	// SalData seems to be a good place for this caching. However we have to 
 	// carefully make the access to the font list thread-safe. If we register 
 	// a font-change event handler to update the font list in case fonts have 
 	// changed on the system we have to lock access to the list. The right
-    // way to do that is the solar mutex since GetDevFontList is protected
-    // through it as should be all event handlers
+	// way to do that is the solar mutex since GetDevFontList is protected
+	// through it as should be all event handlers
 
 	SalData* pSalData = GetSalData();
-	if (pSalData->mpFontList == NULL)
-		pSalData->mpFontList = new SystemFontList();
+#ifdef USE_ATSU
+	SystemFontList* GetAtsFontList(void);      // forward declaration
+	if( !pSalData->mpFontList )
+		pSalData->mpFontList = GetAtsFontList();
+#else
+	SystemFontList* GetCoretextFontList(void); // forward declaration
+	if( !pSalData->mpFontList )
+		pSalData->mpFontList = GetCoretextFontList();
+#endif // DISABLE_ATSUI
 
 	// Copy all ImplFontData objects contained in the SystemFontList
 	pSalData->mpFontList->AnnounceFonts( *pFontList );
@@ -1810,71 +1757,6 @@ bool AquaSalGraphics::AddTempDevFont( Im
 
 // -----------------------------------------------------------------------
 
-// callbacks from ATSUGlyphGetCubicPaths() fore GetGlyphOutline()
-struct GgoData { basegfx::B2DPolygon maPolygon; basegfx::B2DPolyPolygon* mpPolyPoly; };
-
-static OSStatus GgoLineToProc( const Float32Point* pPoint, void* pData )
-{
-	basegfx::B2DPolygon& rPolygon = static_cast<GgoData*>(pData)->maPolygon;
-	const basegfx::B2DPoint aB2DPoint( pPoint->x, pPoint->y );
-	rPolygon.append( aB2DPoint );
-	return noErr;
-}
-
-static OSStatus GgoCurveToProc( const Float32Point* pCP1, const Float32Point* pCP2,
-	const Float32Point* pPoint, void* pData )
-{
-	basegfx::B2DPolygon& rPolygon = static_cast<GgoData*>(pData)->maPolygon;
-	const sal_uInt32 nPointCount = rPolygon.count();
-	const basegfx::B2DPoint aB2DControlPoint1( pCP1->x, pCP1->y );
-	rPolygon.setNextControlPoint( nPointCount-1, aB2DControlPoint1 );
-	const basegfx::B2DPoint aB2DEndPoint( pPoint->x, pPoint->y );
-	rPolygon.append( aB2DEndPoint );
-	const basegfx::B2DPoint aB2DControlPoint2( pCP2->x, pCP2->y );
-	rPolygon.setPrevControlPoint( nPointCount, aB2DControlPoint2 );
-	return noErr;
-}
-
-static OSStatus GgoClosePathProc( void* pData )
-{
-	GgoData* pGgoData = static_cast<GgoData*>(pData);
-	basegfx::B2DPolygon& rPolygon = pGgoData->maPolygon;
-	if( rPolygon.count() > 0 )
-		pGgoData->mpPolyPoly->append( rPolygon );
-	rPolygon.clear();
-	return noErr;
-}
-
-static OSStatus GgoMoveToProc( const Float32Point* pPoint, void* pData )
-{
-	GgoClosePathProc( pData );
-	OSStatus eStatus = GgoLineToProc( pPoint, pData );
-	return eStatus;
-}
-
-bool AquaSalGraphics::GetGlyphOutline( sal_GlyphId aGlyphId, basegfx::B2DPolyPolygon& rPolyPoly )
-{
-	GgoData aGgoData;
-	aGgoData.mpPolyPoly = &rPolyPoly;
-	rPolyPoly.clear();
-
-	ATSUStyle rATSUStyle = maATSUStyle;	// TODO: handle glyph fallback when CWS pdffix02 is integrated
-	OSStatus eGgoStatus = noErr;
-	OSStatus eStatus = ATSUGlyphGetCubicPaths( rATSUStyle, aGlyphId,
-		GgoMoveToProc, GgoLineToProc, GgoCurveToProc, GgoClosePathProc,
-		&aGgoData, &eGgoStatus );
-	if( (eStatus != noErr) ) // TODO: why is (eGgoStatus!=noErr) when curves are involved?
-		return false;
-
-	GgoClosePathProc( &aGgoData );
-	if( mfFontScale != 1.0 ) {
-		rPolyPoly.transform(basegfx::tools::createScaleB2DHomMatrix(+mfFontScale, +mfFontScale));
-	}
-	return true;
-}
-
-// -----------------------------------------------------------------------
-
 long AquaSalGraphics::GetGraphicsWidth() const
 {
     long w = 0;
@@ -1896,20 +1778,16 @@ long AquaSalGraphics::GetGraphicsWidth()
 
 bool AquaSalGraphics::GetGlyphBoundRect( sal_GlyphId aGlyphId, Rectangle& rRect )
 {
-	ATSUStyle rATSUStyle = maATSUStyle;	// TODO: handle glyph fallback
-	ATSGlyphScreenMetrics aGlyphMetrics;
-	GlyphID nAtsGlyphId = aGlyphId;
-	OSStatus eStatus = ATSUGlyphGetScreenMetrics( rATSUStyle,
-		1, &nAtsGlyphId, 0, FALSE, !mbNonAntialiasedText, &aGlyphMetrics );
-	if( eStatus != noErr )
-		return false;
+	const bool bRC = mpMacTextStyle->GetGlyphBoundRect( aGlyphId, rRect );
+	return bRC;
+}
 
-	const long nMinX = (long)(+aGlyphMetrics.topLeft.x * mfFontScale - 0.5);
-	const long nMaxX = (long)(aGlyphMetrics.width * mfFontScale + 0.5) + nMinX;
-	const long nMinY = (long)(-aGlyphMetrics.topLeft.y * mfFontScale - 0.5);
-	const long nMaxY = (long)(aGlyphMetrics.height * mfFontScale + 0.5) + nMinY;
-	rRect = Rectangle( nMinX, nMinY, nMaxX, nMaxY );
-	return true;
+// -----------------------------------------------------------------------
+
+bool AquaSalGraphics::GetGlyphOutline( sal_GlyphId aGlyphId, basegfx::B2DPolyPolygon& rPolyPoly )
+{
+	const bool bRC = mpMacTextStyle->GetGlyphOutline( aGlyphId, rPolyPoly );
+	return bRC;
 }
 
 // -----------------------------------------------------------------------
@@ -1922,138 +1800,40 @@ void AquaSalGraphics::GetDevFontSubstLis
 // -----------------------------------------------------------------------
 
 void AquaSalGraphics::DrawServerFontLayout( const ServerFontLayout& )
-{
-}
+{}
 
 // -----------------------------------------------------------------------
 
 sal_uInt16 AquaSalGraphics::SetFont( ImplFontSelectData* pReqFont, int /*nFallbackLevel*/ )
 {
-    if( !pReqFont )
-    {
-    	ATSUClearStyle( maATSUStyle );
-		mpMacFontData = NULL;
-        return 0;
-    }
+	// release the text style
+	delete mpMacTextStyle;
+	mpMacTextStyle = NULL;
 
-    // store the requested device font entry
-    const ImplMacFontData* pMacFont = static_cast<const ImplMacFontData*>( pReqFont->mpFontData );
-    mpMacFontData = pMacFont;
-
-    // convert pixel units (as seen by upper layers) to typographic point units
-    double fScaledAtsHeight = pReqFont->mfExactHeight;
-    // avoid Fixed16.16 overflows by limiting the ATS font size
-    static const float fMaxAtsHeight = 144.0;
-    if( fScaledAtsHeight <= fMaxAtsHeight )
-        mfFontScale = 1.0;
-    else
-    {
-        mfFontScale = fScaledAtsHeight / fMaxAtsHeight;
-        fScaledAtsHeight = fMaxAtsHeight;
-    }
-    Fixed fFixedSize = FloatToFixed( fScaledAtsHeight );
-    // enable bold-emulation if needed
-    Boolean bFakeBold = FALSE;
-    if( (pReqFont->GetWeight() >= WEIGHT_BOLD)
-    &&  (pMacFont->GetWeight() < WEIGHT_SEMIBOLD) )
-        bFakeBold = TRUE;
-    // enable italic-emulation if needed
-    Boolean bFakeItalic = FALSE;
-    if( ((pReqFont->GetSlant() == ITALIC_NORMAL) || (pReqFont->GetSlant() == ITALIC_OBLIQUE))
-    && !((pMacFont->GetSlant() == ITALIC_NORMAL) || (pMacFont->GetSlant() == ITALIC_OBLIQUE)) )
-        bFakeItalic = TRUE;
-
-    // enable/disable antialiased text
-    mbNonAntialiasedText = pReqFont->mbNonAntialiased;
-    UInt32 nStyleRenderingOptions = kATSStyleNoOptions;
-    if( pReqFont->mbNonAntialiased )
-        nStyleRenderingOptions |= kATSStyleNoAntiAliasing; 
-
-	// set horizontal/vertical mode
-	ATSUVerticalCharacterType aVerticalCharacterType = kATSUStronglyHorizontal;
-	if( pReqFont->mbVertical )
-		aVerticalCharacterType = kATSUStronglyVertical;
-
-	// prepare ATS-fontid as type matching to the kATSUFontTag request
-	ATSUFontID nFontID = static_cast<ATSUFontID>(pMacFont->GetFontId());
-
-    // update ATSU style attributes with requested font parameters
-	// TODO: no need to set styles which are already defaulted
-
-    const ATSUAttributeTag aTag[] =
-    {
-        kATSUFontTag,
-        kATSUSizeTag,
-        kATSUQDBoldfaceTag,
-        kATSUQDItalicTag,
-        kATSUStyleRenderingOptionsTag,
-		kATSUVerticalCharacterTag
-    };
-
-    const ByteCount aValueSize[] = 
-    {
-        sizeof(ATSUFontID),
-        sizeof(fFixedSize),
-        sizeof(bFakeBold), 
-        sizeof(bFakeItalic),
-        sizeof(nStyleRenderingOptions),
-        sizeof(aVerticalCharacterType)
-    };
- 
-    const ATSUAttributeValuePtr aValue[] = 
-    {
-        &nFontID,
-        &fFixedSize,
-        &bFakeBold, 
-        &bFakeItalic,
-        &nStyleRenderingOptions,
-        &aVerticalCharacterType
-    };
-
-	static const int nTagCount = sizeof(aTag) / sizeof(*aTag);
-    OSStatus eStatus = ATSUSetAttributes( maATSUStyle, nTagCount,
-                             aTag, aValueSize, aValue );
-    // reset ATSUstyle if there was an error
-    if( eStatus != noErr )
-    {
-        DBG_WARNING( "AquaSalGraphics::SetFont() : Could not set font attributes!\n");
-        ATSUClearStyle( maATSUStyle );
-        mpMacFontData = NULL;
-        return 0;
-    }
+	// handle NULL request meaning: release-font-resources request
+	if( !pReqFont )
+	{
+		mpMacFontData = NULL;
+		return 0;
+	}
 
-    // prepare font stretching
-    const ATSUAttributeTag aMatrixTag = kATSUFontMatrixTag;
-    if( (pReqFont->mnWidth == 0) || (pReqFont->mnWidth == pReqFont->mnHeight) )
-    {
-        mfFontStretch = 1.0;
-    	ATSUClearAttributes( maATSUStyle, 1, &aMatrixTag );
-    }
-    else
-    {
-        mfFontStretch = (float)pReqFont->mnWidth / pReqFont->mnHeight;
-        CGAffineTransform aMatrix = CGAffineTransformMakeScale( mfFontStretch, 1.0F );
-        const ATSUAttributeValuePtr aAttr = &aMatrix;
-        const ByteCount aMatrixBytes = sizeof(aMatrix);
-        eStatus = ATSUSetAttributes( maATSUStyle, 1, &aMatrixTag, &aMatrixBytes, &aAttr );
-        DBG_ASSERT( (eStatus==noErr), "AquaSalGraphics::SetFont() : Could not set font matrix\n");
-    }
-
-    // prepare font rotation
-    mnATSUIRotation = FloatToFixed( pReqFont->mnOrientation / 10.0 );
-
-#if OSL_DEBUG_LEVEL > 3
-    fprintf( stderr, "SetFont to (\"%s\", \"%s\", fontid=%d) for (\"%s\" \"%s\" weight=%d, slant=%d size=%dx%d orientation=%d)\n",
-             ::rtl::OUStringToOString( pMacFont->GetFamilyName(), RTL_TEXTENCODING_UTF8 ).getStr(),
-             ::rtl::OUStringToOString( pMacFont->GetStyleName(), RTL_TEXTENCODING_UTF8 ).getStr(),
-             (int)nFontID,
-             ::rtl::OUStringToOString( pReqFont->GetFamilyName(), RTL_TEXTENCODING_UTF8 ).getStr(),
-             ::rtl::OUStringToOString( pReqFont->GetStyleName(), RTL_TEXTENCODING_UTF8 ).getStr(),
-             pReqFont->GetWeight(),
-             pReqFont->GetSlant(),
-             pReqFont->mnHeight,
-             pReqFont->mnWidth,
-             pReqFont->mnOrientation);
+	// update the text style
+	mpMacFontData = static_cast<const ImplMacFontData*>( pReqFont->mpFontData );
+	mpMacTextStyle = mpMacFontData->CreateMacTextStyle( *pReqFont );
+	mpMacTextStyle->SetTextColor( maTextColor );
+
+#if (OSL_DEBUG_LEVEL > 3)
+	fprintf( stderr, "SetFont to (\"%s\", \"%s\", fontid=%d) for (\"%s\" \"%s\" weight=%d, slant=%d size=%dx%d orientation=%d)\n",
+		::rtl::OUStringToOString( mpMacFontData->GetFamilyName(), RTL_TEXTENCODING_UTF8 ).getStr(),
+		::rtl::OUStringToOString( mpMacFontData->GetStyleName(), RTL_TEXTENCODING_UTF8 ).getStr(),
+		(int)pMacFont->GetFontId(),
+		::rtl::OUStringToOString( mpMacFontData->GetFamilyName(), RTL_TEXTENCODING_UTF8 ).getStr(),
+		::rtl::OUStringToOString( mpMacFontData->GetStyleName(), RTL_TEXTENCODING_UTF8 ).getStr(),
+		pReqFont->GetWeight(),
+		pReqFont->GetSlant(),
+		pReqFont->mnHeight,
+		pReqFont->mnWidth,
+		pReqFont->mnOrientation);
 #endif
 
     return 0;
@@ -2061,6 +1841,14 @@ sal_uInt16 AquaSalGraphics::SetFont( Imp
 
 // -----------------------------------------------------------------------
 
+SalLayout* AquaSalGraphics::GetTextLayout( ImplLayoutArgs& /*rArgs*/, int /*nFallbackLevel*/ )
+{
+	SalLayout* pSalLayout = mpMacTextStyle->GetTextLayout();
+	return pSalLayout;
+}
+
+// -----------------------------------------------------------------------
+
 const ImplFontCharMap* AquaSalGraphics::GetImplFontCharMap() const
 {
 	if( !mpMacFontData )
@@ -2073,17 +1861,17 @@ const ImplFontCharMap* AquaSalGraphics::
 
 // fake a SFNT font directory entry for a font table
 // see http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6.html#Directory
-static void FakeDirEntry( FourCharCode eFCC, ByteCount nOfs, ByteCount nLen,
+static void FakeDirEntry( const char aTag[5], ByteCount nOfs, ByteCount nLen,
 	const unsigned char* /*pData*/, unsigned char*& rpDest )
 {
 	// write entry tag
-	rpDest[ 0] = (char)(eFCC >> 24);
-	rpDest[ 1] = (char)(eFCC >> 16);
-	rpDest[ 2] = (char)(eFCC >>  8);
-	rpDest[ 3] = (char)(eFCC >>  0);
+	rpDest[ 0] = aTag[0];
+	rpDest[ 1] = aTag[1];
+	rpDest[ 2] = aTag[2];
+	rpDest[ 3] = aTag[3];
 	// TODO: get entry checksum and write it
-	// 		not too important since the subsetter doesn't care currently
-	// 		for( pData+nOfs ... pData+nOfs+nLen )
+	//       not too important since the subsetter doesn't care currently
+	//       for( pData+nOfs ... pData+nOfs+nLen )
 	// write entry offset
 	rpDest[ 8] = (char)(nOfs >> 24);
 	rpDest[ 9] = (char)(nOfs >> 16);
@@ -2098,88 +1886,82 @@ static void FakeDirEntry( FourCharCode e
 	rpDest += 16;
 }
 
+// fake a TTF or CFF font as directly accessing font file is not possible
+// when only the fontid is known. This approach also handles *.dfont fonts.
 static bool GetRawFontData( const ImplFontData* pFontData,
 	ByteVector& rBuffer, bool* pJustCFF )
 {
 	const ImplMacFontData* pMacFont = static_cast<const ImplMacFontData*>(pFontData);
-	const ATSUFontID nFontId = static_cast<ATSUFontID>(pMacFont->GetFontId());
-	ATSFontRef rFont = FMGetATSFontRefFromFont( nFontId );
 
-	ByteCount nCffLen = 0;
-	OSStatus eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, 0, NULL, &nCffLen);
+	// short circuit for CFF-only fonts
+	const int nCffSize = pMacFont->GetFontTable( "CFF ", NULL);
 	if( pJustCFF != NULL )
 	{
-		*pJustCFF = (eStatus == noErr) && (nCffLen > 0);
-		if( *pJustCFF )
+		*pJustCFF = (nCffSize > 0);
+		if( *pJustCFF)
 		{
-			rBuffer.resize( nCffLen );
-			eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[0], &nCffLen);
-			if( (eStatus != noErr) || (nCffLen <= 0) )
+			rBuffer.resize( nCffSize);
+			const int nCffRead = pMacFont->GetFontTable( "CFF ", &rBuffer[0]);
+			if( nCffRead != nCffSize)
 				return false;
 			return true;
 		}
 	}
 
 	// get font table availability and size in bytes
-	ByteCount nHeadLen	= 0;
-	eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, 0, NULL, &nHeadLen);
-	if( (eStatus != noErr) || (nHeadLen <= 0) )
-		return false;
-	ByteCount nMaxpLen	= 0;
-    eStatus = ATSFontGetTable( rFont, GetTag("maxp"), 0, 0, NULL, &nMaxpLen);
-	if( (eStatus != noErr) || (nMaxpLen <= 0) )
-		return false;
-	ByteCount nCmapLen	= 0;
-    eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, 0, NULL, &nCmapLen);
-	if( (eStatus != noErr) || (nCmapLen <= 0) )
-		return false;
-	ByteCount nNameLen	= 0;
-    eStatus = ATSFontGetTable( rFont, GetTag("name"), 0, 0, NULL, &nNameLen);
-	if( (eStatus != noErr) || (nNameLen <= 0) )
-		return false;
-	ByteCount nHheaLen	= 0;
-	eStatus = ATSFontGetTable( rFont, GetTag("hhea"), 0, 0, NULL, &nHheaLen);
-	if( (eStatus != noErr) || (nHheaLen <= 0) )
-		return false;
-	ByteCount nHmtxLen	= 0;
-	eStatus = ATSFontGetTable( rFont, GetTag("hmtx"), 0, 0, NULL, &nHmtxLen);
-	if( (eStatus != noErr) || (nHmtxLen <= 0) )
-		return false;
-
-	// get the glyph outline tables
-	ByteCount nLocaLen	= 0;
-	ByteCount nGlyfLen	= 0;
-	if( (eStatus != noErr) || (nCffLen <= 0) )
+	const int nHeadSize = pMacFont->GetFontTable( "head", NULL);
+	if( nHeadSize <= 0)
+		return false;
+	const int nMaxpSize = pMacFont->GetFontTable( "maxp", NULL);
+	if( nMaxpSize <= 0)
+		return false;
+	const int nCmapSize = pMacFont->GetFontTable( "cmap", NULL);
+	if( nCmapSize <= 0)
+		return false;
+	const int nNameSize = pMacFont->GetFontTable( "name", NULL);
+	if( nNameSize <= 0)
+		return false;
+	const int nHheaSize = pMacFont->GetFontTable( "hhea", NULL);
+	if( nHheaSize <= 0)
+		return false;
+	const int nHmtxSize = pMacFont->GetFontTable( "hmtx", NULL);
+	if( nHmtxSize <= 0)
+		return false;
+
+	// get the ttf-glyf outline tables
+	int nLocaSize = 0;
+	int nGlyfSize = 0;
+	if( nCffSize <= 0)
 	{
-		eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, 0, NULL, &nLocaLen);
-		if( (eStatus != noErr) || (nLocaLen <= 0) )
+		nLocaSize = pMacFont->GetFontTable( "loca", NULL);
+		if( nLocaSize <= 0)
 			return false;
-		eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, 0, NULL, &nGlyfLen);
-		if( (eStatus != noErr) || (nGlyfLen <= 0) )
+		nGlyfSize = pMacFont->GetFontTable( "glyf", NULL);
+		if( nGlyfSize <= 0)
 			return false;
 	}
 
-	ByteCount nPrepLen=0, nCvtLen=0, nFpgmLen=0;
-	if( nGlyfLen )	// TODO: reduce PDF size by making hint subsetting optional
+	int nPrepSize = 0, nCvtSize = 0, nFpgmSize = 0;
+	if( nGlyfSize) // TODO: reduce PDF size by making hint subsetting optional
 	{
-		eStatus = ATSFontGetTable( rFont, GetTag("prep"), 0, 0, NULL, &nPrepLen);
-		eStatus = ATSFontGetTable( rFont, GetTag("cvt "), 0, 0, NULL, &nCvtLen);
-		eStatus = ATSFontGetTable( rFont, GetTag("fpgm"), 0, 0, NULL, &nFpgmLen);
+		nPrepSize = pMacFont->GetFontTable( "prep", NULL);
+		nCvtSize  = pMacFont->GetFontTable( "cvt ", NULL);
+		nFpgmSize = pMacFont->GetFontTable( "fpgm", NULL);
 	}
 	
 	// prepare a byte buffer for a fake font
 	int nTableCount = 7;
-	nTableCount += (nPrepLen>0) + (nCvtLen>0) + (nFpgmLen>0) + (nGlyfLen>0);
-	const ByteCount nFdirLen = 12 + 16*nTableCount;
-	ByteCount nTotalLen = nFdirLen;
-	nTotalLen += nHeadLen + nMaxpLen + nNameLen + nCmapLen;
-	if( nGlyfLen )
-		nTotalLen += nLocaLen + nGlyfLen;
+	nTableCount += (nPrepSize>0) + (nCvtSize>0) + (nFpgmSize>0) + (nGlyfSize>0);
+	const ByteCount nFdirSize = 12 + 16*nTableCount;
+	ByteCount nTotalSize = nFdirSize;
+	nTotalSize += nHeadSize + nMaxpSize + nNameSize + nCmapSize;
+	if( nGlyfSize )
+		nTotalSize += nLocaSize + nGlyfSize;
 	else
-		nTotalLen += nCffLen;
-	nTotalLen += nHheaLen + nHmtxLen;
-	nTotalLen += nPrepLen + nCvtLen + nFpgmLen;
-	rBuffer.resize( nTotalLen );
+		nTotalSize += nCffSize;
+	nTotalSize += nHheaSize + nHmtxSize;
+	nTotalSize += nPrepSize + nCvtSize + nFpgmSize;
+	rBuffer.resize( nTotalSize );
 
 	// fake a SFNT font directory header
 	if( nTableCount < 16 )
@@ -2194,57 +1976,69 @@ static bool GetRawFontData( const ImplFo
 	}
 
 	// get font table raw data and update the fake directory entries
-	ByteCount nOfs = nFdirLen;
+	ByteCount nOfs = nFdirSize;
 	unsigned char* pFakeEntry = &rBuffer[12];
-    eStatus = ATSFontGetTable( rFont, GetTag("cmap"), 0, nCmapLen, (void*)&rBuffer[nOfs], &nCmapLen);
-	FakeDirEntry( GetTag("cmap"), nOfs, nCmapLen, &rBuffer[0], pFakeEntry );
-	nOfs += nCmapLen;
-	if( nCvtLen ) {
-		eStatus = ATSFontGetTable( rFont, GetTag("cvt "), 0, nCvtLen, (void*)&rBuffer[nOfs], &nCvtLen);
-		FakeDirEntry( GetTag("cvt "), nOfs, nCvtLen, &rBuffer[0], pFakeEntry );
-		nOfs += nCvtLen;
-	}
-	if( nFpgmLen ) {
-		eStatus = ATSFontGetTable( rFont, GetTag("fpgm"), 0, nFpgmLen, (void*)&rBuffer[nOfs], &nFpgmLen);
-		FakeDirEntry( GetTag("fpgm"), nOfs, nFpgmLen, &rBuffer[0], pFakeEntry );
-		nOfs += nFpgmLen;
-	}
-	if( nCffLen ) {
-	    eStatus = ATSFontGetTable( rFont, GetTag("CFF "), 0, nCffLen, (void*)&rBuffer[nOfs], &nCffLen);
-		FakeDirEntry( GetTag("CFF "), nOfs, nCffLen, &rBuffer[0], pFakeEntry );
-		nOfs += nGlyfLen;
+	if( nCmapSize != pMacFont->GetFontTable( "cmap", &rBuffer[nOfs]))
+		return false;
+	FakeDirEntry( "cmap", nOfs, nCmapSize, &rBuffer[0], pFakeEntry );
+	nOfs += nCmapSize;
+	if( nCvtSize ) {
+		if( nCvtSize != pMacFont->GetFontTable( "cvt ", &rBuffer[nOfs]))
+			return false;
+		FakeDirEntry( "cvt ", nOfs, nCvtSize, &rBuffer[0], pFakeEntry );
+		nOfs += nCvtSize;
+	}
+	if( nFpgmSize ) {
+		if( nFpgmSize != pMacFont->GetFontTable( "fpgm", &rBuffer[nOfs]))
+			return false;
+		FakeDirEntry( "fpgm", nOfs, nFpgmSize, &rBuffer[0], pFakeEntry );
+		nOfs += nFpgmSize;
+	}
+	if( nCffSize ) {
+		if( nCffSize != pMacFont->GetFontTable( "CFF ", &rBuffer[nOfs]))
+			return false;
+		FakeDirEntry( "CFF ", nOfs, nCffSize, &rBuffer[0], pFakeEntry );
+		nOfs += nGlyfSize;
 	} else {
-	    eStatus = ATSFontGetTable( rFont, GetTag("glyf"), 0, nGlyfLen, (void*)&rBuffer[nOfs], &nGlyfLen);
-		FakeDirEntry( GetTag("glyf"), nOfs, nGlyfLen, &rBuffer[0], pFakeEntry );
-		nOfs += nGlyfLen;
-		eStatus = ATSFontGetTable( rFont, GetTag("loca"), 0, nLocaLen, (void*)&rBuffer[nOfs], &nLocaLen);
-		FakeDirEntry( GetTag("loca"), nOfs, nLocaLen, &rBuffer[0], pFakeEntry );
-		nOfs += nLocaLen;
-	}
-	eStatus = ATSFontGetTable( rFont, GetTag("head"), 0, nHeadLen, (void*)&rBuffer[nOfs], &nHeadLen);
-	FakeDirEntry( GetTag("head"), nOfs, nHeadLen, &rBuffer[0], pFakeEntry );
-	nOfs += nHeadLen;
-	eStatus = ATSFontGetTable( rFont, GetTag("hhea"), 0, nHheaLen, (void*)&rBuffer[nOfs], &nHheaLen);
-	FakeDirEntry( GetTag("hhea"), nOfs, nHheaLen, &rBuffer[0], pFakeEntry );
-	nOfs += nHheaLen;
-	eStatus = ATSFontGetTable( rFont, GetTag("hmtx"), 0, nHmtxLen, (void*)&rBuffer[nOfs], &nHmtxLen);
-	FakeDirEntry( GetTag("hmtx"), nOfs, nHmtxLen, &rBuffer[0], pFakeEntry );
-	nOfs += nHmtxLen;
-    eStatus = ATSFontGetTable( rFont, GetTag("maxp"), 0, nMaxpLen, (void*)&rBuffer[nOfs], &nMaxpLen);
-	FakeDirEntry( GetTag("maxp"), nOfs, nMaxpLen, &rBuffer[0], pFakeEntry );
-	nOfs += nMaxpLen;
-    eStatus = ATSFontGetTable( rFont, GetTag("name"), 0, nNameLen, (void*)&rBuffer[nOfs], &nNameLen);
-	FakeDirEntry( GetTag("name"), nOfs, nNameLen, &rBuffer[0], pFakeEntry );
-	nOfs += nNameLen;
-	if( nPrepLen ) {
-		eStatus = ATSFontGetTable( rFont, GetTag("prep"), 0, nPrepLen, (void*)&rBuffer[nOfs], &nPrepLen);
-		FakeDirEntry( GetTag("prep"), nOfs, nPrepLen, &rBuffer[0], pFakeEntry );
-		nOfs += nPrepLen;
+		if( nGlyfSize != pMacFont->GetFontTable( "glyf", &rBuffer[nOfs]))
+			return false;
+		FakeDirEntry( "glyf", nOfs, nGlyfSize, &rBuffer[0], pFakeEntry );
+		nOfs += nGlyfSize;
+		if( nLocaSize != pMacFont->GetFontTable( "loca", &rBuffer[nOfs]))
+			return false;
+		FakeDirEntry( "loca", nOfs, nLocaSize, &rBuffer[0], pFakeEntry );
+		nOfs += nLocaSize;
+	}
+	if( nHeadSize != pMacFont->GetFontTable( "head", &rBuffer[nOfs]))
+		return false;
+	FakeDirEntry( "head", nOfs, nHeadSize, &rBuffer[0], pFakeEntry );
+	nOfs += nHeadSize;
+	if( nHheaSize != pMacFont->GetFontTable( "hhea", &rBuffer[nOfs]))
+		return false;
+	FakeDirEntry( "hhea", nOfs, nHheaSize, &rBuffer[0], pFakeEntry );
+	nOfs += nHheaSize;
+	if( nHmtxSize != pMacFont->GetFontTable( "hmtx", &rBuffer[nOfs]))
+		return false;
+	FakeDirEntry( "hmtx", nOfs, nHmtxSize, &rBuffer[0], pFakeEntry );
+	nOfs += nHmtxSize;
+	if( nMaxpSize != pMacFont->GetFontTable( "maxp", &rBuffer[nOfs]))
+		return false;
+	FakeDirEntry( "maxp", nOfs, nMaxpSize, &rBuffer[0], pFakeEntry );
+	nOfs += nMaxpSize;
+	if( nNameSize != pMacFont->GetFontTable( "name", &rBuffer[nOfs]))
+		return false;
+	FakeDirEntry( "name", nOfs, nNameSize, &rBuffer[0], pFakeEntry );
+	nOfs += nNameSize;
+	if( nPrepSize ) {
+		if( nPrepSize != pMacFont->GetFontTable( "prep", &rBuffer[nOfs]))
+			return false;
+		FakeDirEntry( "prep", nOfs, nPrepSize, &rBuffer[0], pFakeEntry );
+		nOfs += nPrepSize;
 	}
 
-	DBG_ASSERT( (nOfs==nTotalLen), "AquaSalGraphics::CreateFontSubset (nOfs!=nTotalLen)");
+	DBG_ASSERT( (nOfs==nTotalSize), "AquaSalGraphics::CreateFontSubset (nOfs!=nTotalSize)");
 
-	return sal_True;
+	return true;
 }
 
 sal_Bool AquaSalGraphics::CreateFontSubset( const rtl::OUString& rToFile,
@@ -2270,7 +2064,7 @@ sal_Bool AquaSalGraphics::CreateFontSubs
 	if( bCffOnly )
 	{
 		// provide the raw-CFF data to the subsetter
-		ByteCount nCffLen = aBuffer.size();
+		const ByteCount nCffLen = aBuffer.size();
 		rInfo.LoadFont( FontSubsetInfo::CFF_FONT, &aBuffer[0], nCffLen );
 
 		// NOTE: assuming that all glyphids requested on Aqua are fully translated
@@ -2298,9 +2092,9 @@ sal_Bool AquaSalGraphics::CreateFontSubs
 	::GetTTGlobalFontInfo( pSftFont, &aTTInfo );
 	rInfo.m_nFontType   = FontSubsetInfo::SFNT_TTF;
 	rInfo.m_aPSName     = String( aTTInfo.psname, RTL_TEXTENCODING_UTF8 );
-	rInfo.m_aFontBBox	= Rectangle( Point( aTTInfo.xMin, aTTInfo.yMin ),
+	rInfo.m_aFontBBox   = Rectangle( Point( aTTInfo.xMin, aTTInfo.yMin ),
                                     Point( aTTInfo.xMax, aTTInfo.yMax ) );
-	rInfo.m_nCapHeight	= aTTInfo.yMax; // Well ...
+	rInfo.m_nCapHeight  = aTTInfo.yMax; // Well ...
 	rInfo.m_nAscent     = aTTInfo.winAscent;
 	rInfo.m_nDescent    = aTTInfo.winDescent;
 	// mac fonts usually do not have an OS2-table
@@ -2317,7 +2111,7 @@ sal_Bool AquaSalGraphics::CreateFontSubs
     // subset glyphs and get their properties
     // take care that subset fonts require the NotDef glyph in pos 0
     int nOrigCount = nGlyphCount;
-    sal_uInt16    aShortIDs[ 256 ];
+    sal_uInt16 aShortIDs[ 256 ];
     sal_uInt8 aTempEncs[ 256 ];
 
     int nNotDef = -1;
@@ -2389,7 +2183,7 @@ void AquaSalGraphics::GetGlyphWidths( co
     rUnicodeEnc.clear();
 
 	if( pFontData->IsSubsettable() )
-    {
+	{
 		ByteVector aBuffer;
 		if( !GetRawFontData( pFontData, aBuffer, NULL ) )
 			return;
@@ -2469,7 +2263,7 @@ void AquaSalGraphics::GetGlyphWidths( co
 const Ucs2SIntMap* AquaSalGraphics::GetFontEncodingVector(
 	const ImplFontData*, const Ucs2OStrMap** /*ppNonEncoded*/ )
 {
-    return NULL;
+	return NULL;
 }
 
 // -----------------------------------------------------------------------
@@ -2480,14 +2274,14 @@ const void*	AquaSalGraphics::GetEmbedFon
                               FontSubsetInfo&,
                               long* /*pDataLen*/ )
 {
-    return NULL;
+	return NULL;
 }
 
 // -----------------------------------------------------------------------
 
 void AquaSalGraphics::FreeEmbedFontData( const void* pData, long /*nDataLen*/ )
 {
-    // TODO: implementing this only makes sense when the implementation of
+	// TODO: implementing this only makes sense when the implementation of
 	//		AquaSalGraphics::GetEmbedFontData() returns non-NULL
 	(void)pData;
 	DBG_ASSERT( (pData!=NULL), "AquaSalGraphics::FreeEmbedFontData() is not implemented\n");
@@ -2498,11 +2292,12 @@ void AquaSalGraphics::FreeEmbedFontData(
 SystemFontData AquaSalGraphics::GetSysFontData( int /* nFallbacklevel */ ) const
 {
     SystemFontData aSysFontData;
-    OSStatus err;
     aSysFontData.nSize = sizeof( SystemFontData );
 
+#ifdef USE_ATSU
     // NOTE: Native ATSU font fallbacks are used, not the VCL fallbacks.
     ATSUFontID fontId; 	 
+    OSStatus err;
     err = ATSUGetAttribute( maATSUStyle, kATSUFontTag, sizeof(fontId), &fontId, 0 );
     if (err) fontId = 0;
     aSysFontData.aATSUFontID = (void *) fontId;
@@ -2524,6 +2319,7 @@ SystemFontData AquaSalGraphics::GetSysFo
     } else {
         aSysFontData.bVerticalCharacterType = false;
     }
+#endif // USE_ATSU
 
     aSysFontData.bAntialias = !mbNonAntialiasedText;
 
@@ -2753,4 +2549,3 @@ bool XorEmulation::UpdateTarget()
 }
 
 // =======================================================================
-

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdiutils.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdiutils.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdiutils.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salgdiutils.cxx Wed Mar 19 10:14:42 2014
@@ -175,7 +175,7 @@ void AquaSalGraphics::SetState()
 
 bool AquaSalGraphics::CheckContext()
 {
-    if( mbWindow && mpFrame != NULL )
+    if( mbWindow && mpFrame && mpFrame->getNSWindow() )
     {
         const unsigned int nWidth = mpFrame->maGeometry.nWidth;
         const unsigned int nHeight = mpFrame->maGeometry.nHeight;

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salnativewidgets.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salnativewidgets.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salnativewidgets.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/gdi/salnativewidgets.cxx Wed Mar 19 10:14:42 2014
@@ -710,11 +710,11 @@ sal_Bool AquaSalGraphics::drawNativeCont
                 // Perhaps some other HIThemeButtonDrawInfo setting would do the trick ?
                 
                 CGContextSetShouldAntialias( mrContext, true );
-                float aGrey[] = { 0.45, 0.45, 0.45, 1.0 };
+                CGFloat aGrey[] = { 0.45, 0.45, 0.45, 1.0 };
                 CGContextSetFillColor( mrContext, aGrey );
                 CGContextBeginPath( mrContext );
-                float x = rc.origin.x + rc.size.width;
-                float y = rc.origin.y;
+                CGFloat x = rc.origin.x + rc.size.width;
+                CGFloat y = rc.origin.y;
                 CGContextMoveToPoint( mrContext, x, y );
                 y += rc.size.height;
                 CGContextAddLineToPoint( mrContext, x, y );

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframe.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframe.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframe.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframe.cxx Wed Mar 19 10:14:42 2014
@@ -207,9 +207,9 @@ void AquaSalFrame::initWindowAndView()
     else
         [mpNSWindow setAcceptsMouseMovedEvents: YES];
     [mpNSWindow setHasShadow: YES];
-    [mpNSWindow setDelegate: mpNSWindow];
+    [mpNSWindow setDelegate: static_cast<id<NSWindowDelegate> >(mpNSWindow)];
     
-    const NSRect aRect = NSMakeRect( 0,0, maGeometry.nWidth, maGeometry.nHeight );
+    const NSRect aRect = { NSZeroPoint, NSMakeSize( maGeometry.nWidth, maGeometry.nHeight )};
     mnTrackingRectTag = [mpNSView addTrackingRect: aRect owner: mpNSView userData: nil assumeInside: NO];
     
     maSysData.mpNSView = mpNSView;
@@ -745,7 +745,7 @@ void AquaSalFrame::ShowFullScreen( sal_B
         // which is always on index 0 according to documentation
         bool bHideMenu = (nDisplay == 0);
         
-        NSRect aNewContentRect = { { 0, 0 }, { 0, 0 } };
+        NSRect aNewContentRect = NSZeroRect;
         // get correct screen
         NSScreen* pScreen = nil;
         NSArray* pScreens = [NSScreen screens];
@@ -1191,7 +1191,7 @@ static Color getColor( NSColor* pSysColo
         NSColor* pRBGColor = [pSysColor colorUsingColorSpaceName: NSDeviceRGBColorSpace device: [pWin deviceDescription]];
         if( pRBGColor )
         {
-            float r = 0, g = 0, b = 0, a = 0;
+            CGFloat r = 0, g = 0, b = 0, a = 0;
             [pRBGColor getRed: &r green: &g blue: &b alpha: &a];
             aRet = Color( int(r*255.999), int(g*255.999), int(b*255.999) );
             /*
@@ -1648,7 +1648,7 @@ void AquaSalFrame::UpdateFrameGeometry()
     // release old track rect
     [mpNSView removeTrackingRect: mnTrackingRectTag];
     // install the new track rect
-    NSRect aTrackRect = { { 0, 0 }, aContentRect.size };
+    NSRect aTrackRect = { NSZeroPoint, aContentRect.size };
     mnTrackingRectTag = [mpNSView addTrackingRect: aTrackRect owner: mpNSView userData: nil assumeInside: NO];
 
     // convert to vcl convention

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframeview.mm
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframeview.mm?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframeview.mm (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salframeview.mm Wed Mar 19 10:14:42 2014
@@ -136,9 +136,9 @@ static const struct ExceptionalKey
 
 static AquaSalFrame* getMouseContainerFrame()
 {
-    int nWindows = 0;
+    NSInteger nWindows = 0;
     NSCountWindows( &nWindows );
-    int* pWindows = (int*)alloca( nWindows * sizeof(int) );
+    NSInteger* pWindows = (NSInteger*)alloca( nWindows * sizeof(NSInteger) );
     // note: NSWindowList is supposed to be in z-order front to back
     NSWindowList( nWindows, pWindows );
     AquaSalFrame* pDispatchFrame = NULL;
@@ -461,7 +461,7 @@ static AquaSalFrame* getMouseContainerFr
     if( mpFrame && AquaSalFrame::isAlive( mpFrame ) )
     {
         // FIXME: does this leak the returned NSCursor of getCurrentCursor ?
-        const NSRect aRect = NSMakeRect( 0, 0, mpFrame->maGeometry.nWidth, mpFrame->maGeometry.nHeight);
+        const NSRect aRect = { NSZeroPoint, NSMakeSize( mpFrame->maGeometry.nWidth, mpFrame->maGeometry.nHeight) };
         [self addCursorRect: aRect cursor: mpFrame->getCurrentCursor()];
     }
 }
@@ -1636,7 +1636,7 @@ private:
     return nil;
 }
 
-- (unsigned int)characterIndexForPoint:(NSPoint)thePoint
+- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint
 {
     (void)thePoint;
     // FIXME
@@ -1716,9 +1716,9 @@ private:
     return [ super accessibleContext ];
 }
 
--(NSView*)viewElementForParent
+-(NSWindow*)windowForParent
 {
-    return mpFrame->getNSView();
+    return mpFrame->getNSWindow();
 }
 
 -(void)registerMouseEventListener: (id)theListener

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salmenu.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salmenu.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salmenu.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salmenu.cxx Wed Mar 19 10:14:42 2014
@@ -255,7 +255,7 @@ AquaSalMenu::AquaSalMenu( bool bMenuBar 
     if( ! mbMenuBar )
     {
         mpMenu = [[SalNSMenu alloc] initWithMenu: this];
-        [mpMenu setDelegate: mpMenu];
+        [mpMenu setDelegate: (id<NSMenuDelegate>)mpMenu];
     }
     else
     {
@@ -868,7 +868,7 @@ void AquaSalMenu::RemoveMenuBarButton( s
 
 Rectangle AquaSalMenu::GetMenuBarButtonRectPixel( sal_uInt16 i_nItemId, SalFrame* i_pReferenceFrame )
 {
-    if( GetSalData()->mnSystemVersion < VER_LEOPARD )
+    if( GetSalData()->mnSystemVersion < OSX_VER_LEOPARD )
         return Rectangle( Point( -1, -1 ), Size( 1, 1 ) );
     
     if( ! i_pReferenceFrame || ! AquaSalFrame::isAlive( static_cast<AquaSalFrame*>(i_pReferenceFrame) ) )

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salnsmenu.mm
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salnsmenu.mm?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salnsmenu.mm (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salnsmenu.mm Wed Mar 19 10:14:42 2014
@@ -138,7 +138,7 @@
         for( size_t i = 0; i < rButtons.size(); ++i )
         {
             const Size aPixSize = rButtons[i].maButton.maImage.GetSizePixel();
-            const NSRect aFromRect = NSMakeRect( 0, 0, aPixSize.Width(), aPixSize.Height());
+            const NSRect aFromRect = { NSZeroPoint, NSMakeSize( aPixSize.Width(), aPixSize.Height()) };
             aImgRect.origin.y = floor((aFrame.size.height - aFromRect.size.height)/2);
             aImgRect.size = aFromRect.size;
             if( rButtons[i].mpNSImage )
@@ -161,7 +161,7 @@
         for( size_t i = 0; i < rButtons.size(); ++i )
         {
             const Size aPixSize = rButtons[i].maButton.maImage.GetSizePixel();
-            const NSRect aFromRect = NSMakeRect( 0, 0, aPixSize.Width(), aPixSize.Height());
+            const NSRect aFromRect = { NSZeroPoint, NSMakeSize( aPixSize.Width(), aPixSize.Height()) };
             aImgRect.origin.y = (aFrame.size.height - aFromRect.size.height)/2;
             aImgRect.size = aFromRect.size;
             if( aMousePt.x >= aImgRect.origin.x && aMousePt.x <= (aImgRect.origin.x+aImgRect.size.width) &&

Modified: openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salobj.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salobj.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salobj.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/aqua/source/window/salobj.cxx Wed Mar 19 10:14:42 2014
@@ -47,7 +47,7 @@ AquaSalObject::AquaSalObject( AquaSalFra
     maSysData.nSize = sizeof( maSysData );
     maSysData.mpNSView = NULL;
     
-    NSRect aInitFrame = { { 0, 0 }, { 20, 20 } };
+    NSRect aInitFrame = { NSZeroPoint, { 20, 20 } };
     mpClipView = [[NSClipView alloc] initWithFrame: aInitFrame ];
     if( mpClipView )
     {
@@ -168,7 +168,7 @@ void AquaSalObject::SetPosSize( long nX,
 
 void AquaSalObject::setClippedPosSize()
 {
-    NSRect aViewRect = NSMakeRect( 0, 0, mnWidth, mnHeight);
+    NSRect aViewRect = { NSZeroPoint, NSMakeSize( mnWidth, mnHeight) };
     if( maSysData.mpNSView )
     {
         NSView* pNSView = maSysData.mpNSView;
@@ -176,7 +176,7 @@ void AquaSalObject::setClippedPosSize()
     }
     
     NSRect aClipViewRect = NSMakeRect( mnX, mnY, mnWidth, mnHeight);
-    NSPoint aClipPt = NSMakePoint( 0, 0);
+    NSPoint aClipPt = NSZeroPoint;
     if( mbClip )
     {
         aClipViewRect.origin.x += mnClipX;

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aqua11ywrapper.h
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aqua11ywrapper.h?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aqua11ywrapper.h (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aqua11ywrapper.h Wed Mar 19 10:14:42 2014
@@ -90,7 +90,7 @@ struct ReferenceWrapper
 // Wrapper-specific
 -(void)setActsAsRadioGroup:(BOOL)actsAsRadioGroup;
 -(BOOL)actsAsRadioGroup;
--(NSView *)viewElementForParent;
+-(NSWindow*)windowForParent;
 -(id)initWithAccessibleContext: (::com::sun::star::uno::Reference < ::com::sun::star::accessibility::XAccessibleContext >) anAccessibleContext;
 -(void) setDefaults: (::com::sun::star::uno::Reference < ::com::sun::star::accessibility::XAccessibleContext >) rxAccessibleContext;
 -(void) dealloc;

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aquavcltypes.h
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aquavcltypes.h?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aquavcltypes.h (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/aqua/aquavcltypes.h Wed Mar 19 10:14:42 2014
@@ -29,4 +29,5 @@
 #import <AppKit/NSEvent.h>
 #include "postmac.h"
 
-#endif _AQUAVCLTYPES_H
+#endif // _AQUAVCLTYPES_H
+

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/aqua/saldata.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/aqua/saldata.hxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/aqua/saldata.hxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/aqua/saldata.hxx Wed Mar 19 10:14:42 2014
@@ -58,8 +58,12 @@ class SystemFontList;
 
 #define SAL_CLIPRECT_COUNT 16
 
-#define VER_TIGER   0x1040
-#define VER_LEOPARD 0x1050
+#define OSX_VER_TIGER     0x1040
+#define OSX_VER_LEOPARD   0x1050
+#define OSX_VER_SNOW_LEO  0x1060
+#define OSX_VER_LION      0x1070
+#define OSX_VER_MOUNTLION 0x1080
+#define OSX_VER_MAVERICKS 0x1070
 
 // -----------
 // - SalData -
@@ -102,7 +106,7 @@ struct SalData
 
     bool			                              mbIsScrollbarDoubleMax;	// TODO: support DoubleMin and DoubleBoth too
     SInt32                                        mnSystemVersion;          // Store System Version
-    MainController*                               mpMainController;         // Apple Remote
+    AppleRemoteMainController*                    mpAppleRemoteMainController;
     
     NSObject*                                     mpDockIconClickHandler;
     long                                          mnDPIX;           // #i100617# read DPI only once per office life

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salframeview.h
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salframeview.h?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salframeview.h (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salframeview.h Wed Mar 19 10:14:42 2014
@@ -26,7 +26,7 @@
 
 #include "aqua/aqua11ywrapper.h"
 
-@interface SalFrameWindow : NSWindow
+@interface SalFrameWindow : NSWindow<NSWindowDelegate>
 {
     AquaSalFrame*       mpFrame;
 	id mDraggingDestinationHandler;
@@ -42,6 +42,9 @@
 -(void)windowDidMiniaturize: (NSNotification*)pNotification;
 -(void)windowDidDeminiaturize: (NSNotification*)pNotification;
 -(BOOL)windowShouldClose: (NSNotification*)pNotification;
+//-(void)willEncodeRestorableState:(NSCoder*)pCoderState;
+//-(void)didDecodeRestorableState:(NSCoder*)pCoderState;
+//-(void)windowWillEnterVersionBrowser:(NSNotification*)pNotification;
 -(void)dockMenuItemTriggered: (id)sender;
 -(AquaSalFrame*)getSalFrame;
 -(BOOL)containsMouse;
@@ -175,7 +178,7 @@
 -(void)resetCursorRects;
 -(::com::sun::star::accessibility::XAccessibleContext *)accessibleContext;
 -(id)parentAttribute;
--(NSView *)viewElementForParent;
+-(NSWindow*)windowForParent;
 /*
   Event hook for D&D service.
 

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salgdi.h
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salgdi.h?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salgdi.h (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/aqua/salgdi.h Wed Mar 19 10:14:42 2014
@@ -40,30 +40,41 @@
 class AquaSalFrame;
 class AquaSalBitmap;
 class ImplDevFontAttributes;
+class ImplMacTextStyle;
 
-class CGRect;
+struct CGRect;
+
+typedef std::vector<unsigned char> ByteVector;
+
+#ifndef CGFLOAT_TYPE
+typedef float CGFloat;
+#endif
 
 // mac specific physically available font face
 class ImplMacFontData : public ImplFontData
 {
 public:
-	ImplMacFontData( const ImplDevFontAttributes&, ATSUFontID );
-
-    virtual ~ImplMacFontData();
+	ImplMacFontData( const ImplDevFontAttributes&, sal_IntPtr nFontID );
+	virtual ~ImplMacFontData();
 
-    virtual ImplFontData*   Clone() const;
-    virtual ImplFontEntry*  CreateFontInstance( ImplFontSelectData& ) const;
+	virtual ImplFontData*   Clone() const = 0;
+	virtual ImplFontEntry*  CreateFontInstance( ImplFontSelectData& ) const;
 	virtual sal_IntPtr      GetFontId() const;
+
+	virtual ImplMacTextStyle* CreateMacTextStyle( const ImplFontSelectData& ) const = 0;
+	virtual int             GetFontTable( const char pTagName[5], unsigned char* ) const = 0;
     
-    const ImplFontCharMap*	GetImplFontCharMap() const;
+	const ImplFontCharMap*	GetImplFontCharMap() const;
 	bool					HasChar( sal_uInt32 cChar ) const;
 
 	void					ReadOs2Table() const;
 	void					ReadMacCmapEncoding() const;
 	bool					HasCJKSupport() const;
 
+protected:
+	ImplMacFontData( const ImplMacFontData&);
 private:
-    const ATSUFontID			mnFontId;
+	const sal_IntPtr			mnFontId;
 	mutable const ImplFontCharMap*	mpCharMap;
 	mutable bool				mbOs2Read;		 // true if OS2-table related info is valid
 	mutable bool				mbHasOs2Table;
@@ -77,11 +88,56 @@ class RGBAColor
 public:
 	RGBAColor( SalColor );
 	RGBAColor( float fRed, float fGreen, float fBlue, float fAlpha ); //NOTUSEDYET
-	const float* AsArray() const	{ return &mfRed; }
-	bool IsVisible() const			{ return (mfAlpha > 0); }
-	void SetAlpha( float fAlpha )	{ mfAlpha = fAlpha; }
+	void SetAlpha( float fAlpha ) { mfRGBA[3] = fAlpha; }
+
+	bool IsVisible() const        { return (mfRGBA[3] > 0); }
+	const CGFloat* AsArray() const  { return mfRGBA; }
+	CGFloat GetRed() const   { return mfRGBA[0]; }
+	CGFloat GetGreen() const { return mfRGBA[1]; }
+	CGFloat GetBlue() const  { return mfRGBA[2]; }
+	CGFloat GetAlpha() const { return mfRGBA[3]; }
 private:
-	float mfRed, mfGreen, mfBlue, mfAlpha;
+	CGFloat mfRGBA[4]; // RGBA
+};
+
+// --------------------
+// - ImplMacTextStyle -
+// --------------------
+class ImplMacTextStyle
+{
+public:
+	explicit		ImplMacTextStyle( const ImplFontSelectData& );
+	virtual			~ImplMacTextStyle( void );
+
+	virtual SalLayout* GetTextLayout( void ) const = 0;
+
+	virtual void	GetFontMetric( float fPDIY, ImplFontMetricData& ) const = 0;
+	virtual bool	GetGlyphBoundRect( sal_GlyphId, Rectangle& ) const = 0;
+	virtual bool	GetGlyphOutline( sal_GlyphId, basegfx::B2DPolyPolygon& ) const = 0;
+
+	virtual void	SetTextColor( const RGBAColor& ) = 0;
+
+//###protected:
+	const ImplMacFontData*	mpFontData;
+	/// workaround to prevent overflows for huge font sizes
+	float				mfFontScale;
+	/// <1.0: font is squeezed, >1.0 font is stretched, else 1.0
+	float				mfFontStretch;
+	/// text rotation in radian
+	float				mfFontRotation;
+};
+
+// ------------------
+// - SystemFontList -
+// TODO: move into cross-platform headers
+// ------------------
+class SystemFontList
+{
+public:
+	virtual ~SystemFontList( void );
+
+	virtual void	AnnounceFonts( ImplDevFontList& ) const = 0;
+	virtual ImplMacFontData* GetFontDataFromId( sal_IntPtr nFontId ) const = 0;
 };
 
 // -------------------
@@ -90,6 +146,7 @@ private:
 class AquaSalGraphics : public SalGraphics
 {
     friend class ATSLayout;
+    friend class CTLayout;
 protected:
     AquaSalFrame*                           mpFrame;
 	CGLayerRef								mxLayer;	// Quartz graphics layer
@@ -116,18 +173,12 @@ protected:
     /// brush color RGBA
     RGBAColor                               maFillColor;
 
-    // Device Font settings
+	// Device Font settings
  	const ImplMacFontData*                  mpMacFontData;
-    /// ATSU style object which carries all font attributes
-    ATSUStyle			                    maATSUStyle;
-    /// text rotation as ATSU angle
-    Fixed                                   mnATSUIRotation;
-    /// workaround to prevent ATSU overflows for huge font sizes
-    float                                   mfFontScale;
-    /// <1.0: font is squeezed, >1.0 font is stretched, else 1.0
-    float                                   mfFontStretch;
-    /// allows text to be rendered without antialiasing
-    bool                                    mbNonAntialiasedText;
+	ImplMacTextStyle*                       mpMacTextStyle;
+	RGBAColor                               maTextColor;
+	// allows text to be rendered without antialiasing
+	bool                                    mbNonAntialiasedText;
 
 	// Graphics types
     
@@ -164,7 +215,9 @@ public:
     bool                CheckContext();
     void                UpdateWindow( NSRect& ); // delivered in NSView coordinates
 	void				RefreshRect( const CGRect& );
+#ifndef __x86_64__ // on 64bit OSX NSRect is typedef'ed as CGRect
 	void				RefreshRect( const NSRect& );
+#endif
 	void				RefreshRect(float lX, float lY, float lWidth, float lHeight);
 
     void                SetState();
@@ -396,23 +449,28 @@ inline void AquaSalGraphics::RefreshRect
 	RefreshRect( rRect.origin.x, rRect.origin.y, rRect.size.width, rRect.size.height );
 }
 
+#ifndef __x86_64__ // on 64bit OSX NSRect is typedef'ed as CGRect
 inline void AquaSalGraphics::RefreshRect( const NSRect& rRect )
 {
 	RefreshRect( rRect.origin.x, rRect.origin.y, rRect.size.width, rRect.size.height );
 }
+#endif
 
 inline RGBAColor::RGBAColor( SalColor nSalColor )
-:	mfRed( SALCOLOR_RED(nSalColor) * (1.0/255))
-,	mfGreen( SALCOLOR_GREEN(nSalColor) * (1.0/255))
-,	mfBlue( SALCOLOR_BLUE(nSalColor) * (1.0/255))
-,	mfAlpha( 1.0 )	// opaque
-{}
+{
+	mfRGBA[0] = SALCOLOR_RED(  nSalColor) * (1.0/255);
+	mfRGBA[1] = SALCOLOR_GREEN(nSalColor) * (1.0/255);
+	mfRGBA[2] = SALCOLOR_BLUE( nSalColor) * (1.0/255);
+	mfRGBA[3] = 1.0; // default to opaque
+}
 
 inline RGBAColor::RGBAColor( float fRed, float fGreen, float fBlue, float fAlpha )
-:	mfRed( fRed )
-,	mfGreen( fGreen )
-,	mfBlue( fBlue )
-,	mfAlpha( fAlpha )
-{}
+{
+	mfRGBA[0] = fRed;
+	mfRGBA[1] = fGreen;
+	mfRGBA[2] = fBlue;
+	mfRGBA[3] = fAlpha;
+}
 
 #endif // _SV_SALGDI_H
+

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/aqua/vclnsapp.h
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/aqua/vclnsapp.h?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/aqua/vclnsapp.h (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/aqua/vclnsapp.h Wed Mar 19 10:14:42 2014
@@ -40,6 +40,7 @@ class AquaSalFrame;
 @interface VCL_NSApplication : NSApplication
 {
 }
+-(void)applicationDidFinishLaunching:(NSNotification*)aNotification;
 -(void)sendEvent:(NSEvent*)pEvent;
 -(void)sendSuperEvent:(NSEvent*)pEvent;
 -(NSMenu*)applicationDockMenu:(NSApplication *)sender;

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/vcl/gfxlink.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/vcl/gfxlink.hxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/vcl/gfxlink.hxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/vcl/gfxlink.hxx Wed Mar 19 10:14:42 2014
@@ -106,11 +106,15 @@ enum GfxLinkType
 	GFX_LINK_TYPE_NATIVE_MET	= 7,	// Don't forget to update the following defines
 	GFX_LINK_TYPE_NATIVE_PCT	= 8,	// Don't forget to update the following defines
 	GFX_LINK_TYPE_NATIVE_SVG	= 9,	// Don't forget to update the following defines
+
+    // #15508# added BMP type support
+    GFX_LINK_TYPE_NATIVE_BMP    = 10,   // Don't forget to update the following defines
+
 	GFX_LINK_TYPE_USER			= 0xffff
 };
 
 #define GFX_LINK_FIRST_NATIVE_ID	GFX_LINK_TYPE_NATIVE_GIF
-#define GFX_LINK_LAST_NATIVE_ID		GFX_LINK_TYPE_NATIVE_SVG
+#define GFX_LINK_LAST_NATIVE_ID		GFX_LINK_TYPE_NATIVE_BMP
 
 // -----------
 // - GfxLink -

Modified: openoffice/branches/alg_writerframes/main/vcl/inc/vcl/vclevent.hxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/inc/vcl/vclevent.hxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/inc/vcl/vclevent.hxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/inc/vcl/vclevent.hxx Wed Mar 19 10:14:42 2014
@@ -154,6 +154,7 @@ namespace com { namespace sun { namespac
 #define VCLEVENT_ITEM_COLLAPSED             1175
 // <--
 #define VCLEVENT_DROPDOWN_PRE_OPEN          1176
+#define VCLEVENT_DROPDOWN_SELECT			1177
 #define VCLEVENT_LISTBOX_FOCUSITEMCHANGED	1180
 // #define VCLEVENT_EDIT_CARETCHANGED  		xxxx	// IA2 CWS. MT: VCL only has selection API - difference for selection_changed vs. caret_changed is handled in accessibility wrapper since OOo 3.2
 

Modified: openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salgdi3.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salgdi3.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salgdi3.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salgdi3.cxx Wed Mar 19 10:14:42 2014
@@ -1541,7 +1541,7 @@ sal_Bool Os2SalGraphics::CreateFontSubse
 		{
 			// TODO: remap notdef glyph if needed
 			// TODO: use GDI's GetGlyphIndices instead? Does it handle GSUB properly?
-			sal_uInt32 aGlyphIdx = pGlyphIds[i] & GF_IDXMASK;
+			sal_uInt32 aGlyphId = pGlyphIds[i] & GF_IDXMASK;
 			if( pGlyphIds[i] & GF_ISCHAR ) // remaining pseudo-glyphs need to be translated
 				aGlyphId = pImplFontCharMap->GetGlyphIndex( aGlyphId );
 			if( (pGlyphIds[i] & (GF_ROTMASK|GF_GSUB)) != 0)	// TODO: vertical substitution

Modified: openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salprn.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salprn.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salprn.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/os2/source/gdi/salprn.cxx Wed Mar 19 10:14:42 2014
@@ -1671,25 +1671,9 @@ sal_Bool Os2SalPrinter::StartJob( const 
 		lType = OD_QUEUED;
 	}
 
-#if 0 // YD FIXME
-	// Set comment (AppName nur bis zum 1. Space-Zeichen nehmen)
-	const xub_Unicode*	pComment = rAppName;
-	USHORT			nCommentLen = 0;
-	memset( maCommentBuf, 0, sizeof( maCommentBuf ) );
-	while ( (nCommentLen < 32) &&
-			(((*pComment >= 'a') && (*pComment <= 'z')) ||
-			 ((*pComment >= 'A') && (*pComment <= 'Z')) ||
-			 ((*pComment >= '0') && (*pComment <= '9')) ||
-			 (*pComment == '-')))
-	{
-		maCommentBuf[nCommentLen] = (char)(*pComment);
-		nCommentLen++;
-		pComment++;
-	}
-	aDevOpenStruc.pszComment = (PSZ)maCommentBuf;
-#endif
-	ByteString jobName( rJobName, gsl_getSystemTextEncoding());
-	aDevOpenStruc.pszComment = (PSZ)jobName.GetBuffer();
+	// Set comment using application name
+	ByteString appName( rAppName, gsl_getSystemTextEncoding());
+	aDevOpenStruc.pszComment = (PSZ)appName.GetBuffer();
 
 	// Kopien
 	if ( nCopies > 1 )
@@ -1740,6 +1724,7 @@ sal_Bool Os2SalPrinter::StartJob( const 
 #endif
 
 	// JobName ermitteln und Job starten
+	ByteString jobName( rJobName, gsl_getSystemTextEncoding());
 	PSZ pszJobName = NULL;
 	int nJobNameLen = 0;
 	if ( jobName.Len() > 0 )

Modified: openoffice/branches/alg_writerframes/main/vcl/source/app/svapp.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/app/svapp.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/app/svapp.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/app/svapp.cxx Wed Mar 19 10:14:42 2014
@@ -2060,8 +2060,8 @@ sal_Bool InitAccessBridge( sal_Bool bSho
 {
     sal_Bool bRet = true;
 
-// Disable Java bridge on UNIX
-#if defined UNX
+// Disable Java bridge on UNIX and OS/2
+#ifndef WNT
     (void) bShowCancel; // unsued
     (void) rCancelled; // unused
 #else

Modified: openoffice/branches/alg_writerframes/main/vcl/source/control/combobox.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/control/combobox.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/control/combobox.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/control/combobox.cxx Wed Mar 19 10:14:42 2014
@@ -475,7 +475,7 @@ IMPL_LINK( ComboBox, ImplSelectHdl, void
 }
 IMPL_LINK( ComboBox, ImplListItemSelectHdl,  void*, EMPTYARG )
 {
-    ImplCallEventListeners( VCLEVENT_LISTBOX_SELECT );
+    ImplCallEventListeners( VCLEVENT_DROPDOWN_SELECT );
 	return 1;
 }
 // -----------------------------------------------------------------------

Modified: openoffice/branches/alg_writerframes/main/vcl/source/control/field.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/control/field.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/control/field.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/control/field.cxx Wed Mar 19 10:14:42 2014
@@ -1585,8 +1585,11 @@ XubString MetricFormatter::CreateFieldTe
     if( meUnit == FUNIT_CUSTOM )
         aStr += maCustomUnitText;
     else
+    {
+        if ( meUnit != FUNIT_NONE )
+            aStr += xub_Unicode( ' ' );
         aStr += ImplMetricToString( meUnit );
-
+    }
     return aStr;
 }
 

Modified: openoffice/branches/alg_writerframes/main/vcl/source/control/lstbox.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/control/lstbox.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/control/lstbox.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/control/lstbox.cxx Wed Mar 19 10:14:42 2014
@@ -258,7 +258,7 @@ IMPL_LINK( ListBox, ImplFocusHdl, void *
 }
 IMPL_LINK( ListBox, ImplListItemSelectHdl, void*, EMPTYARG )
 {
-    ImplCallEventListeners( VCLEVENT_LISTBOX_SELECT );
+    ImplCallEventListeners( VCLEVENT_DROPDOWN_SELECT );
 	return 1;
 }
 

Modified: openoffice/branches/alg_writerframes/main/vcl/source/control/menubtn.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/control/menubtn.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/control/menubtn.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/control/menubtn.cxx Wed Mar 19 10:14:42 2014
@@ -161,7 +161,9 @@ void MenuButton::MouseButtonDown( const 
 	{
 	    // if the separated dropdown symbol is hit,
 	    // execute the popup immediately
-	    if( ! ImplGetSymbolRect().IsInside( rMEvt.GetPosPixel() ) )
+        if ( ImplGetSymbolRect().IsEmpty() || 
+            ( PushButton::ImplHitTestPushButton( this, rMEvt.GetPosPixel() ) && 
+            rMEvt.GetPosPixel().X() < ImplGetSymbolRect().Left() ) )
 	    {
             if ( !mpMenuTimer )
             {

Modified: openoffice/branches/alg_writerframes/main/vcl/source/gdi/bitmapex.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/gdi/bitmapex.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/gdi/bitmapex.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/gdi/bitmapex.cxx Wed Mar 19 10:14:42 2014
@@ -1251,54 +1251,74 @@ BitmapEx VCL_DLLPUBLIC createBlendFrame(
             long x(0);
             long y(0);
 
-            // x == 0, y == 0
-            pContent->SetPixel(y, x, aColorTopLeft);
-            pAlpha->SetPixelIndex(y, x, nAlpha);
+            // x == 0, y == 0, top-left corner
+            pContent->SetPixel(0, 0, aColorTopLeft);
+            pAlpha->SetPixelIndex(0, 0, nAlpha);
 
-            for(x = 1; x < nW - 1; x++) // y == 0
+            // y == 0, top line left to right
+            for(x = 1; x < nW - 1; x++) 
             {
                 Color aMix(aColorTopLeft);
 
                 aMix.Merge(aColorTopRight, 255 - sal_uInt8((x * 255) / nW));
-                pContent->SetPixel(y, x, aMix);
-                pAlpha->SetPixelIndex(y, x, nAlpha);
+                pContent->SetPixel(0, x, aMix);
+                pAlpha->SetPixelIndex(0, x, nAlpha);
             }
 
-            // x == nW - 1, y == 0
-            pContent->SetPixel(y, x, aColorTopRight);
-            pAlpha->SetPixelIndex(y, x, nAlpha);
+            // x == nW - 1, y == 0, top-right corner
+            // #123690# Caution! When nW is 1, x == nW is possible (!)
+            if(x < nW)
+            {
+                pContent->SetPixel(0, x, aColorTopRight);
+                pAlpha->SetPixelIndex(0, x, nAlpha);
+            }
 
-            for(y = 1; y < nH - 1; y++) // x == 0 and nW - 1
+            // x == 0 and nW - 1, left and right line top-down
+            for(y = 1; y < nH - 1; y++) 
             {
                 Color aMixA(aColorTopLeft);
-                Color aMixB(aColorTopRight);
 
                 aMixA.Merge(aColorBottomLeft, 255 - sal_uInt8((y * 255) / nH));
                 pContent->SetPixel(y, 0, aMixA);
                 pAlpha->SetPixelIndex(y, 0, nAlpha);
 
-                aMixB.Merge(aColorBottomRight, 255 - sal_uInt8((y * 255) / nH));
-                pContent->SetPixel(y, nW - 1, aMixB);
-                pAlpha->SetPixelIndex(y, nW - 1, nAlpha);
+                // #123690# Caution! When nW is 1, x == nW is possible (!)
+                if(x < nW)
+                {
+                    Color aMixB(aColorTopRight);
+
+                    aMixB.Merge(aColorBottomRight, 255 - sal_uInt8((y * 255) / nH));
+                    pContent->SetPixel(y, x, aMixB);
+                    pAlpha->SetPixelIndex(y, x, nAlpha);
+                }
             }
 
-            x = 0; // x == 0, y == nH - 1
-            pContent->SetPixel(y, x, aColorBottomLeft);
-            pAlpha->SetPixelIndex(y, x, nAlpha);
-
-            for(x = 1; x < nW - 1; x++) // y == nH - 1
+            // #123690# Caution! When nH is 1, y == nH is possible (!)
+            if(y < nH)
             {
-                Color aMix(aColorBottomLeft);
+                // x == 0, y == nH - 1, bottom-left corner
+                pContent->SetPixel(y, 0, aColorBottomLeft);
+                pAlpha->SetPixelIndex(y, 0, nAlpha);
 
-                aMix.Merge(aColorBottomRight, 255 - sal_uInt8(((x - 0)* 255) / nW));
-                pContent->SetPixel(y, x, aMix);
-                pAlpha->SetPixelIndex(y, x, nAlpha);
+                // y == nH - 1, bottom line left to right
+                for(x = 1; x < nW - 1; x++) 
+                {
+                    Color aMix(aColorBottomLeft);
+
+                    aMix.Merge(aColorBottomRight, 255 - sal_uInt8(((x - 0)* 255) / nW));
+                    pContent->SetPixel(y, x, aMix);
+                    pAlpha->SetPixelIndex(y, x, nAlpha);
+                }
+
+                // x == nW - 1, y == nH - 1, bottom-right corner
+                // #123690# Caution! When nW is 1, x == nW is possible (!)
+                if(x < nW)
+                {
+                    pContent->SetPixel(y, x, aColorBottomRight);
+                    pAlpha->SetPixelIndex(y, x, nAlpha);
+                }
             }
 
-            // x == nW - 1, y == nH - 1
-            pContent->SetPixel(y, x, aColorBottomRight);
-            pAlpha->SetPixelIndex(y, x, nAlpha);
-
             aContent.ReleaseAccess(pContent);
             aAlpha.ReleaseAccess(pAlpha);
 

Modified: openoffice/branches/alg_writerframes/main/vcl/source/gdi/dibtools.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/gdi/dibtools.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/gdi/dibtools.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/gdi/dibtools.cxx Wed Mar 19 10:14:42 2014
@@ -419,12 +419,6 @@ bool ImplReadDIBBits(SvStream& rIStm, DI
     // Read data
 	if(bNative)
 	{
-		// true color DIB's can have a (optimization) palette
-		if(rHeader.nColsUsed && 8 < rHeader.nBitCount)
-        {
-			rIStm.SeekRel(rHeader.nColsUsed * ((rHeader.nSize != DIBCOREHEADERSIZE ) ? 4 : 3));
-        }
-
 		rIStm.Read(rAcc.GetBuffer(), rHeader.nHeight * nAlignedWidth);
 	}
 	else
@@ -460,12 +454,6 @@ bool ImplReadDIBBits(SvStream& rIStm, DI
 			const long nHeight(rHeader.nHeight);
 			sal_uInt8* pBuf = new sal_uInt8[nAlignedWidth];
 
-			// true color DIB's can have a (optimization) palette
-			if(rHeader.nColsUsed && 8 < rHeader.nBitCount)
-            {
-				rIStm.SeekRel(rHeader.nColsUsed * ((rHeader.nSize != DIBCOREHEADERSIZE ) ? 4 : 3));
-            }
-
 			const long nI(bTopDown ? 1 : -1);
 			long nY(bTopDown ? 0 : nHeight - 1);
 			long nCount(nHeight);

Modified: openoffice/branches/alg_writerframes/main/vcl/source/gdi/gfxlink.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/gdi/gfxlink.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/gdi/gfxlink.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/gdi/gfxlink.cxx Wed Mar 19 10:14:42 2014
@@ -248,6 +248,10 @@ sal_Bool GfxLink::LoadNative( Graphic& r
 			switch( meType )
 			{
 				case( GFX_LINK_TYPE_NATIVE_GIF ): nCvtType = CVT_GIF; break;
+
+                // #15508# added BMP type for better exports (reload when swapped - checked, works)
+                case( GFX_LINK_TYPE_NATIVE_BMP ): nCvtType = CVT_BMP; break;
+
 				case( GFX_LINK_TYPE_NATIVE_JPG ): nCvtType = CVT_JPG; break;
 				case( GFX_LINK_TYPE_NATIVE_PNG ): nCvtType = CVT_PNG; break;
 				case( GFX_LINK_TYPE_NATIVE_TIF ): nCvtType = CVT_TIF; break;

Modified: openoffice/branches/alg_writerframes/main/vcl/source/gdi/impgraph.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/gdi/impgraph.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/gdi/impgraph.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/gdi/impgraph.cxx Wed Mar 19 10:14:42 2014
@@ -710,22 +710,21 @@ const GDIMetaFile& ImpGraphic::ImplGetGD
             pThat->maEx = maSvgData->getReplacement();
         }
 
-        VirtualDevice aVirDev;
-        const Size aSizePixel(maEx.GetSizePixel());
-
-        pThat->maMetaFile.Record(&aVirDev);
-
+        // #123983# directly create a metafile with the same PrefSize and PrefMapMode
+        // the bitmap has, this will be an always correct metafile
         if(maEx.IsTransparent())
         {
-            aVirDev.DrawBitmapEx(Point(), maEx);
+            pThat->maMetaFile.AddAction(new MetaBmpExScaleAction(Point(), maEx.GetPrefSize(), maEx));
         }
         else
         {
-            aVirDev.DrawBitmap(Point(), maEx.GetBitmap());
+            pThat->maMetaFile.AddAction(new MetaBmpScaleAction(Point(), maEx.GetPrefSize(), maEx.GetBitmap()));
         }
 
-		pThat->maMetaFile.Stop();
-		pThat->maMetaFile.SetPrefSize(aSizePixel);
+        pThat->maMetaFile.Stop();
+        pThat->maMetaFile.WindStart();
+        pThat->maMetaFile.SetPrefSize(maEx.GetPrefSize());
+        pThat->maMetaFile.SetPrefMapMode(maEx.GetPrefMapMode());
     }
 
     return maMetaFile;

Modified: openoffice/branches/alg_writerframes/main/vcl/source/gdi/outdev3.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/gdi/outdev3.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/gdi/outdev3.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/gdi/outdev3.cxx Wed Mar 19 10:14:42 2014
@@ -6043,6 +6043,14 @@ 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 )

Modified: openoffice/branches/alg_writerframes/main/vcl/source/glyphs/graphite_adaptors.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/glyphs/graphite_adaptors.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/glyphs/graphite_adaptors.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/glyphs/graphite_adaptors.cxx Wed Mar 19 10:14:42 2014
@@ -42,14 +42,10 @@
 // Platform
 #ifndef WNT
 #include <unx/saldisp.hxx>
-
 #include <salgdi.hxx>
 
-#include <freetype/ftsynth.h>
-
 // Module
 #include "gcach_ftyp.hxx"
-
 #include <graphite_features.hxx>
 #include <graphite_adaptors.hxx>
 

Modified: openoffice/branches/alg_writerframes/main/vcl/source/window/printdlg.cxx
URL: http://svn.apache.org/viewvc/openoffice/branches/alg_writerframes/main/vcl/source/window/printdlg.cxx?rev=1579184&r1=1579183&r2=1579184&view=diff
==============================================================================
--- openoffice/branches/alg_writerframes/main/vcl/source/window/printdlg.cxx (original)
+++ openoffice/branches/alg_writerframes/main/vcl/source/window/printdlg.cxx Wed Mar 19 10:14:42 2014
@@ -366,7 +366,8 @@ void PrintDialog::PrintPreviewWindow::se
     }
     Size aLogicPaperSize( LogicToLogic( i_rOrigSize, MapMode( MAP_100TH_MM ), MapMode( eUnit ) ) );
     String aNumText( rLocWrap.getNum( aLogicPaperSize.Width(), nDigits ) );
-    aBuf.append( aNumText );
+    aBuf.append( aNumText )
+        .append( sal_Unicode( ' ' ) );
     aBuf.appendAscii( eUnit == MAP_MM ? "mm" : "in" );
     if( i_rPaperName.getLength() )
     {
@@ -377,7 +378,8 @@ void PrintDialog::PrintPreviewWindow::se
     maHorzDim.SetText( aBuf.makeStringAndClear() );
     
     aNumText = rLocWrap.getNum( aLogicPaperSize.Height(), nDigits );
-    aBuf.append( aNumText );
+    aBuf.append( aNumText )
+        .append( sal_Unicode( ' ' ) );
     aBuf.appendAscii( eUnit == MAP_MM ? "mm" : "in" );
     maVertDim.SetText( aBuf.makeStringAndClear() );