diff options
author | Owen W. Taylor <otaylor@fishsoup.net> | 2014-09-02 21:51:10 -0400 |
---|---|---|
committer | Owen W. Taylor <otaylor@fishsoup.net> | 2014-09-03 13:43:40 -0400 |
commit | 9d69b2a96305ffdf3e6e2fc3a56cf3160dedeec9 (patch) | |
tree | 37e53ddda7be8ad9500f034efa00891971aef0bd /src/compositor/meta-background-actor.c | |
parent | ef3b0000508d30e15aaee6c7ee9ae58275246062 (diff) | |
download | mutter-9d69b2a96305ffdf3e6e2fc3a56cf3160dedeec9.tar.gz |
MetaBackground: add properties to set vignette settings
Make the vignette options properties so they can be animated;
modify the function-call API for meta_background_actor_set_vignette()
to correspond more closely to the 3 properties.
https://bugzilla.gnome.org/show_bug.cgi?id=735637
Diffstat (limited to 'src/compositor/meta-background-actor.c')
-rw-r--r-- | src/compositor/meta-background-actor.c | 118 |
1 files changed, 89 insertions, 29 deletions
diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c index 4423b14f1..77039c90f 100644 --- a/src/compositor/meta-background-actor.c +++ b/src/compositor/meta-background-actor.c @@ -88,6 +88,9 @@ enum PROP_META_SCREEN = 1, PROP_MONITOR, PROP_BACKGROUND, + PROP_VIGNETTE, + PROP_VIGNETTE_SHARPNESS, + PROP_BRIGHTNESS }; typedef enum { @@ -130,8 +133,8 @@ struct _MetaBackgroundActorPrivate MetaBackground *background; gboolean vignette; - float brightness; - float vignette_sharpness; + double brightness; + double vignette_sharpness; ChangedFlags changed; CoglPipeline *pipeline; @@ -473,6 +476,24 @@ meta_background_actor_set_property (GObject *object, case PROP_BACKGROUND: meta_background_actor_set_background (self, g_value_get_object (value)); break; + case PROP_VIGNETTE: + meta_background_actor_set_vignette (self, + g_value_get_boolean (value), + priv->brightness, + priv->vignette_sharpness); + break; + case PROP_VIGNETTE_SHARPNESS: + meta_background_actor_set_vignette (self, + priv->vignette, + priv->brightness, + g_value_get_double (value)); + break; + case PROP_BRIGHTNESS: + meta_background_actor_set_vignette (self, + priv->vignette, + g_value_get_double (value), + priv->vignette_sharpness); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -498,6 +519,15 @@ meta_background_actor_get_property (GObject *object, case PROP_BACKGROUND: g_value_set_object (value, priv->background); break; + case PROP_VIGNETTE: + g_value_set_boolean (value, priv->vignette); + break; + case PROP_BRIGHTNESS: + g_value_set_double (value, priv->brightness); + break; + case PROP_VIGNETTE_SHARPNESS: + g_value_set_double (value, priv->vignette_sharpness); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -550,14 +580,50 @@ meta_background_actor_class_init (MetaBackgroundActorClass *klass) g_object_class_install_property (object_class, PROP_BACKGROUND, param_spec); + + param_spec = g_param_spec_boolean ("vignette", + "Vignette", + "Whether vignette effect is enabled", + FALSE, + G_PARAM_READWRITE); + + g_object_class_install_property (object_class, + PROP_VIGNETTE, + param_spec); + + param_spec = g_param_spec_double ("brightness", + "Brightness", + "Brightness of vignette effect", + 0.0, 1.0, 1.0, + G_PARAM_READWRITE); + + g_object_class_install_property (object_class, + PROP_BRIGHTNESS, + param_spec); + + param_spec = g_param_spec_double ("vignette-sharpness", + "Vignette Sharpness", + "Sharpness of vignette effect", + 0.0, G_MAXDOUBLE, 0.0, + G_PARAM_READWRITE); + + g_object_class_install_property (object_class, + PROP_VIGNETTE_SHARPNESS, + param_spec); } static void meta_background_actor_init (MetaBackgroundActor *self) { - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, - META_TYPE_BACKGROUND_ACTOR, - MetaBackgroundActorPrivate); + MetaBackgroundActorPrivate *priv; + + priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + META_TYPE_BACKGROUND_ACTOR, + MetaBackgroundActorPrivate); + + priv->vignette = FALSE; + priv->brightness = 1.0; + priv->vignette_sharpness = 0.0; } /** @@ -672,10 +738,12 @@ meta_background_actor_set_background (MetaBackgroundActor *self, void meta_background_actor_set_vignette (MetaBackgroundActor *self, + gboolean enabled, double brightness, double sharpness) { MetaBackgroundActorPrivate *priv; + gboolean changed = FALSE; g_return_if_fail (META_IS_BACKGROUND_ACTOR (self)); g_return_if_fail (brightness >= 0. && brightness <= 1.); @@ -683,31 +751,23 @@ meta_background_actor_set_vignette (MetaBackgroundActor *self, priv = self->priv; - if (!priv->vignette) - invalidate_pipeline (self, CHANGED_EFFECTS); - - priv->vignette = TRUE; - priv->brightness = brightness; - priv->vignette_sharpness = sharpness; - invalidate_pipeline (self, CHANGED_VIGNETTE_PARAMETERS); - - clutter_actor_queue_redraw (CLUTTER_ACTOR (self)); -} - -void -meta_background_actor_unset_vignette (MetaBackgroundActor *self) -{ - MetaBackgroundActorPrivate *priv; - priv = self->priv; + enabled = enabled != FALSE; - g_return_if_fail (META_IS_BACKGROUND_ACTOR (self)); - - if (!priv->vignette) - return; + if (enabled != priv->vignette) + { + priv->vignette = enabled; + invalidate_pipeline (self, CHANGED_EFFECTS); + changed = TRUE; + } - priv->vignette = FALSE; + if (brightness != priv->brightness || sharpness != priv->vignette_sharpness) + { + priv->brightness = brightness; + priv->vignette_sharpness = sharpness; + invalidate_pipeline (self, CHANGED_VIGNETTE_PARAMETERS); + changed = TRUE; + } - invalidate_pipeline (self, CHANGED_EFFECTS); - clutter_actor_queue_redraw (CLUTTER_ACTOR (self)); + if (changed) + clutter_actor_queue_redraw (CLUTTER_ACTOR (self)); } - |