MetaBackgroundActor: add a dim-factor property
This property darkens the background. https://bugzilla.gnome.org/show_bug.cgi?id=656433
This commit is contained in:
parent
c630046858
commit
53e70b3e99
@ -69,8 +69,20 @@ struct _MetaBackgroundActor
|
|||||||
MetaScreenBackground *background;
|
MetaScreenBackground *background;
|
||||||
CoglHandle material;
|
CoglHandle material;
|
||||||
cairo_region_t *visible_region;
|
cairo_region_t *visible_region;
|
||||||
|
float dim_factor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_0,
|
||||||
|
|
||||||
|
PROP_DIM_FACTOR,
|
||||||
|
|
||||||
|
PROP_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *obj_props[PROP_LAST];
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR);
|
G_DEFINE_TYPE (MetaBackgroundActor, meta_background_actor, CLUTTER_TYPE_ACTOR);
|
||||||
|
|
||||||
static void set_texture (MetaScreenBackground *background,
|
static void set_texture (MetaScreenBackground *background,
|
||||||
@ -284,13 +296,19 @@ static void
|
|||||||
meta_background_actor_paint (ClutterActor *actor)
|
meta_background_actor_paint (ClutterActor *actor)
|
||||||
{
|
{
|
||||||
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (actor);
|
||||||
guchar opacity = clutter_actor_get_paint_opacity (actor);
|
guint8 opacity = clutter_actor_get_paint_opacity (actor);
|
||||||
|
guint8 color_component;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
meta_screen_get_size (self->background->screen, &width, &height);
|
meta_screen_get_size (self->background->screen, &width, &height);
|
||||||
|
|
||||||
|
color_component = (int)(0.5 + opacity * self->dim_factor);
|
||||||
|
|
||||||
cogl_material_set_color4ub (self->material,
|
cogl_material_set_color4ub (self->material,
|
||||||
opacity, opacity, opacity, opacity);
|
color_component,
|
||||||
|
color_component,
|
||||||
|
color_component,
|
||||||
|
opacity);
|
||||||
|
|
||||||
cogl_set_source (self->material);
|
cogl_set_source (self->material);
|
||||||
|
|
||||||
@ -337,23 +355,94 @@ meta_background_actor_get_paint_volume (ClutterActor *actor,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_background_actor_set_dim_factor (MetaBackgroundActor *self,
|
||||||
|
gfloat dim_factor)
|
||||||
|
{
|
||||||
|
if (self->dim_factor == dim_factor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
self->dim_factor = dim_factor;
|
||||||
|
|
||||||
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_DIM_FACTOR]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_background_actor_get_property(GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_DIM_FACTOR:
|
||||||
|
g_value_set_float (value, self->dim_factor);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_background_actor_set_property(GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
MetaBackgroundActor *self = META_BACKGROUND_ACTOR (object);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_DIM_FACTOR:
|
||||||
|
meta_background_actor_set_dim_factor (self, g_value_get_float (value));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_background_actor_class_init (MetaBackgroundActorClass *klass)
|
meta_background_actor_class_init (MetaBackgroundActorClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
|
||||||
|
GParamSpec *pspec;
|
||||||
|
|
||||||
object_class->dispose = meta_background_actor_dispose;
|
object_class->dispose = meta_background_actor_dispose;
|
||||||
|
object_class->get_property = meta_background_actor_get_property;
|
||||||
|
object_class->set_property = meta_background_actor_set_property;
|
||||||
|
|
||||||
actor_class->get_preferred_width = meta_background_actor_get_preferred_width;
|
actor_class->get_preferred_width = meta_background_actor_get_preferred_width;
|
||||||
actor_class->get_preferred_height = meta_background_actor_get_preferred_height;
|
actor_class->get_preferred_height = meta_background_actor_get_preferred_height;
|
||||||
actor_class->paint = meta_background_actor_paint;
|
actor_class->paint = meta_background_actor_paint;
|
||||||
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
|
actor_class->get_paint_volume = meta_background_actor_get_paint_volume;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MetaBackgroundActor:dim-factor:
|
||||||
|
*
|
||||||
|
* Factor to dim the background by, between 0.0 (black) and 1.0 (original
|
||||||
|
* colors)
|
||||||
|
*/
|
||||||
|
pspec = g_param_spec_float ("dim-factor",
|
||||||
|
"Dim factor",
|
||||||
|
"Factor to dim the background by",
|
||||||
|
0.0, 1.0,
|
||||||
|
1.0,
|
||||||
|
G_PARAM_READWRITE);
|
||||||
|
obj_props[PROP_DIM_FACTOR] = pspec;
|
||||||
|
g_object_class_install_property (object_class, PROP_DIM_FACTOR, pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_background_actor_init (MetaBackgroundActor *background_actor)
|
meta_background_actor_init (MetaBackgroundActor *self)
|
||||||
{
|
{
|
||||||
|
self->dim_factor = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user