forked from AuroraMiddleware/gtk
Merge branch 'glyph-memdup' into 'master'
gl: Avoid a memdup in glyph upload See merge request GNOME/gtk!907
This commit is contained in:
commit
286fd742a6
@ -215,6 +215,8 @@ render_glyph (const GskGLGlyphAtlas *atlas,
|
|||||||
PangoGlyphString glyph_string;
|
PangoGlyphString glyph_string;
|
||||||
PangoGlyphInfo glyph_info;
|
PangoGlyphInfo glyph_info;
|
||||||
int surface_width, surface_height;
|
int surface_width, surface_height;
|
||||||
|
int stride;
|
||||||
|
unsigned char *data;
|
||||||
|
|
||||||
scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)key->font);
|
scaled_font = pango_cairo_font_get_scaled_font ((PangoCairoFont *)key->font);
|
||||||
if (G_UNLIKELY (!scaled_font || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS))
|
if (G_UNLIKELY (!scaled_font || cairo_scaled_font_status (scaled_font) != CAIRO_STATUS_SUCCESS))
|
||||||
@ -228,7 +230,11 @@ render_glyph (const GskGLGlyphAtlas *atlas,
|
|||||||
if (surface_width > atlas->width || surface_height > atlas->height)
|
if (surface_width > atlas->width || surface_height > atlas->height)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, surface_width, surface_height);
|
stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32, surface_width);
|
||||||
|
data = g_malloc0 (stride * surface_height);
|
||||||
|
surface = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_ARGB32,
|
||||||
|
surface_width, surface_height,
|
||||||
|
stride);
|
||||||
cairo_surface_set_device_scale (surface, key->scale / 1024.0, key->scale / 1024.0);
|
cairo_surface_set_device_scale (surface, key->scale / 1024.0, key->scale / 1024.0);
|
||||||
|
|
||||||
cr = cairo_create (surface);
|
cr = cairo_create (surface);
|
||||||
@ -255,8 +261,7 @@ render_glyph (const GskGLGlyphAtlas *atlas,
|
|||||||
region->width = cairo_image_surface_get_width (surface);
|
region->width = cairo_image_surface_get_width (surface);
|
||||||
region->height = cairo_image_surface_get_height (surface);
|
region->height = cairo_image_surface_get_height (surface);
|
||||||
region->stride = cairo_image_surface_get_stride (surface);
|
region->stride = cairo_image_surface_get_stride (surface);
|
||||||
region->data = g_memdup (cairo_image_surface_get_data (surface),
|
region->data = data;
|
||||||
region->stride * region->height * sizeof (guchar));
|
|
||||||
region->x = (gsize)(value->tx * atlas->width);
|
region->x = (gsize)(value->tx * atlas->width);
|
||||||
region->y = (gsize)(value->ty * atlas->height);
|
region->y = (gsize)(value->ty * atlas->height);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user