diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-09-18 00:26:14 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-09-18 00:26:14 +0000 |
commit | ece5fd7db5bbffe4db2d76c15534eee11e406e12 (patch) | |
tree | 063f7031417613e18c39025fe3a9abe02f83f08d | |
parent | a1adaac69b825e14953644c5901c7e0f4580890e (diff) | |
parent | 7e4b2b971ff9b3d53c56fd96632e351cff8749bb (diff) | |
download | gtk+-ece5fd7db5bbffe4db2d76c15534eee11e406e12.tar.gz |
Merge branch 'more-glyph-drawing-fixes' into 'master'
ngl: Use exact device scales for glyphs
See merge request GNOME/gtk!3971
-rw-r--r-- | gsk/gskrendernodeimpl.c | 8 | ||||
-rw-r--r-- | gsk/ngl/gsknglglyphlibrary.c | 27 |
2 files changed, 16 insertions, 19 deletions
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c index 18cbcd185a..fd2a9e5d44 100644 --- a/gsk/gskrendernodeimpl.c +++ b/gsk/gskrendernodeimpl.c @@ -4477,10 +4477,10 @@ gsk_text_node_new (PangoFont *font, self->num_glyphs = n; graphene_rect_init (&node->bounds, - offset->x + ink_rect.x, - offset->y + ink_rect.y, - ink_rect.width, - ink_rect.height); + offset->x + ink_rect.x - 1, + offset->y + ink_rect.y - 1, + ink_rect.width + 2, + ink_rect.height + 2); return node; } diff --git a/gsk/ngl/gsknglglyphlibrary.c b/gsk/ngl/gsknglglyphlibrary.c index 9c184ed0f7..33c86cc967 100644 --- a/gsk/ngl/gsknglglyphlibrary.c +++ b/gsk/ngl/gsknglglyphlibrary.c @@ -132,7 +132,8 @@ gsk_ngl_glyph_library_create_surface (GskNglGlyphLibrary *self, int stride, int width, int height, - double device_scale) + int uwidth, + int uheight) { cairo_surface_t *surface; gsize n_bytes; @@ -153,7 +154,7 @@ gsk_ngl_glyph_library_create_surface (GskNglGlyphLibrary *self, surface = cairo_image_surface_create_for_data (self->surface_data, CAIRO_FORMAT_ARGB32, width, height, stride); - cairo_surface_set_device_scale (surface, device_scale, device_scale); + cairo_surface_set_device_scale (surface, width / (double)uwidth, height / (double)uheight); return surface; } @@ -192,7 +193,8 @@ gsk_ngl_glyph_library_upload_glyph (GskNglGlyphLibrary *self, int y, int width, int height, - double device_scale) + int uwidth, + int uheight) { GskNglTextureLibrary *tl = (GskNglTextureLibrary *)self; G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME; @@ -220,7 +222,7 @@ gsk_ngl_glyph_library_upload_glyph (GskNglGlyphLibrary *self, "Uploading glyph %d", key->glyph); - surface = gsk_ngl_glyph_library_create_surface (self, stride, width, height, device_scale); + surface = gsk_ngl_glyph_library_create_surface (self, stride, width, height, uwidth, uheight); render_glyph (surface, scaled_font, key, value); texture_id = GSK_NGL_TEXTURE_ATLAS_ENTRY_TEXTURE (value); @@ -289,16 +291,10 @@ gsk_ngl_glyph_library_add (GskNglGlyphLibrary *self, pango_font_get_glyph_extents (key->font, key->glyph, &ink_rect, NULL); pango_extents_to_pixels (&ink_rect, NULL); - if (key->xshift != 0) - { - ink_rect.x -= 1; - ink_rect.width += 2; - } - if (key->yshift != 0) - { - ink_rect.y -= 1; - ink_rect.height += 2; - } + ink_rect.x -= 1; + ink_rect.width += 2; + ink_rect.y -= 1; + ink_rect.height += 2; width = (int) ceil (ink_rect.width * key->scale / 1024.0); height = (int) ceil (ink_rect.height * key->scale / 1024.0); @@ -321,7 +317,8 @@ gsk_ngl_glyph_library_add (GskNglGlyphLibrary *self, packed_y + 1, width, height, - key->scale / 1024.0); + ink_rect.width, + ink_rect.height); *out_value = value; |