mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-14 16:14:38 +00:00
Merge pull request #544 from JeffProgrammer/mac-font-stuff
[PLEASE TEST BEFORE MERGE] Mac font stuff
This commit is contained in:
commit
458eac8474
1 changed files with 48 additions and 18 deletions
|
|
@ -83,9 +83,34 @@ bool OSXFont::create( const char* name, dsize_t size, U32 charset )
|
||||||
{
|
{
|
||||||
// Sanity!
|
// Sanity!
|
||||||
AssertFatal( name != NULL, "Cannot create a NULL font name." );
|
AssertFatal( name != NULL, "Cannot create a NULL font name." );
|
||||||
|
|
||||||
|
bool doBold = false;
|
||||||
|
bool doItalic = false;
|
||||||
|
|
||||||
|
String nameStr = name;
|
||||||
|
nameStr = nameStr.trim();
|
||||||
|
|
||||||
|
bool haveModifier;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
haveModifier = false;
|
||||||
|
if( nameStr.compare( "Bold", 4, String::NoCase | String::Right ) == 0 )
|
||||||
|
{
|
||||||
|
doBold = true;
|
||||||
|
nameStr = nameStr.substr( 0, nameStr.length() - 4 ).trim();
|
||||||
|
haveModifier = true;
|
||||||
|
}
|
||||||
|
if( nameStr.compare( "Italic", 6, String::NoCase | String::Right ) == 0 )
|
||||||
|
{
|
||||||
|
doItalic = true;
|
||||||
|
nameStr = nameStr.substr( 0, nameStr.length() - 6 ).trim();
|
||||||
|
haveModifier = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while( haveModifier );
|
||||||
|
|
||||||
// Generate compatible font name.
|
// Generate compatible font name.
|
||||||
CFStringRef fontName = CFStringCreateWithCString( kCFAllocatorDefault, name, kCFStringEncodingUTF8 );
|
NSString* fontName = [NSString stringWithUTF8String: nameStr.utf8()];
|
||||||
|
|
||||||
// Sanity!
|
// Sanity!
|
||||||
if ( !fontName )
|
if ( !fontName )
|
||||||
|
|
@ -94,12 +119,22 @@ bool OSXFont::create( const char* name, dsize_t size, U32 charset )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use Windows as a baseline (96 DPI) and adjust accordingly.
|
NSMutableDictionary* fontAttributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:
|
||||||
F32 scaledSize = size * (72.0f/96.0f);
|
fontName, (NSString*)kCTFontFamilyNameAttribute,
|
||||||
scaledSize = mRound(scaledSize);
|
[NSNumber numberWithFloat: (float)size], (NSString*)kCTFontSizeAttribute,
|
||||||
|
nil];
|
||||||
|
|
||||||
// Create the font reference.
|
CTFontSymbolicTraits traits = 0x0;
|
||||||
mFontRef = CTFontCreateWithName( fontName, scaledSize, NULL );
|
if (doBold)
|
||||||
|
traits |= kCTFontBoldTrait;
|
||||||
|
if (doItalic)
|
||||||
|
traits |= kCTFontItalicTrait;
|
||||||
|
|
||||||
|
CTFontDescriptorRef descriptor =
|
||||||
|
CTFontDescriptorCreateWithAttributes((CFDictionaryRef)fontAttributes);
|
||||||
|
|
||||||
|
mFontRef = CTFontCreateWithFontDescriptor(descriptor, 0.0, NULL);
|
||||||
|
CFRelease(descriptor);
|
||||||
|
|
||||||
// Sanity!
|
// Sanity!
|
||||||
if ( !mFontRef )
|
if ( !mFontRef )
|
||||||
|
|
@ -108,6 +143,10 @@ bool OSXFont::create( const char* name, dsize_t size, U32 charset )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Apply font traits if we have any by creating a copy of the font
|
||||||
|
if (traits != 0x0)
|
||||||
|
mFontRef = CTFontCreateCopyWithSymbolicTraits(mFontRef, (float)size, NULL, traits, traits);
|
||||||
|
|
||||||
// Fetch font metrics.
|
// Fetch font metrics.
|
||||||
CGFloat ascent = CTFontGetAscent( mFontRef );
|
CGFloat ascent = CTFontGetAscent( mFontRef );
|
||||||
CGFloat descent = CTFontGetDescent( mFontRef );
|
CGFloat descent = CTFontGetDescent( mFontRef );
|
||||||
|
|
@ -227,17 +266,8 @@ PlatformFont::CharInfo& OSXFont::getCharInfo(const UTF16 character) const
|
||||||
CGPoint renderOrigin;
|
CGPoint renderOrigin;
|
||||||
renderOrigin.x = -characterInfo.xOrigin;
|
renderOrigin.x = -characterInfo.xOrigin;
|
||||||
renderOrigin.y = -characterInfo.yOrigin;
|
renderOrigin.y = -characterInfo.yOrigin;
|
||||||
|
|
||||||
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
|
|
||||||
CTFontDrawGlyphs( mFontRef, &characterGlyph, &renderOrigin, 1, bitmapContext );
|
CTFontDrawGlyphs( mFontRef, &characterGlyph, &renderOrigin, 1, bitmapContext );
|
||||||
#else
|
|
||||||
CGFontRef cgFont = CTFontCopyGraphicsFont(mFontRef, NULL);
|
|
||||||
CGContextSetFont(bitmapContext, cgFont);
|
|
||||||
CGContextSetFontSize(bitmapContext, CTFontGetSize(mFontRef));
|
|
||||||
CGContextShowGlyphsAtPositions(bitmapContext, &characterGlyph, &renderOrigin, 1);
|
|
||||||
CFRelease(cgFont);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
Con::printf("Width:%f, Height:%f, OriginX:%f, OriginY:%f",
|
Con::printf("Width:%f, Height:%f, OriginX:%f, OriginY:%f",
|
||||||
|
|
@ -255,4 +285,4 @@ PlatformFont::CharInfo& OSXFont::getCharInfo(const UTF16 character) const
|
||||||
|
|
||||||
// Return character information.
|
// Return character information.
|
||||||
return characterInfo;
|
return characterInfo;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue