st: Add more error checking to shadow-related code

The additional error checks should catch quite some warnings (e.g.
when trying to create a shadow for a 0-width actor).
This commit is contained in:
Jasper St. Pierre 2011-03-11 15:29:15 -05:00 committed by Florian Müllner
parent c81c564941
commit c58b8498b3
2 changed files with 26 additions and 16 deletions

View File

@ -243,6 +243,7 @@ st_label_paint (ClutterActor *actor)
priv->text_shadow_material = material; priv->text_shadow_material = material;
} }
if (priv->text_shadow_material != COGL_INVALID_HANDLE)
_st_paint_shadow_with_opacity (shadow_spec, _st_paint_shadow_with_opacity (shadow_spec,
priv->text_shadow_material, priv->text_shadow_material,
&allocation, &allocation,

View File

@ -604,20 +604,30 @@ _st_create_shadow_material_from_actor (StShadow *shadow_spec,
{ {
CoglHandle buffer, offscreen; CoglHandle buffer, offscreen;
ClutterActorBox box; ClutterActorBox box;
CoglColor clear_color;
float width, height; float width, height;
clutter_actor_get_allocation_box (actor, &box); clutter_actor_get_allocation_box (actor, &box);
clutter_actor_box_get_size (&box, &width, &height); clutter_actor_box_get_size (&box, &width, &height);
if (width == 0 || height == 0)
return COGL_INVALID_HANDLE;
buffer = cogl_texture_new_with_size (width, buffer = cogl_texture_new_with_size (width,
height, height,
COGL_TEXTURE_NO_SLICING, COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY); COGL_PIXEL_FORMAT_ANY);
if (buffer == COGL_INVALID_HANDLE)
return COGL_INVALID_HANDLE;
offscreen = cogl_offscreen_new_to_texture (buffer); offscreen = cogl_offscreen_new_to_texture (buffer);
if (offscreen != COGL_INVALID_HANDLE) if (offscreen == COGL_INVALID_HANDLE)
{ {
CoglColor clear_color; cogl_handle_unref (buffer);
return COGL_INVALID_HANDLE;
}
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0); cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
cogl_push_framebuffer (offscreen); cogl_push_framebuffer (offscreen);
@ -628,7 +638,6 @@ _st_create_shadow_material_from_actor (StShadow *shadow_spec,
cogl_handle_unref (offscreen); cogl_handle_unref (offscreen);
shadow_material = _st_create_shadow_material (shadow_spec, buffer); shadow_material = _st_create_shadow_material (shadow_spec, buffer);
}
cogl_handle_unref (buffer); cogl_handle_unref (buffer);
} }