[gnome-shell] st: Add more error checking to shadow-related code
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st: Add more error checking to shadow-related code
- Date: Mon, 21 Mar 2011 22:28:04 +0000 (UTC)
commit c58b8498b354244524a4a9628f53a7d29e49c7fc
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Fri Mar 11 15:29:15 2011 -0500
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).
src/st/st-label.c | 9 +++++----
src/st/st-private.c | 31 ++++++++++++++++++++-----------
2 files changed, 25 insertions(+), 15 deletions(-)
---
diff --git a/src/st/st-label.c b/src/st/st-label.c
index 53fd844..1d9b13d 100644
--- a/src/st/st-label.c
+++ b/src/st/st-label.c
@@ -243,10 +243,11 @@ st_label_paint (ClutterActor *actor)
priv->text_shadow_material = material;
}
- _st_paint_shadow_with_opacity (shadow_spec,
- priv->text_shadow_material,
- &allocation,
- clutter_actor_get_paint_opacity (priv->label));
+ if (priv->text_shadow_material != COGL_INVALID_HANDLE)
+ _st_paint_shadow_with_opacity (shadow_spec,
+ priv->text_shadow_material,
+ &allocation,
+ clutter_actor_get_paint_opacity (priv->label));
}
clutter_actor_paint (priv->label);
diff --git a/src/st/st-private.c b/src/st/st-private.c
index e265789..f97c2de 100644
--- a/src/st/st-private.c
+++ b/src/st/st-private.c
@@ -604,31 +604,40 @@ _st_create_shadow_material_from_actor (StShadow *shadow_spec,
{
CoglHandle buffer, offscreen;
ClutterActorBox box;
+ CoglColor clear_color;
float width, height;
clutter_actor_get_allocation_box (actor, &box);
clutter_actor_box_get_size (&box, &width, &height);
+ if (width == 0 || height == 0)
+ return COGL_INVALID_HANDLE;
+
buffer = cogl_texture_new_with_size (width,
height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
+
+ if (buffer == COGL_INVALID_HANDLE)
+ return COGL_INVALID_HANDLE;
+
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_push_framebuffer (offscreen);
- cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
- cogl_ortho (0, width, height, 0, 0, 1.0);
- clutter_actor_paint (actor);
- cogl_pop_framebuffer ();
- cogl_handle_unref (offscreen);
+ cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
+ cogl_push_framebuffer (offscreen);
+ cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
+ cogl_ortho (0, width, height, 0, 0, 1.0);
+ clutter_actor_paint (actor);
+ cogl_pop_framebuffer ();
+ 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);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]