summaryrefslogtreecommitdiff
path: root/pango/pango-hbfontmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pango-hbfontmap.c')
-rw-r--r--pango/pango-hbfontmap.c65
1 files changed, 21 insertions, 44 deletions
diff --git a/pango/pango-hbfontmap.c b/pango/pango-hbfontmap.c
index db7bd8a8..87fc4db1 100644
--- a/pango/pango-hbfontmap.c
+++ b/pango/pango-hbfontmap.c
@@ -31,6 +31,7 @@
#include "pango-userface-private.h"
#include "pango-userfont-private.h"
#include "pango-fontset.h"
+#include "pango-font-private.h"
#include "pango-trace-private.h"
#include "pango-context.h"
@@ -155,18 +156,6 @@ pango_fontset_cached_finalize (GObject *object)
}
static PangoFont *
-font_new_for_description (PangoFontFace *face,
- const PangoFontDescription *description,
- float dpi,
- const PangoMatrix *matrix)
-{
- if (PANGO_IS_HB_FACE (face))
- return PANGO_FONT (pango_hb_font_new_for_description (PANGO_HB_FACE (face), description, dpi, matrix));
- else
- return PANGO_FONT (pango_user_font_new_for_description (PANGO_USER_FACE (face), description, dpi, matrix));
-}
-
-static PangoFont *
pango_fontset_cached_get_font (PangoFontset *fontset,
guint wc)
{
@@ -206,10 +195,10 @@ pango_fontset_cached_get_font (PangoFontset *fontset,
wc);
if (face)
{
- retval = font_new_for_description (face,
- self->description,
- self->dpi,
- self->matrix);
+ retval = pango_font_face_create_font (face,
+ self->description,
+ self->dpi,
+ self->matrix);
break;
}
}
@@ -233,7 +222,7 @@ pango_fontset_cached_get_first_font (PangoFontsetCached *self)
else if (PANGO_IS_GENERIC_FAMILY (item))
{
PangoFontFace *face = pango_generic_family_find_face (PANGO_GENERIC_FAMILY (item), self->description, self->language, 0);
- return font_new_for_description (face, self->description, self->dpi, self->matrix);
+ return pango_font_face_create_font (face, self->description, self->dpi, self->matrix);
}
return NULL;
@@ -286,7 +275,7 @@ pango_fontset_cached_foreach (PangoFontset *fontset,
else if (PANGO_IS_GENERIC_FAMILY (item))
{
PangoFontFace *face = pango_generic_family_find_face (PANGO_GENERIC_FAMILY (item), self->description, self->language, 0);
- font = font_new_for_description (face, self->description, self->dpi, self->matrix);
+ font = pango_font_face_create_font (face, self->description, self->dpi, self->matrix);
}
if ((*func) (fontset, font, data))
@@ -333,18 +322,11 @@ static void
pango_fontset_cached_add_face (PangoFontsetCached *self,
PangoFontFace *face)
{
- if (PANGO_IS_HB_FACE (face))
- g_ptr_array_add (self->items,
- pango_hb_font_new_for_description (PANGO_HB_FACE (face),
- self->description,
- self->dpi,
- self->matrix));
- else
- g_ptr_array_add (self->items,
- pango_user_font_new_for_description (PANGO_USER_FACE (face),
- self->description,
- self->dpi,
- self->matrix));
+ g_ptr_array_add (self->items,
+ pango_font_face_create_font (face,
+ self->description,
+ self->dpi,
+ self->matrix));
}
static void
@@ -884,10 +866,7 @@ pango_hb_font_map_add_face (PangoHbFontMap *self,
g_return_if_fail (PANGO_IS_HB_FACE (face) || PANGO_IS_USER_FACE (face));
- if (PANGO_IS_HB_FACE (face))
- description = PANGO_HB_FACE (face)->description;
- else
- description = PANGO_USER_FACE (face)->description;
+ description = ((CommonFace *)face)->description;
if (pango_font_description_get_set_fields (description) &
(PANGO_FONT_MASK_VARIANT | PANGO_FONT_MASK_GRAVITY))
@@ -991,25 +970,24 @@ pango_hb_font_map_add_family (PangoHbFontMap *self,
int position;
g_return_if_fail (PANGO_IS_HB_FAMILY (family) || PANGO_IS_GENERIC_FAMILY (family));
+ g_return_if_fail (((CommonFamily *)family)->map == NULL);
if (!self->in_populate)
g_ptr_array_add (self->added_families, g_object_ref (family));
- name = pango_font_family_get_name (PANGO_FONT_FAMILY (family));
+ name = ((CommonFamily *)family)->name;
position = 0;
while (position < self->families->len)
{
PangoFontFamily *f = g_ptr_array_index (self->families, position);
- if (g_ascii_strcasecmp (name, pango_font_family_get_name (f)) < 0)
+ if (g_ascii_strcasecmp (name, ((CommonFamily *)f)->name) < 0)
break;
position++;
}
- if (PANGO_IS_HB_FAMILY (family))
- pango_hb_family_set_font_map (PANGO_HB_FAMILY (family), PANGO_FONT_MAP (self));
- else
- pango_generic_family_set_font_map (PANGO_GENERIC_FAMILY (family), PANGO_FONT_MAP (self));
+ ((CommonFamily *)family)->map = PANGO_FONT_MAP (self);
+ g_object_add_weak_pointer (G_OBJECT (self), (gpointer *)&((CommonFamily *)family)->map);
g_ptr_array_insert (self->families, position, family);
g_hash_table_add (self->families_hash, family);
@@ -1034,6 +1012,7 @@ pango_hb_font_map_remove_family (PangoHbFontMap *self,
unsigned int position;
g_return_if_fail (PANGO_IS_HB_FAMILY (family) || PANGO_IS_GENERIC_FAMILY (family));
+ g_return_if_fail (((CommonFamily *)family)->map == (PangoFontMap *)self);
if (!g_ptr_array_find (self->added_families, family, &position))
return;
@@ -1041,10 +1020,8 @@ pango_hb_font_map_remove_family (PangoHbFontMap *self,
g_hash_table_remove (self->families_hash, family);
g_ptr_array_remove_index (self->families, position);
- if (PANGO_IS_HB_FAMILY (family))
- pango_hb_family_set_font_map (PANGO_HB_FAMILY (family), NULL);
- else
- pango_generic_family_set_font_map (PANGO_GENERIC_FAMILY (family), NULL);
+ g_object_remove_weak_pointer (G_OBJECT (self), (gpointer *)&((CommonFamily *)family)->map);
+ ((CommonFamily *)family)->map = NULL;
if (!self->in_populate)
g_list_model_items_changed (G_LIST_MODEL (self), position, 1, 0);