summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-08-03 15:59:58 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-08-03 16:30:23 -0400
commit77b78746c901f95ca45a9ccffe9c32a38c0fb32b (patch)
treed9902f62f26390d1fb8ae75ab20b2df45ef6ba49
parentb5634799586ed8e3496ffc237b8d08e6d4e64d67 (diff)
downloadpango-77b78746c901f95ca45a9ccffe9c32a38c0fb32b.tar.gz
context: Add an option for rounding glyph positions
This is a global option, similar in spirit to font options, so it makes sense to keep it in PangoContext. Default to rounding glyph positions, which preserves the pre-1.44 behavior and should help cure all the 'broken' font rendering with older cairo versions.
-rw-r--r--docs/pango-sections.txt2
-rw-r--r--pango/pango-context.c46
-rw-r--r--pango/pango-context.h7
3 files changed, 55 insertions, 0 deletions
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
index 2855c247..7a95d401 100644
--- a/docs/pango-sections.txt
+++ b/docs/pango-sections.txt
@@ -62,6 +62,8 @@ pango_context_get_gravity_hint
pango_context_set_gravity_hint
pango_context_get_matrix
pango_context_set_matrix
+pango_context_get_round_glyph_positions
+pango_context_set_round_glyph_positions
pango_context_load_font
pango_context_load_fontset
pango_context_get_metrics
diff --git a/pango/pango-context.c b/pango/pango-context.c
index 6ba64ce1..99fa454a 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -79,6 +79,8 @@ struct _PangoContext
PangoMatrix *matrix;
PangoFontMap *font_map;
+
+ gboolean round_glyph_positions;
};
struct _PangoContextClass
@@ -103,6 +105,7 @@ pango_context_init (PangoContext *context)
context->set_language = NULL;
context->language = pango_language_get_default ();
context->font_map = NULL;
+ context->round_glyph_positions = TRUE;
context->font_desc = pango_font_description_new ();
pango_font_description_set_family_static (context->font_desc, "serif");
@@ -1857,3 +1860,46 @@ pango_context_get_serial (PangoContext *context)
check_fontmap_changed (context);
return context->serial;
}
+
+/**
+ * pango_context_set_round_glyph_positions:
+ * @context: a #PangoContext
+ * @round_positions: whether to round glyph positions
+ *
+ * Sets whether font rendering with this context should
+ * round glyph positions and widths to integral positions,
+ * in device units.
+ *
+ * This is useful when the renderer can't handle subpixel
+ * positioning of glyphs.
+ *
+ * The default value is to round glyph positions, to remain
+ * compatible with previous Pango behavior.
+ *
+ * Since: 1.44
+ */
+void
+pango_context_set_round_glyph_positions (PangoContext *context,
+ gboolean round_positions)
+{
+ if (context->round_glyph_positions != round_positions)
+ {
+ context->round_glyph_positions = round_positions;
+ context_changed (context);
+ }
+}
+
+/**
+ * pango_context_get_round_glyph_positions:
+ * @context: a #PangoContext
+ *
+ * Returns whether font rendering with this context should
+ * round glyph positions and widths.
+ *
+ * Since: 1.44
+ */
+gboolean
+pango_context_get_round_glyph_positions (PangoContext *context)
+{
+ return context->round_glyph_positions;
+}
diff --git a/pango/pango-context.h b/pango/pango-context.h
index af934491..0f775ff4 100644
--- a/pango/pango-context.h
+++ b/pango/pango-context.h
@@ -113,6 +113,13 @@ void pango_context_set_matrix (PangoContext
PANGO_AVAILABLE_IN_1_6
const PangoMatrix * pango_context_get_matrix (PangoContext *context);
+PANGO_AVAILABLE_IN_1_44
+void pango_context_set_round_glyph_positions (PangoContext *context,
+ gboolean round_positions);
+PANGO_AVAILABLE_IN_1_44
+gboolean pango_context_get_round_glyph_positions (PangoContext *context);
+
+
/* Break a string of Unicode characters into segments with
* consistent shaping/language engine and bidrectional level.
* Returns a #GList of #PangoItem's