diff options
Diffstat (limited to 'pango/pango-coverage.c')
-rw-r--r-- | pango/pango-coverage.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/pango/pango-coverage.c b/pango/pango-coverage.c index 281407a2..d7b5b2a8 100644 --- a/pango/pango-coverage.c +++ b/pango/pango-coverage.c @@ -23,6 +23,8 @@ #include <string.h> #include "pango-coverage-private.h" +#include "pango-userface-private.h" + G_DEFINE_TYPE (PangoCoverage, pango_coverage, G_TYPE_OBJECT) @@ -38,6 +40,8 @@ pango_coverage_finalize (GObject *object) if (coverage->chars) hb_set_destroy (coverage->chars); + if (coverage->face) + g_object_unref (coverage->face); G_OBJECT_CLASS (pango_coverage_parent_class)->finalize (object); } @@ -46,6 +50,14 @@ static PangoCoverageLevel pango_coverage_real_get (PangoCoverage *coverage, int index) { + if (coverage->face) + { + if (pango_user_face_has_char (coverage->face, index)) + return PANGO_COVERAGE_EXACT; + else + return PANGO_COVERAGE_NONE; + } + if (coverage->chars == NULL) return PANGO_COVERAGE_NONE; @@ -60,6 +72,9 @@ pango_coverage_real_set (PangoCoverage *coverage, int index, PangoCoverageLevel level) { + if (coverage->face) + return; + if (coverage->chars == NULL) coverage->chars = hb_set_create (); @@ -88,6 +103,8 @@ pango_coverage_real_copy (PangoCoverage *coverage) hb_set_add (copy->chars, (hb_codepoint_t)i); } } + if (coverage->face) + copy->face = g_object_ref (coverage->face); return copy; } @@ -140,6 +157,18 @@ pango_coverage_new_for_hb_face (hb_face_t *hb_face) return coverage; } +PangoCoverage * +pango_coverage_new_for_user_face (PangoUserFace *face) +{ + PangoCoverage *coverage; + + coverage = g_object_new (PANGO_TYPE_COVERAGE, NULL); + + coverage->face = g_object_ref (face); + + return coverage; +} + /** * pango_coverage_copy: * @coverage: a `PangoCoverage` |