stage: Add :use-alpha property

The ClutterStage:use-alpha property is used to let a stage know that it
should honour the alpha component of the ClutterStage:color property.

If :use-alpha is set to FALSE the stage always uses the full opacity
when clearing itself before a paint(); otherwise, the alpha value is
used.
This commit is contained in:
Emmanuele Bassi 2009-12-01 16:16:18 +00:00
parent 1d87ecc6a1
commit 2f7ff4d3e3

View File

@ -96,6 +96,7 @@ struct _ClutterStagePrivate
guint is_user_resizable : 1; guint is_user_resizable : 1;
guint use_fog : 1; guint use_fog : 1;
guint throttle_motion_events : 1; guint throttle_motion_events : 1;
guint use_alpha : 1;
}; };
enum enum
@ -110,7 +111,8 @@ enum
PROP_TITLE, PROP_TITLE,
PROP_USER_RESIZE, PROP_USER_RESIZE,
PROP_USE_FOG, PROP_USE_FOG,
PROP_FOG PROP_FOG,
PROP_USE_ALPHA
}; };
enum enum
@ -250,7 +252,9 @@ clutter_stage_paint (ClutterActor *self)
priv->color.red, priv->color.red,
priv->color.green, priv->color.green,
priv->color.blue, priv->color.blue,
priv->color.alpha); priv->use_alpha
? priv->color.alpha
: 255);
cogl_clear (&stage_color, cogl_clear (&stage_color,
COGL_BUFFER_BIT_COLOR | COGL_BUFFER_BIT_COLOR |
COGL_BUFFER_BIT_DEPTH); COGL_BUFFER_BIT_DEPTH);
@ -289,7 +293,8 @@ clutter_stage_pick (ClutterActor *self,
*/ */
clutter_container_foreach (CLUTTER_CONTAINER (self), clutter_container_foreach (CLUTTER_CONTAINER (self),
CLUTTER_CALLBACK (clutter_actor_paint), NULL); CLUTTER_CALLBACK (clutter_actor_paint),
NULL);
} }
static void static void
@ -660,6 +665,11 @@ clutter_stage_set_property (GObject *object,
clutter_stage_set_fog (stage, g_value_get_boxed (value)); clutter_stage_set_fog (stage, g_value_get_boxed (value));
break; break;
case PROP_USE_ALPHA:
stage->priv->use_alpha = g_value_get_boolean (value);
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -712,6 +722,10 @@ clutter_stage_get_property (GObject *gobject,
g_value_set_boxed (value, &priv->fog); g_value_set_boxed (value, &priv->fog);
break; break;
case PROP_USE_ALPHA:
g_value_set_boolean (value, priv->use_alpha);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@ -939,6 +953,24 @@ clutter_stage_class_init (ClutterStageClass *klass)
CLUTTER_PARAM_READWRITE); CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_FOG, pspec); g_object_class_install_property (gobject_class, PROP_FOG, pspec);
/**
* ClutterStage:use-alpha:
*
* Whether the #ClutterStage should honour the alpha component of the
* #ClutterStage:color property when painting. If Clutter is run under
* a compositing manager this will result in the stage being blended
* with the underlying window(s)
*
* Since: 1.2
*/
pspec = g_param_spec_boolean ("use-alpha",
"Use Alpha",
"Whether to honour the alpha component of "
"the stage color",
FALSE,
CLUTTER_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_USE_ALPHA, pspec);
/** /**
* ClutterStage::fullscreen * ClutterStage::fullscreen
* @stage: the stage which was fullscreened * @stage: the stage which was fullscreened