summaryrefslogtreecommitdiff
path: root/pango/pango-coverage.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pango-coverage.c')
-rw-r--r--pango/pango-coverage.c29
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`