[mutter] MetaBackground: add properties to set vignette settings



commit 9d69b2a96305ffdf3e6e2fc3a56cf3160dedeec9
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Tue Sep 2 21:51:10 2014 -0400

    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

 src/compositor/meta-background-actor.c |  118 ++++++++++++++++++++++++--------
 src/meta/meta-background-actor.h       |    8 +-
 2 files changed, 93 insertions(+), 33 deletions(-)
---
diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c
index 4423b14..77039c9 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));
 }
-
diff --git a/src/meta/meta-background-actor.h b/src/meta/meta-background-actor.h
index 63558a1..e2c4d6a 100644
--- a/src/meta/meta-background-actor.h
+++ b/src/meta/meta-background-actor.h
@@ -67,9 +67,9 @@ ClutterActor *meta_background_actor_new    (MetaScreen *screen,
 void meta_background_actor_set_background  (MetaBackgroundActor *self,
                                             MetaBackground      *background);
 
-void meta_background_actor_set_vignette    (MetaBackgroundActor *self,
-                                            double               brightness,
-                                            double               sharpness);
-void meta_background_actor_unset_vignette  (MetaBackgroundActor *self);
+void meta_background_actor_set_vignette (MetaBackgroundActor *self,
+                                         gboolean             enabled,
+                                         double               brightness,
+                                         double               sharpness);
 
 #endif /* META_BACKGROUND_ACTOR_H */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]