From 5b662d63aab22aec0359fa53a5f5605549b92575 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Tue, 28 Oct 2008 13:38:30 +0000 Subject: [PATCH] =?utf8?q?Bug=20558107=20=E2=80=93=20is=5Fmonospace=20alwa?= =?utf8?q?ys=20returns=20FALSE=20in=20pangoatsui?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-10-27 Richard Hult Bug 558107 – is_monospace always returns FALSE in pangoatsui * pango/pangoatsui-fontmap.c: (pango_atsui_family_is_monospace), (pango_atsui_font_map_init): Mark families whose faces have the NSFixedPitchFontMask set as monospaced, and use this in the is_monospace implementation. svn path=/trunk/; revision=2733 --- ChangeLog | 9 +++++++++ pango/pangoatsui-fontmap.c | 46 +++++++++++++++++++++++++++++++++------------- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1c6616..82e1c03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-10-27 Richard Hult + + Bug 558107 – is_monospace always returns FALSE in pangoatsui + + * pango/pangoatsui-fontmap.c: (pango_atsui_family_is_monospace), + (pango_atsui_font_map_init): Mark families whose faces have the + NSFixedPitchFontMask set as monospaced, and use this in the + is_monospace implementation. + 2008-10-23 Behdad Esfahbod Bug 557620 – pango_font_description_from_string not correct diff --git a/pango/pangoatsui-fontmap.c b/pango/pangoatsui-fontmap.c index 45ba4b4..0844e6e 100644 --- a/pango/pangoatsui-fontmap.c +++ b/pango/pangoatsui-fontmap.c @@ -37,6 +37,8 @@ struct _PangoATSUIFamily char *family_name; + guint is_monospace : 1; + PangoFontFace **faces; gint n_faces; }; @@ -186,6 +188,7 @@ pango_atsui_family_list_faces (PangoFontFamily *family, static const char * pango_atsui_family_get_name (PangoFontFamily *family) + { PangoATSUIFamily *atsuifamily = PANGO_ATSUI_FAMILY (family); @@ -195,8 +198,9 @@ pango_atsui_family_get_name (PangoFontFamily *family) static gboolean pango_atsui_family_is_monospace (PangoFontFamily *family) { - /* Fixme: Implement */ - return FALSE; + PangoATSUIFamily *atsuifamily = PANGO_ATSUI_FAMILY (family); + + return atsuifamily->is_monospace; } static void @@ -765,10 +769,10 @@ pango_atsui_font_map_list_families (PangoFontMap *fontmap, static void pango_atsui_font_map_init (PangoATSUIFontMap *atsuifontmap) { - NSArray *family_array; NSAutoreleasePool *pool; + NSFontManager *manager; + NSArray *family_array; PangoATSUIFamily *family; - int size, i; atsuifontmap->families = g_hash_table_new_full (g_str_hash, g_str_equal, @@ -781,17 +785,32 @@ pango_atsui_font_map_init (PangoATSUIFontMap *atsuifontmap) NULL); pool = [[NSAutoreleasePool alloc] init]; - family_array = [[NSFontManager sharedFontManager] availableFontFamilies]; + manager = [NSFontManager sharedFontManager]; + family_array = [manager availableFontFamilies]; size = [family_array count]; - for (i = 0; i < size; i++) { - NSString *family_name = [family_array objectAtIndex:i]; - - family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL); - family->family_name = g_strdup ([family_name UTF8String]); - - g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family); - } + for (i = 0; i < size; i++) + { + NSString *family_name = [family_array objectAtIndex:i]; + NSArray *members; + + family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL); + family->family_name = g_strdup ([family_name UTF8String]); + + members = [manager availableMembersOfFontFamily:family_name]; + if ([members count] > 0) + { + NSArray *font_array = [members objectAtIndex:0]; + + /* We assume that all faces in the family are monospaced, or + * none. + */ + if ([[font_array objectAtIndex:3] intValue] & NSFixedPitchFontMask) + family->is_monospace = TRUE; + } + + g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family); + } /* Insert aliases */ family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL); @@ -804,6 +823,7 @@ pango_atsui_font_map_init (PangoATSUIFontMap *atsuifontmap) family = g_object_new (PANGO_TYPE_ATSUI_FAMILY, NULL); family->family_name = g_strdup ("Monospace"); + family->is_monospace = TRUE; g_hash_table_insert (atsuifontmap->families, g_utf8_casefold (family->family_name, -1), family); [pool release]; -- 2.7.4