st_theme_node_prerender_shadow: guard against failure to allocate a texture

If we are trying to render a shadow at a size that is very large in one
direction, but small in the other direction (so that we don't 9-slice
the texture), then allocating the backing texture for the offscreen
buffer may fail due to texture-size limits. Don't crash in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=757150
This commit is contained in:
Owen W. Taylor 2015-10-26 13:35:49 -04:00
parent 3e602b1765
commit 8b7464c648

View File

@ -2162,7 +2162,7 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
guint border_radius[4];
int max_borders[4];
int center_radius, corner_id;
CoglHandle buffer, offscreen;
CoglHandle buffer, offscreen = COGL_INVALID_HANDLE;
/* Get infos from the node */
if (state->alloc_width < node->box_shadow_min_width ||
@ -2203,7 +2203,8 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
state->box_shadow_height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
offscreen = cogl_offscreen_new_with_texture (buffer);
if (buffer != COGL_INVALID_HANDLE)
offscreen = cogl_offscreen_new_with_texture (buffer);
if (offscreen != COGL_INVALID_HANDLE)
{
@ -2220,7 +2221,9 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
state->box_shadow_pipeline = _st_create_shadow_pipeline (st_theme_node_get_box_shadow (node),
buffer);
}
cogl_handle_unref (buffer);
if (buffer != COGL_INVALID_HANDLE)
cogl_handle_unref (buffer);
}
static void