Author: fredkiefer
Date: Sat Oct 17 21:49:15 2015
New Revision: 39079
URL: http://svn.gna.org/viewcvs/gnustep?rev=39079&view=rev
Log:
* Source/NSAttributedString.m (-_substituteFontFor:font:): Use
font descriptors for faster replacement font detection.
* Source/GSFontInfo.m
(GSFontEnumerator-matchingFontDescriptorsFor:): Special handling
for NSFontCharacterSetAttribute.
Modified:
libs/gui/trunk/ChangeLog
libs/gui/trunk/Source/GSFontInfo.m
libs/gui/trunk/Source/NSAttributedString.m
Modified: libs/gui/trunk/ChangeLog
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/ChangeLog?rev=39079&r1=39078&r2=39079&view=diff
==============================================================================
--- libs/gui/trunk/ChangeLog (original)
+++ libs/gui/trunk/ChangeLog Sat Oct 17 21:49:15 2015
@@ -1,3 +1,11 @@
+2015-10-17 Fred Kiefer <[email protected]>
+
+ * Source/NSAttributedString.m (-_substituteFontFor:font:): Use
+ font descriptors for faster replacement font detection.
+ * Source/GSFontInfo.m
+ (GSFontEnumerator-matchingFontDescriptorsFor:): Special handling
+ for NSFontCharacterSetAttribute.
+
2015-10-16 Fred Kiefer <[email protected]>
* Source/NSCell.m (-trackMouse:...untilMouseUp:): Check enabled
Modified: libs/gui/trunk/Source/GSFontInfo.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Source/GSFontInfo.m?rev=39079&r1=39078&r2=39079&view=diff
==============================================================================
--- libs/gui/trunk/Source/GSFontInfo.m (original)
+++ libs/gui/trunk/Source/GSFontInfo.m Sat Oct 17 21:49:15 2015
@@ -229,6 +229,14 @@
break;
}
}
+ else if ([key isEqual: NSFontCharacterSetAttribute])
+ {
+ if (![valueB isSupersetOfSet: valueA])
+ {
+ match = NO;
+ break;
+ }
+ }
else
{
if (![valueA isEqual: valueB])
Modified: libs/gui/trunk/Source/NSAttributedString.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Source/NSAttributedString.m?rev=39079&r1=39078&r2=39079&view=diff
==============================================================================
--- libs/gui/trunk/Source/NSAttributedString.m (original)
+++ libs/gui/trunk/Source/NSAttributedString.m Sat Oct 17 21:49:15 2015
@@ -39,6 +39,7 @@
#import <Foundation/NSFileManager.h>
#import <Foundation/NSPathUtilities.h>
#import <Foundation/NSRange.h>
+#import <Foundation/NSSet.h>
#import <Foundation/NSString.h>
#import <Foundation/NSValue.h>
@@ -50,6 +51,7 @@
#import "AppKit/NSColor.h"
#import "AppKit/NSFileWrapper.h"
#import "AppKit/NSFont.h"
+#import "AppKit/NSFontDescriptor.h"
#import "AppKit/NSFontManager.h"
// For the colour name spaces
#import "AppKit/NSGraphics.h"
@@ -1519,9 +1521,20 @@
return nil;
}
+- (NSFontDescriptor*)_substituteFontDescriptorFor: (unichar)uchar
+{
+ NSString *chars = [NSString stringWithCharacters: &uchar length: 1];
+ NSCharacterSet *requiredCharacterSet = [NSCharacterSet
characterSetWithCharactersInString: chars];
+ NSDictionary *fontAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
requiredCharacterSet, NSFontCharacterSetAttribute, nil];
+ NSSet *mandatoryKeys = [NSSet setWithObjects: NSFontCharacterSetAttribute,
nil];
+ NSFontDescriptor *fd = [NSFontDescriptor fontDescriptorWithFontAttributes:
fontAttributes];
+ return [fd matchingFontDescriptorWithMandatoryKeys: mandatoryKeys];
+}
+
- (NSFont*)_substituteFontFor: (unichar)uchar font: (NSFont*)baseFont
{
NSFont *subFont;
+ NSFontDescriptor *descriptor;
// Caching one font may lead to the selected substitution font not being
// from the prefered list, although there is one there with this character.
@@ -1538,13 +1551,29 @@
return subFont;
}
+ // Fast way with font descriptors
+ descriptor = [self _substituteFontDescriptorFor: uchar];
+ if (descriptor != nil)
+ {
+ NSCharacterSet *newSet = [descriptor objectForKey:
NSFontCharacterSetAttribute];
+ if ([newSet characterIsMember: uchar])
+ {
+ NSString *fName = [descriptor objectForKey: NSFontFamilyAttribute];
+
+ ASSIGN(lastFont, fName);
+ ASSIGN(lastSet, newSet);
+ return [self _substituteFontWithName: fName font: baseFont];
+ }
+ }
+
+
subFont = [self _substituteFontFor: uchar font: baseFont fromList:
[[NSFontManager sharedFontManager] availableFonts]];
if (subFont != nil)
{
return subFont;
}
-
+
return nil;
}
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs