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() );