summaryrefslogtreecommitdiff
path: root/vcl/aqua
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-02-28 16:57:28 +0000
committerCaolán McNamara <caolanm@redhat.com>2011-03-01 20:38:55 +0000
commitb610ea59875a876712b1c57702eae615e424267a (patch)
treeea8132eee89bdb2078fb81707d758f20e4bbc307 /vcl/aqua
parent687456967ede128c0334536a116bba8699420b7e (diff)
Get better hints as to what script a font is likely tuned for
Diffstat (limited to 'vcl/aqua')
-rw-r--r--vcl/aqua/inc/salgdi.h8
-rw-r--r--vcl/aqua/source/gdi/salgdi.cxx68
2 files changed, 46 insertions, 30 deletions
diff --git a/vcl/aqua/inc/salgdi.h b/vcl/aqua/inc/salgdi.h
index 8b2a9564bea3..ad6b92225a8e 100644
--- a/vcl/aqua/inc/salgdi.h
+++ b/vcl/aqua/inc/salgdi.h
@@ -61,7 +61,7 @@ public:
virtual sal_IntPtr GetFontId() const;
ImplFontCharMap* GetImplFontCharMap() const;
- bool GetImplFontLayoutCapabilities(FontLayoutCapabilities &rGetImplFontLayoutCapabilities) const;
+ bool GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const;
bool HasChar( sal_uInt32 cChar ) const;
void ReadOs2Table() const;
@@ -71,12 +71,12 @@ public:
private:
const ATSUFontID mnFontId;
mutable ImplFontCharMap* mpCharMap;
- mutable FontLayoutCapabilities maFontLayoutCapabilities;
+ mutable vcl::FontCapabilities maFontCapabilities;
mutable bool mbOs2Read; // true if OS2-table related info is valid
mutable bool mbHasOs2Table;
mutable bool mbCmapEncodingRead; // true if cmap encoding of Mac font is read
mutable bool mbHasCJKSupport; // #i78970# CJK fonts need extra leading
- mutable bool mbFontLayoutCapabilitiesRead;
+ mutable bool mbFontCapabilitiesRead;
};
// abstracting quartz color instead of having to use an CGFloat[] array
@@ -286,7 +286,7 @@ public:
virtual ULONG GetKernPairs( ULONG nPairs, ImplKernPairData* pKernPairs );
// get the repertoire of the current font
virtual ImplFontCharMap* GetImplFontCharMap() const;
- virtual bool GetImplFontLayoutCapabilities(FontLayoutCapabilities &rGetImplFontLayoutCapabilities) const;
+ virtual bool GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const;
// graphics must fill supplied font list
virtual void GetDevFontList( ImplDevFontList* );
// graphics should call ImplAddDevFontSubstitute on supplied
diff --git a/vcl/aqua/source/gdi/salgdi.cxx b/vcl/aqua/source/gdi/salgdi.cxx
index e0f6d55a2088..7b8e41584a30 100644
--- a/vcl/aqua/source/gdi/salgdi.cxx
+++ b/vcl/aqua/source/gdi/salgdi.cxx
@@ -73,7 +73,7 @@ ImplMacFontData::ImplMacFontData( const ImplDevFontAttributes& rDFA, ATSUFontID
, mbHasOs2Table( false )
, mbCmapEncodingRead( false )
, mbHasCJKSupport( false )
-, mbFontLayoutCapabilitiesRead( false )
+, mbFontCapabilitiesRead( false )
{}
// -----------------------------------------------------------------------
@@ -158,37 +158,53 @@ ImplFontCharMap* ImplMacFontData::GetImplFontCharMap() const
return mpCharMap;
}
-bool ImplMacFontData::GetImplFontLayoutCapabilities(FontLayoutCapabilities &rFontLayoutCapabilities) const
+bool ImplMacFontData::GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const
{
// read this only once per font
- if( mbFontLayoutCapabilitiesRead )
+ if( mbFontCapabilitiesRead )
{
- rFontLayoutCapabilities = maFontLayoutCapabilities;
- return !rFontLayoutCapabilities.empty();
+ rFontCapabilities = maFontCapabilities;
+ return !rFontCapabilities.maUnicodeRange.empty() || !rFontCapabilities.maCodePageRange.empty();
}
- mbFontLayoutCapabilitiesRead = true;
+ mbFontCapabilitiesRead = true;
// prepare to get the GSUB table raw data
ATSFontRef rFont = FMGetATSFontRefFromFont( mnFontId );
ByteCount nBufSize = 0;
- OSStatus eStatus = ATSFontGetTable( rFont, GetTag("GSUB"), 0, 0, NULL, &nBufSize );
- if( eStatus != noErr )
- return false;
-
- // allocate a buffer for the GSUB raw data
- ByteVector aBuffer( nBufSize );
-
- // get the GSUB raw data
- ByteCount nRawLength = 0;
- eStatus = ATSFontGetTable( rFont, GetTag("GSUB"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
- if( eStatus != noErr )
- return false;
-
- const unsigned char* pGSUBTable = &aBuffer[0];
- vcl::getTTFontLayoutCapabilities(maFontLayoutCapabilities, pGSUBTable);
- rFontLayoutCapabilities = maFontLayoutCapabilities;
-
- return !rFontLayoutCapabilities.empty();
+ OSStatus eStatus;
+ eStatus = ATSFontGetTable( rFont, GetTag("GSUB"), 0, 0, NULL, &nBufSize );
+ if( eStatus == noErr )
+ {
+ // allocate a buffer for the GSUB raw data
+ ByteVector aBuffer( nBufSize );
+ // get the GSUB raw data
+ ByteCount nRawLength = 0;
+ eStatus = ATSFontGetTable( rFont, GetTag("GSUB"), 0, nBufSize, (void*)&aBuffer[0], &nRawLength );
+ if( eStatus == noErr )
+ {
+ const unsigned char* pGSUBTable = &aBuffer[0];
+ vcl::getTTScripts(maFontCapabilities.maGSUBScriptTags, pGSUBTable, nRawLength);
+ }
+ }
+ eStatus = ATSFontGetTable( rFont, GetTag("OS/2"), 0, 0, NULL, &nBufSize );
+ if( eStatus == noErr )
+ {
+ // allocate a buffer for the GSUB 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 );
+ if( eStatus == noErr )
+ {
+ const unsigned char* pOS2Table = &aBuffer[0];
+ vcl::getTTCoverage(
+ maFontCapabilities.maUnicodeRange,
+ maFontCapabilities.maCodePageRange,
+ pOS2Table, nRawLength);
+ }
+ }
+ rFontCapabilities = maFontCapabilities;
+ return !rFontCapabilities.maUnicodeRange.empty() || !rFontCapabilities.maCodePageRange.empty();
}
// -----------------------------------------------------------------------
@@ -2018,12 +2034,12 @@ ImplFontCharMap* AquaSalGraphics::GetImplFontCharMap() const
return mpMacFontData->GetImplFontCharMap();
}
-bool AquaSalGraphics::GetImplFontLayoutCapabilities(FontLayoutCapabilities &rFontLayoutCapabilities) const
+bool AquaSalGraphics::GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const
{
if( !mpMacFontData )
return false;
- return mpMacFontData->GetImplFontLayoutCapabilities(rFontLayoutCapabilities);
+ return mpMacFontData->GetImplFontCapabilities(rFontCapabilities);
}
// -----------------------------------------------------------------------