diff --git a/AppKit/CPFontManager.j b/AppKit/CPFontManager.j index 09cf92a41..cee4f062d 100644 --- a/AppKit/CPFontManager.j +++ b/AppKit/CPFontManager.j @@ -189,6 +189,20 @@ var CPSharedFontManager = nil, return aFont; } +- (CPFont)convertFont:(CPFont)aFont toFace:(CPString)aTypeface +{ + if (!aFont) + return nil; + + var shouldBeBold = [aFont isBold], + shouldBeItalic = [aFont isItalic], + shouldBeSize = [aFont size]; + + aFont = [CPFont _fontWithName:aTypeface size:shouldBeSize bold:shouldBeBold italic:shouldBeItalic] || aFont; + + return aFont; +} + - (@action)addFontTrait:(id)sender { _activeChange = [CPDictionary dictionaryWithObject:[sender tag] forKey:@"addTraits"]; diff --git a/Tests/AppKit/CPFontManagerTest.j b/Tests/AppKit/CPFontManagerTest.j index 13dd8d316..04e817701 100644 --- a/Tests/AppKit/CPFontManagerTest.j +++ b/Tests/AppKit/CPFontManagerTest.j @@ -108,6 +108,18 @@ [self assert:12.0 equals:[convertedFontB size] message:@"maintain size fontB with CPUnitalicFontMask"]; } +- (void)testConvertFont_toFace_ +{ + fontB = [CPFont boldFontWithName:@"Helvetica" size:12.0 italic:YES]; + + convertedFontB = [[CPFontManager sharedFontManager] convertFont:fontB toFace:@"Arial"]; + + [self assertTrue:[convertedFontB isBold] message:@"maintain bold fontB"]; + [self assertTrue:[convertedFontB isItalic] message:@"maintain italic fontB"]; + [self assert:12.0 equals:[convertedFontB size] message:@"maintain size fontB"]; + [self assert:@"Arial" equals:[convertedFontB familyName] message:@"change face fontB"]; +} + - (@action)changeFont:(id)sender { convertedFontA = [sender convertFont:fontA];