Index: clutter/clutter-label.c
===================================================================
--- clutter/clutter-label.c	(revision 3353)
+++ clutter/clutter-label.c	(working copy)
@@ -63,6 +63,8 @@
   PROP_WRAP_MODE,
   PROP_JUSTIFY,
   PROP_ELLIPSIZE,
+  PROP_OUTLINE,
+  PROP_OUTLINE_WIDTH,
 };
 
 #define CLUTTER_LABEL_GET_PRIVATE(obj) \
@@ -107,7 +109,10 @@
   guint                 single_line_mode : 1;
   guint                 wrap_mode        : 3;
   guint                 justify          : 1;
+  guint                 outline          : 1;
 
+  gfloat                outline_width;
+
   PangoAttrList        *attrs;
   PangoAttrList        *effective_attrs;
 
@@ -300,7 +305,7 @@
   memcpy (&color, &priv->fgcol, sizeof (ClutterColor));
   color.alpha = clutter_actor_get_paint_opacity (self);
 
-  pango_clutter_render_layout (layout, 0, 0, &color, 0);
+  pango_clutter_render_layout (layout, 0, 0, &color, 0, priv->outline, priv->outline_width);
 }
 
 static void
@@ -461,6 +466,12 @@
     case PROP_ELLIPSIZE:
       clutter_label_set_ellipsize (label, g_value_get_enum (value));
       break;
+    case PROP_OUTLINE:
+      clutter_label_set_outline (label, g_value_get_boolean (value));
+      break;
+    case PROP_OUTLINE_WIDTH:
+      clutter_label_set_outline_width (label, g_value_get_float (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -513,6 +524,12 @@
     case PROP_ELLIPSIZE:
       g_value_set_enum (value, priv->ellipsize);
       break;
+    case PROP_OUTLINE:
+      g_value_set_boolean (value, priv->outline);
+      break;
+    case PROP_OUTLINE_WIDTH:
+      g_value_set_float (value, priv->outline_width);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -621,6 +638,22 @@
                                                          FALSE,
                                                          CLUTTER_PARAM_READWRITE));
 
+  g_object_class_install_property (gobject_class,
+				   PROP_OUTLINE,
+				   g_param_spec_boolean ("outline",
+							 "Outline",
+							 "",
+							 FALSE,
+							 CLUTTER_PARAM_READWRITE));
+  g_object_class_install_property (gobject_class,
+				   PROP_OUTLINE_WIDTH,
+				   g_param_spec_float ("outline-width",
+							"Outline Width",
+							"",
+							0.0f, G_MAXFLOAT,
+							0.0f,
+							CLUTTER_PARAM_READWRITE));
+
   g_type_class_add_private (gobject_class, sizeof (ClutterLabelPrivate));
 }
 
@@ -642,6 +675,8 @@
   priv->use_underline = FALSE;
   priv->use_markup    = FALSE;
   priv->justify       = FALSE;
+  priv->outline       = FALSE;
+  priv->outline_width = 0.0f;
 
   for (i = 0; i < CLUTTER_LABEL_N_CACHED_LAYOUTS; i++)
     priv->cached_layouts[i].layout = NULL;
@@ -1301,3 +1336,63 @@
 
   return label->priv->justify;
 }
+
+void
+clutter_label_set_outline (ClutterLabel *label,
+			   gboolean     outline)
+{
+  ClutterLabelPrivate *priv;
+
+  g_return_if_fail (CLUTTER_IS_LABEL (label));
+
+  priv = label->priv;
+
+  if (priv->outline != outline)
+    {
+      priv->outline = outline;
+
+      clutter_label_dirty_cache (label);
+
+      clutter_actor_queue_relayout (CLUTTER_ACTOR (label));
+
+      g_object_notify (G_OBJECT (label), "outline");
+    }
+}
+
+gboolean
+clutter_label_get_outline (ClutterLabel *label)
+{
+  g_return_val_if_fail (CLUTTER_IS_LABEL (label), FALSE);
+
+  return label->priv->outline;
+}
+
+void
+clutter_label_set_outline_width (ClutterLabel *label,
+				 gfloat       outline_width)
+{
+  ClutterLabelPrivate *priv;
+
+  g_return_if_fail (CLUTTER_IS_LABEL (label));
+
+  priv = label->priv;
+
+  if (priv->outline_width != outline_width)
+    {
+      priv->outline_width = outline_width;
+
+      clutter_label_dirty_cache (label);
+
+      clutter_actor_queue_relayout (CLUTTER_ACTOR (label));
+
+      g_object_notify (G_OBJECT (label), "outline-width");
+    }
+}
+
+gfloat
+clutter_label_get_outline_width (ClutterLabel *label)
+{
+  g_return_val_if_fail (CLUTTER_IS_LABEL (label), 0.0f);
+
+  return (label->priv->outline_width);
+}
