[gnome-shell] st: Add more error checking to shadow-related code



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]