diff options
author | Matthias Clasen <mclasen@redhat.com> | 2022-07-09 10:17:40 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2022-07-09 11:39:36 -0400 |
commit | a1eadd9d8f0e5c662ba34f94a9bb998aa2c2c759 (patch) | |
tree | 50a989475412e1eee43a8284e4d3c46baea3171c | |
parent | 42079c554c0ac67d996a5ce7ee760de4dbfb3f88 (diff) | |
download | pango-a1eadd9d8f0e5c662ba34f94a9bb998aa2c2c759.tar.gz |
Add pango2_generic_family_get_families
This is useful when dumping fontmaps.
-rw-r--r-- | pango2/pango-generic-family.c | 91 | ||||
-rw-r--r-- | pango2/pango-generic-family.h | 4 |
2 files changed, 95 insertions, 0 deletions
diff --git a/pango2/pango-generic-family.c b/pango2/pango-generic-family.c index c0697f00..bfa5ceb4 100644 --- a/pango2/pango-generic-family.c +++ b/pango2/pango-generic-family.c @@ -94,6 +94,78 @@ pango2_generic_family_list_model_init (GListModelInterface *iface) iface->get_item = pango2_generic_family_get_item; } + /* }}} */ +/* {{{ Family list model implementation */ + +G_DECLARE_FINAL_TYPE (Pango2FamilyModel, pango2_family_model, PANGO2, FAMILY_MODEL, GObject) + +struct _Pango2FamilyModel { + GObject parent; + Pango2GenericFamily *family; +}; + +struct _Pango2FamilyModelClass { + GObjectClass parent_class; +}; + +static GType +pango2_family_model_get_item_type (GListModel *list) +{ + return PANGO2_TYPE_FONT_FAMILY; +} + +static guint +pango2_family_model_get_n_items (GListModel *list) +{ + Pango2FamilyModel *self = PANGO2_FAMILY_MODEL (list); + + return self->family->families->len; +} + +static gpointer +pango2_family_model_get_item (GListModel *list, + guint position) +{ + Pango2FamilyModel *self = PANGO2_FAMILY_MODEL (list); + + if (position < self->family->families->len) + return g_object_ref (g_ptr_array_index (self->family->families, position)); + + return NULL; +} + +static void +pango2_family_model_list_model_init (GListModelInterface *iface) +{ + iface->get_item_type = pango2_family_model_get_item_type; + iface->get_n_items = pango2_family_model_get_n_items; + iface->get_item = pango2_family_model_get_item; +} + +G_DEFINE_TYPE_WITH_CODE (Pango2FamilyModel, pango2_family_model, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL, pango2_family_model_list_model_init)) + +static void +pango2_family_model_init (Pango2FamilyModel *self) +{ +} + +static void +pango2_family_model_finalize (GObject *object) +{ + Pango2FamilyModel *self = PANGO2_FAMILY_MODEL (object); + + g_object_unref (self->family); + + G_OBJECT_CLASS (pango2_family_model_parent_class)->finalize (object); +} + +static void +pango2_family_model_class_init (Pango2FamilyModelClass *class) +{ + G_OBJECT_CLASS (class)->finalize = pango2_family_model_finalize; +} + /* }}} */ /* {{{ Pango2FontFamily implementation */ @@ -221,6 +293,25 @@ pango2_generic_family_add_family (Pango2GenericFamily *self, g_ptr_array_add (self->families, g_object_ref (family)); } +/** + * pango2_generic_family_get_families: + * @self: a `Pango2GenericFamily` + * + * Returns a list model of the families contained in the generic family. + * + * Returns: (transfer full): a list model of families + */ +GListModel * +pango2_generic_family_get_families (Pango2GenericFamily *self) +{ + Pango2FamilyModel *model; + + model = g_object_new (pango2_family_model_get_type (), NULL); + model->family = g_object_ref (self); + + return G_LIST_MODEL (model); +} + /* }}} */ /* vim:set foldmethod=marker expandtab: */ diff --git a/pango2/pango-generic-family.h b/pango2/pango-generic-family.h index ab1d0fd2..6246d3a9 100644 --- a/pango2/pango-generic-family.h +++ b/pango2/pango-generic-family.h @@ -20,6 +20,7 @@ #pragma once #include "pango-font.h" +#include <gio/gio.h> G_BEGIN_DECLS @@ -35,4 +36,7 @@ PANGO2_AVAILABLE_IN_ALL void pango2_generic_family_add_family (Pango2GenericFamily *self, Pango2FontFamily *family); +PANGO2_AVAILABLE_IN_ALL +GListModel * pango2_generic_family_get_families (Pango2GenericFamily *self); + G_END_DECLS |