mirror of
https://github.com/gnustep/libs-back.git
synced 2025-04-23 08:07:07 +00:00
Implement handling of 'ScreenFonts'.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@14583 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
c3cfe1811a
commit
523a65d977
2 changed files with 66 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2002-09-26 16:08 Alexander Malmberg <alexander@malmberg.org>
|
||||
|
||||
* Source/art/ftfont.m: Implement handling of the 'ScreenFonts' key
|
||||
in .nfont packages.
|
||||
|
||||
2002-09-25 22:39 Alexander Malmberg <alexander@malmberg.org>
|
||||
|
||||
* Source/art/ftfont.m: Rework font configuration code to handle
|
||||
|
|
|
@ -107,6 +107,13 @@ static NSMutableSet *families_seen, *families_pending;
|
|||
NSString *displayName;
|
||||
|
||||
NSArray *files;
|
||||
struct
|
||||
{
|
||||
int pixel_size;
|
||||
NSArray *files;
|
||||
} *sizes;
|
||||
int num_sizes;
|
||||
|
||||
int weight;
|
||||
unsigned int traits;
|
||||
|
||||
|
@ -219,6 +226,23 @@ static struct
|
|||
}
|
||||
|
||||
|
||||
static NSArray *fix_path(NSString *path, NSArray *files)
|
||||
{
|
||||
int i, c = [files count];
|
||||
NSMutableArray *nfiles;
|
||||
|
||||
if (!files)
|
||||
return nil;
|
||||
|
||||
nfiles = [[NSMutableArray alloc] init];
|
||||
for (i = 0; i < c; i++)
|
||||
{
|
||||
[nfiles addObject: [path stringByAppendingPathComponent:
|
||||
[files objectAtIndex: i]]];
|
||||
}
|
||||
return nfiles;
|
||||
}
|
||||
|
||||
static void add_face(NSString *family, int family_weight,
|
||||
unsigned int family_traits, NSDictionary *d, NSString *path,
|
||||
BOOL from_nfont)
|
||||
|
@ -269,7 +293,8 @@ static void add_face(NSString *family, int family_weight,
|
|||
if (!faceName)
|
||||
{
|
||||
faceName = @"<unknown face>";
|
||||
NSLog(@"Warning: couldn't find localized face name or fallback for %@",fontName);
|
||||
NSLog(@"Warning: couldn't find localized face name or fallback for %@",
|
||||
fontName);
|
||||
}
|
||||
}
|
||||
else if ((faceName = [d objectForKey: @"Name"]))
|
||||
|
@ -298,21 +323,29 @@ static void add_face(NSString *family, int family_weight,
|
|||
traits_from_string(rawFaceName, &traits, &weight);
|
||||
|
||||
{
|
||||
NSArray *files = [d objectForKey: @"Files"];
|
||||
int i, c = [files count];
|
||||
NSDictionary *sizes;
|
||||
NSEnumerator *e;
|
||||
NSString *size;
|
||||
int i;
|
||||
|
||||
if (files)
|
||||
sizes = [d objectForKey: @"ScreenFonts"];
|
||||
|
||||
fi->num_sizes = [sizes count];
|
||||
fi->sizes = malloc(sizeof(fi->sizes[0])*[sizes count]);
|
||||
e = [sizes keyEnumerator];
|
||||
i = 0;
|
||||
while ((size = [e nextObject]))
|
||||
{
|
||||
fi->files = [[NSMutableArray alloc] init];
|
||||
for (i = 0; i < c; i++)
|
||||
{
|
||||
[(NSMutableArray *)fi->files addObject:
|
||||
[path stringByAppendingPathComponent:
|
||||
[files objectAtIndex: i]]];
|
||||
}
|
||||
fi->sizes[i].pixel_size = [size intValue];
|
||||
fi->sizes[i].files = fix_path(path,[sizes objectForKey: size]);
|
||||
NSDebugLLog(@"ftfont",@"%@ size %i files |%@|\n",
|
||||
fontName,fi->sizes[i].pixel_size,fi->sizes[i].files);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
fi->files = fix_path(path,[d objectForKey: @"Files"]);
|
||||
|
||||
if ([d objectForKey: @"Weight"])
|
||||
weight = [[d objectForKey: @"Weight"] intValue];
|
||||
fi->weight = weight;
|
||||
|
@ -563,7 +596,6 @@ static FT_Error ft_get_face(FTC_FaceID fid, FT_Library lib, FT_Pointer data, FT_
|
|||
|
||||
face_info = font_entry;
|
||||
|
||||
rfi = font_entry->files;
|
||||
weight = font_entry->weight;
|
||||
traits = font_entry->traits;
|
||||
|
||||
|
@ -577,6 +609,23 @@ static FT_Error ft_get_face(FTC_FaceID fid, FT_Library lib, FT_Pointer data, FT_
|
|||
|
||||
imgd.font.pix_width = matrix[0];
|
||||
imgd.font.pix_height = matrix[3];
|
||||
|
||||
rfi = font_entry->files;
|
||||
if (font_entry->num_sizes &&
|
||||
((imgd.font.pix_width == imgd.font.pix_height) ||
|
||||
(imgd.font.pix_width == -imgd.font.pix_height)))
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < font_entry->num_sizes; i++)
|
||||
{
|
||||
if (font_entry->sizes[i].pixel_size == imgd.font.pix_width)
|
||||
{
|
||||
rfi = font_entry->sizes[i].files;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
imgd.font.face_id = (FTC_FaceID)rfi;
|
||||
|
||||
/* TODO: make this configurable */
|
||||
|
|
Loading…
Reference in a new issue