mirror of
https://github.com/gnustep/libs-back.git
synced 2025-04-22 07:21:02 +00:00
back: implement coveredCharacterSet for CairoFontInfo
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@32716 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f4de37421d
commit
e6b42470de
6 changed files with 97 additions and 1 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2011-03-27 Eric Wasylishen <ewasylishen@gmail.com>
|
||||
|
||||
* Source/cairo/CairoFontEnumerator.m:
|
||||
* Source/cairo/CairoFaceInfo.m:
|
||||
* Source/cairo/CairoFontInfo.m:
|
||||
* Headers/cairo/CairoFontEnumerator.h:
|
||||
* Headers/cairo/CairoFaceInfo.h: Set the coveredCharacterSet ivar
|
||||
of CairoFontInfo. The character set is obtained from Fontconfig.
|
||||
There is an NSCharacterSet subclass which wraps the FcCharSet
|
||||
structure from fontconfig, so there is no need for a slow conversion
|
||||
from one character set format to another.
|
||||
|
||||
This has the effect of enabling glyph substitution when using
|
||||
the cairo backend.
|
||||
|
||||
2011-03-23 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Tools/xpbs.m (-pasteboard:provideDataForType:, -availableTypes)
|
||||
|
|
|
@ -64,5 +64,7 @@
|
|||
|
||||
- (cairo_font_face_t *)fontFace;
|
||||
|
||||
- (NSCharacterSet*)characterSet;
|
||||
|
||||
@end
|
||||
#endif
|
||||
|
|
|
@ -30,10 +30,21 @@
|
|||
|
||||
#include <GNUstepGUI/GSFontInfo.h>
|
||||
#include <cairo.h>
|
||||
#include <fontconfig/fontconfig.h>
|
||||
#include "cairo/CairoFaceInfo.h"
|
||||
|
||||
@interface CairoFontEnumerator : GSFontEnumerator
|
||||
+ (CairoFaceInfo *) fontWithName: (NSString *)name;
|
||||
@end
|
||||
|
||||
@interface FontconfigCharacterSet : NSCharacterSet
|
||||
{
|
||||
FcCharSet *_charset;
|
||||
}
|
||||
|
||||
- (id)initWithFontconfigCharSet: (FcCharSet*)charset;
|
||||
- (FcCharSet*)fontconfigCharSet;
|
||||
|
||||
@end
|
||||
|
||||
#endif
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
*/
|
||||
|
||||
#include "cairo/CairoFaceInfo.h"
|
||||
#include "cairo/CairoFontEnumerator.h"
|
||||
#include <cairo-ft.h>
|
||||
#include <AppKit/NSFontManager.h>
|
||||
|
||||
|
@ -122,4 +123,24 @@
|
|||
return _fontFace;
|
||||
}
|
||||
|
||||
- (NSCharacterSet*)characterSet
|
||||
{
|
||||
FcResult result;
|
||||
FcPattern *resolved;
|
||||
FcCharSet *charset;
|
||||
NSCharacterSet *characterSet = nil;
|
||||
|
||||
FcConfigSubstitute(NULL, _pattern, FcMatchPattern);
|
||||
FcDefaultSubstitute(_pattern);
|
||||
resolved = FcFontMatch(NULL, _pattern, &result);
|
||||
|
||||
if (FcResultMatch == FcPatternGetCharSet(resolved, FC_CHARSET, 0, &charset))
|
||||
{
|
||||
characterSet = [[[FontconfigCharacterSet alloc] initWithFontconfigCharSet: charset] autorelease];
|
||||
}
|
||||
|
||||
FcPatternDestroy(resolved);
|
||||
return characterSet;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -236,3 +236,48 @@ static NSArray *faFromFc(FcPattern *pat)
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation FontconfigCharacterSet
|
||||
|
||||
- (id)initWithFontconfigCharSet: (FcCharSet*)charset
|
||||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
_charset = FcCharSetCopy(charset);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)mutableCopyWithZone: (NSZone*)aZone
|
||||
{
|
||||
return [[NSMutableCharacterSet characterSetWithBitmapRepresentation:
|
||||
[self bitmapRepresentation]] retain];
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
FcCharSetDestroy(_charset);
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (FcCharSet*)fontconfigCharSet
|
||||
{
|
||||
return _charset;
|
||||
}
|
||||
|
||||
- (BOOL)characterIsMember: (unichar)c
|
||||
{
|
||||
return FcCharSetHasChar(_charset, c);
|
||||
}
|
||||
|
||||
- (BOOL)longCharacterIsMember: (UTF32Char)c
|
||||
{
|
||||
return FcCharSetHasChar(_charset, c);
|
||||
}
|
||||
|
||||
// FIXME: Implement for better performance
|
||||
//- (NSData *)bitmapRepresentation
|
||||
//{
|
||||
//}
|
||||
|
||||
@end
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
|
||||
/* setting GSFontInfo:
|
||||
* weight, traits, familyName,
|
||||
* mostCompatibleStringEncoding, encodingScheme,
|
||||
* mostCompatibleStringEncoding, encodingScheme, coveredCharacterSet
|
||||
*/
|
||||
|
||||
weight = [_faceInfo weight];
|
||||
|
@ -87,6 +87,8 @@
|
|||
familyName = [[_faceInfo familyName] copy];
|
||||
mostCompatibleStringEncoding = NSUTF8StringEncoding;
|
||||
encodingScheme = @"iso10646-1";
|
||||
coveredCharacterSet = [[_faceInfo characterSet] retain];
|
||||
|
||||
|
||||
/* setting GSFontInfo:
|
||||
* xHeight, pix_width, pix_height
|
||||
|
|
Loading…
Reference in a new issue