summaryrefslogtreecommitdiff
path: root/src/cairo-user-font.c
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2021-08-30 20:41:18 +0930
committerAdrian Johnson <ajohnson@redneon.com>2021-09-18 07:05:35 +0930
commit8ea4ae5413bd8ae1497e11a473d173cfc2475ae6 (patch)
tree7fc073d2416c0d95c3c5ce5c2277db4b3db36c7e /src/cairo-user-font.c
parent994e33215e35e49981dea5b459a9b5b85d4cd1b1 (diff)
downloadcairo-8ea4ae5413bd8ae1497e11a473d173cfc2475ae6.tar.gz
Allow user fonts to use the foreground color
Diffstat (limited to 'src/cairo-user-font.c')
-rw-r--r--src/cairo-user-font.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/cairo-user-font.c b/src/cairo-user-font.c
index 47b9f0422..d6427f060 100644
--- a/src/cairo-user-font.c
+++ b/src/cairo-user-font.c
@@ -171,15 +171,21 @@ _cairo_user_scaled_glyph_init (void *abstract_font,
status = CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED;
if (face->scaled_font_methods.render_color_glyph) {
+ cairo_pattern_t *pattern;
+
recording_surface = _cairo_user_scaled_font_create_recording_surface (scaled_font, TRUE);
cr = _cairo_user_scaled_font_create_recording_context (scaled_font, recording_surface, TRUE);
+ pattern = cairo_pattern_create_rgb (0, 0, 0);
+ pattern->is_userfont_foreground = TRUE;
+ cairo_set_source (cr, pattern);
+ cairo_pattern_destroy (pattern);
status = face->scaled_font_methods.render_color_glyph ((cairo_scaled_font_t *)scaled_font,
_cairo_scaled_glyph_index(scaled_glyph),
cr, &extents);
if (status == CAIRO_INT_STATUS_SUCCESS) {
status = cairo_status (cr);
- scaled_glyph->has_color = TRUE;
+ scaled_glyph->recording_is_color = TRUE;
}
}
@@ -260,7 +266,7 @@ _cairo_user_scaled_glyph_init (void *abstract_font,
height = _cairo_fixed_integer_ceil (scaled_glyph->bbox.p2.y) -
_cairo_fixed_integer_floor (scaled_glyph->bbox.p1.y);
- if (scaled_glyph->has_color) {
+ if (scaled_glyph->recording_is_color) {
format = CAIRO_FORMAT_ARGB32;
} else {
switch (scaled_font->base.options.antialias) {
@@ -285,20 +291,27 @@ _cairo_user_scaled_glyph_init (void *abstract_font,
cairo_surface_set_device_offset (surface,
- _cairo_fixed_integer_floor (scaled_glyph->bbox.p1.x),
- _cairo_fixed_integer_floor (scaled_glyph->bbox.p1.y));
- status = _cairo_recording_surface_replay (recording_surface, surface);
+
+ if (scaled_glyph->recording_is_color) {
+ status = _cairo_recording_surface_replay_with_foreground_color (recording_surface,
+ surface,
+ foreground_color);
+ } else {
+ status = _cairo_recording_surface_replay (recording_surface, surface);
+ }
if (unlikely (status)) {
cairo_surface_destroy(surface);
return status;
}
- if (!scaled_glyph->has_color && (info & CAIRO_SCALED_GLYPH_INFO_SURFACE)) {
+ if (!scaled_glyph->recording_is_color && (info & CAIRO_SCALED_GLYPH_INFO_SURFACE)) {
_cairo_scaled_glyph_set_surface (scaled_glyph,
&scaled_font->base,
(cairo_image_surface_t *) surface);
}
- if (scaled_glyph->has_color && (info & CAIRO_SCALED_GLYPH_INFO_COLOR_SURFACE)) {
+ if (scaled_glyph->recording_is_color && (info & CAIRO_SCALED_GLYPH_INFO_COLOR_SURFACE)) {
_cairo_scaled_glyph_set_color_surface (scaled_glyph,
&scaled_font->base,
(cairo_image_surface_t *)surface,