[pango/hb-getters] Fixup: Cache the hb_font_t in the fontend
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/hb-getters] Fixup: Cache the hb_font_t in the fontend
- Date: Mon, 19 Nov 2018 15:30:30 +0000 (UTC)
commit 29d63dcb49369b55a98b402b9f7e53d336882693
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Nov 19 10:29:03 2018 -0500
Fixup: Cache the hb_font_t in the fontend
Change the vfunc to be create_hb_font, since
that is what it does. We keep pango_font_get_hb_font
as the getter, but make it transfer none and cache
the hb_font in the frontend.
pango/fonts.c | 37 +++++++++++++++++++++++++++++++------
pango/pango-font.h | 2 +-
pango/pangofc-font.c | 6 +++---
3 files changed, 35 insertions(+), 10 deletions(-)
---
diff --git a/pango/fonts.c b/pango/fonts.c
index 28614b2f..0a06ce3a 100644
--- a/pango/fonts.c
+++ b/pango/fonts.c
@@ -1617,11 +1617,29 @@ pango_parse_stretch (const char *str,
* PangoFont
*/
-G_DEFINE_ABSTRACT_TYPE (PangoFont, pango_font, G_TYPE_OBJECT)
+typedef struct {
+ hb_font_t *hb_font;
+} PangoFontPrivate;
+
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (PangoFont, pango_font, G_TYPE_OBJECT)
+
+static void
+pango_font_finalize (GObject *object)
+{
+ PangoFont *font = PANGO_FONT (object);
+ PangoFontPrivate *priv = pango_font_get_instance_private (font);
+
+ hb_font_destroy (priv->hb_font);
+
+ G_OBJECT_CLASS (pango_font_parent_class)->finalize (object);
+}
static void
pango_font_class_init (PangoFontClass *class G_GNUC_UNUSED)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = pango_font_finalize;
}
static void
@@ -1843,7 +1861,7 @@ pango_font_get_font_map (PangoFont *font)
*
* Get a hb_font_t object backing this font.
*
- * Returns: (transfer full) (nullable): the hb_font_t object backing the
+ * Returns: (transfer none) (nullable): the hb_font_t object backing the
* font, or %NULL if the font does not have one
*
* Since: 1.44
@@ -1851,13 +1869,20 @@ pango_font_get_font_map (PangoFont *font)
hb_font_t *
pango_font_get_hb_font (PangoFont *font)
{
+ PangoFontPrivate *priv = pango_font_get_instance_private (font);
+
if (G_UNLIKELY (!font))
return NULL;
- if (PANGO_FONT_GET_CLASS (font)->get_hb_font)
- return PANGO_FONT_GET_CLASS (font)->get_hb_font (font);
- else
- return NULL;
+ if (priv->hb_font)
+ return priv->hb_font;
+ else if (PANGO_FONT_GET_CLASS (font)->create_hb_font)
+ {
+ priv->hb_font = PANGO_FONT_GET_CLASS (font)->create_hb_font (font);
+ return priv->hb_font;
+ }
+
+ return hb_font_get_empty ();
}
G_DEFINE_BOXED_TYPE (PangoFontMetrics, pango_font_metrics,
diff --git a/pango/pango-font.h b/pango/pango-font.h
index d9a35885..2c7eac18 100644
--- a/pango/pango-font.h
+++ b/pango/pango-font.h
@@ -636,7 +636,7 @@ struct _PangoFontClass
PangoLanguage *language);
PangoFontMap * (*get_font_map) (PangoFont *font);
PangoFontDescription *(*describe_absolute) (PangoFont *font);
- hb_font_t * (*get_hb_font) (PangoFont *font);
+ hb_font_t * (*create_hb_font) (PangoFont *font);
/*< private >*/
/* Padding for future expansion */
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c
index ee51444d..fffc6e2d 100644
--- a/pango/pangofc-font.c
+++ b/pango/pangofc-font.c
@@ -89,7 +89,7 @@ static PangoFontMetrics * pango_fc_font_get_metrics (PangoFont *font,
static PangoFontMap * pango_fc_font_get_font_map (PangoFont *font);
static PangoFontDescription *pango_fc_font_describe (PangoFont *font);
static PangoFontDescription *pango_fc_font_describe_absolute (PangoFont *font);
-static hb_font_t * pango_fc_font_get_hb_font (PangoFont *font);
+static hb_font_t * pango_fc_font_create_hb_font (PangoFont *font);
#define PANGO_FC_FONT_LOCK_FACE(font) (PANGO_FC_FONT_GET_CLASS (font)->lock_face (font))
#define PANGO_FC_FONT_UNLOCK_FACE(font) (PANGO_FC_FONT_GET_CLASS (font)->unlock_face (font))
@@ -116,7 +116,7 @@ pango_fc_font_class_init (PangoFcFontClass *class)
font_class->get_coverage = pango_fc_font_get_coverage;
font_class->get_metrics = pango_fc_font_get_metrics;
font_class->get_font_map = pango_fc_font_get_font_map;
- font_class->get_hb_font = pango_fc_font_get_hb_font;
+ font_class->create_hb_font = pango_fc_font_create_hb_font;
g_object_class_install_property (object_class, PROP_PATTERN,
g_param_spec_pointer ("pattern",
@@ -1069,7 +1069,7 @@ pango_fc_font_get_raw_extents (PangoFcFont *fcfont,
}
static hb_font_t *
-pango_fc_font_get_hb_font (PangoFont *font)
+pango_fc_font_create_hb_font (PangoFont *font)
{
PangoFcFont *fcfont = PANGO_FC_FONT (font);
hb_face_t *hb_face;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]