[clutter] Add brightness/contrast effect
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] Add brightness/contrast effect
- Date: Wed, 7 Mar 2012 14:04:58 +0000 (UTC)
commit 32f57595feef4859ac506cb81a2f17781d554d83
Author: Joseph Scheuhammer <clown alum mit edu>
Date: Thu Feb 2 16:23:00 2012 -0500
Add brightness/contrast effect
The ClutterBrightnessContrastEffect effect class allows changing the
brightness and contrast levels of an actor.
Modified-by: Emmanuele Bassi <ebassi linux intel com>
Modified-by: Neil Roberts <neil linux intel com>
https://bugzilla.gnome.org/show_bug.cgi?id=656156
clutter/Makefile.am | 2 +
clutter/clutter-brightness-contrast-effect.c | 643 ++++++++++++++++++++++++++
clutter/clutter-brightness-contrast-effect.h | 80 ++++
clutter/clutter.h | 1 +
clutter/clutter.symbols | 8 +
doc/reference/clutter/clutter-docs.xml.in | 1 +
doc/reference/clutter/clutter-sections.txt | 20 +
doc/reference/clutter/clutter.types | 1 +
8 files changed, 756 insertions(+), 0 deletions(-)
---
diff --git a/clutter/Makefile.am b/clutter/Makefile.am
index 50260e1..75ac27d 100644
--- a/clutter/Makefile.am
+++ b/clutter/Makefile.am
@@ -63,6 +63,7 @@ source_h = \
$(srcdir)/clutter-bin-layout.h \
$(srcdir)/clutter-blur-effect.h \
$(srcdir)/clutter-box-layout.h \
+ $(srcdir)/clutter-brightness-contrast-effect.h \
$(srcdir)/clutter-cairo-texture.h \
$(srcdir)/clutter-child-meta.h \
$(srcdir)/clutter-click-action.h \
@@ -137,6 +138,7 @@ source_c = \
$(srcdir)/clutter-bin-layout.c \
$(srcdir)/clutter-blur-effect.c \
$(srcdir)/clutter-box-layout.c \
+ $(srcdir)/clutter-brightness-contrast-effect.c \
$(srcdir)/clutter-cairo-texture.c \
$(srcdir)/clutter-child-meta.c \
$(srcdir)/clutter-click-action.c \
diff --git a/clutter/clutter-brightness-contrast-effect.c b/clutter/clutter-brightness-contrast-effect.c
new file mode 100644
index 0000000..97d9b86
--- /dev/null
+++ b/clutter/clutter-brightness-contrast-effect.c
@@ -0,0 +1,643 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2010-2012 Inclusive Design Research Centre, OCAD University.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author:
+ * Joseph Scheuhammer <clown alum mit edu>
+ */
+
+/**
+ * SECTION:clutter-brightness-contrast-effect
+ * @short_description: Increase/decrease brightness and/or contrast of actor.
+ * @see_also: #ClutterEffect, #ClutterOffscreenEffect
+ *
+ * #ClutterBrightnessContrastEffect is a sub-class of #ClutterEffect that
+ * changes the overall brightness of a #ClutterActor.
+ *
+ * #ClutterBrightnessContrastEffect is available since Clutter 1.10
+ */
+
+#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass))
+#define CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT))
+#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffectClass))
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <math.h>
+
+#define CLUTTER_ENABLE_EXPERIMENTAL_API
+
+#include "clutter-brightness-contrast-effect.h"
+
+#include <cogl/cogl.h>
+
+#include "clutter-debug.h"
+#include "clutter-enum-types.h"
+#include "clutter-offscreen-effect.h"
+#include "clutter-private.h"
+
+struct _ClutterBrightnessContrastEffect
+{
+ ClutterOffscreenEffect parent_instance;
+
+ /* Brightness and contrast changes. */
+ gfloat brightness_red;
+ gfloat brightness_green;
+ gfloat brightness_blue;
+
+ gfloat contrast_red;
+ gfloat contrast_green;
+ gfloat contrast_blue;
+
+ gint brightness_multiplier_uniform;
+ gint brightness_offset_uniform;
+ gint contrast_uniform;
+
+ gint tex_width;
+ gint tex_height;
+
+ CoglPipeline *pipeline;
+};
+
+struct _ClutterBrightnessContrastEffectClass
+{
+ ClutterOffscreenEffectClass parent_class;
+
+ CoglPipeline *base_pipeline;
+};
+
+/* Brightness effects in GLSL.
+ */
+static const gchar *brightness_contrast_decls =
+ "uniform vec3 brightness_multiplier;\n"
+ "uniform vec3 brightness_offset;\n"
+ "uniform vec3 contrast;\n";
+
+static const gchar *brightness_contrast_source =
+ /* Apply the brightness. The brightness_offset is multiplied by the
+ alpha to keep the color pre-multiplied */
+ "cogl_color_out.rgb = (cogl_color_out.rgb * brightness_multiplier +\n"
+ " brightness_offset * cogl_color_out.a);\n"
+ /* Apply the contrast */
+ "cogl_color_out.rgb = ((cogl_color_out.rgb - 0.5 * cogl_color_out.a) *\n"
+ " contrast + 0.5 * cogl_color_out.a);\n";
+
+static const ClutterColor no_brightness_change = { 0x7f, 0x7f, 0x7f, 0xff };
+static const ClutterColor no_contrast_change = { 0x7f, 0x7f, 0x7f, 0xff };
+static const gfloat no_change = 0.0f;
+
+enum
+{
+ PROP_0,
+
+ PROP_BRIGHTNESS,
+ PROP_CONTRAST,
+
+ PROP_LAST
+};
+
+static GParamSpec *obj_props[PROP_LAST];
+
+G_DEFINE_TYPE (ClutterBrightnessContrastEffect,
+ clutter_brightness_contrast_effect,
+ CLUTTER_TYPE_OFFSCREEN_EFFECT);
+
+static gboolean
+clutter_brightness_contrast_effect_pre_paint (ClutterEffect *effect)
+{
+ ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect);
+ ClutterEffectClass *parent_class;
+
+ if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)))
+ return FALSE;
+
+ if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
+ {
+ /* if we don't have support for GLSL shaders then we
+ * forcibly disable the ActorMeta
+ */
+ g_warning ("Unable to use the ClutterBrightnessContrastEffect: the "
+ "graphics hardware or the current GL driver does not "
+ "implement support for the GLSL shading language. The "
+ "effect will be disabled.");
+ clutter_actor_meta_set_enabled (CLUTTER_ACTOR_META (effect), FALSE);
+ return FALSE;
+ }
+
+ parent_class =
+ CLUTTER_EFFECT_CLASS (clutter_brightness_contrast_effect_parent_class);
+ if (parent_class->pre_paint (effect))
+ {
+ ClutterOffscreenEffect *offscreen_effect =
+ CLUTTER_OFFSCREEN_EFFECT (effect);
+ CoglHandle texture;
+
+ texture = clutter_offscreen_effect_get_texture (offscreen_effect);
+ self->tex_width = cogl_texture_get_width (texture);
+ self->tex_height = cogl_texture_get_height (texture);
+
+ cogl_pipeline_set_layer_texture (self->pipeline, 0, texture);
+
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static void
+clutter_brightness_contrast_effect_paint_target (ClutterOffscreenEffect *effect)
+{
+ ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (effect);
+ ClutterActor *actor;
+ guint8 paint_opacity;
+
+ actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
+ paint_opacity = clutter_actor_get_paint_opacity (actor);
+
+ cogl_pipeline_set_color4ub (self->pipeline,
+ paint_opacity,
+ paint_opacity,
+ paint_opacity,
+ paint_opacity);
+ cogl_push_source (self->pipeline);
+
+ cogl_rectangle (0, 0, self->tex_width, self->tex_height);
+
+ cogl_pop_source ();
+}
+
+static void
+clutter_brightness_contrast_effect_dispose (GObject *gobject)
+{
+ ClutterBrightnessContrastEffect *self = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (gobject);
+
+ if (self->pipeline != NULL)
+ {
+ cogl_object_unref (self->pipeline);
+ self->pipeline = NULL;
+ }
+
+ G_OBJECT_CLASS (clutter_brightness_contrast_effect_parent_class)->dispose (gobject);
+}
+
+static void
+clutter_brightness_contrast_effect_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ ClutterBrightnessContrastEffect *effect = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (gobject);
+
+ switch (prop_id)
+ {
+ case PROP_BRIGHTNESS:
+ {
+ const ClutterColor *color = clutter_value_get_color (value);
+ clutter_brightness_contrast_effect_set_brightness_full (effect,
+ color->red / 127.0f - 1.0f,
+ color->green / 127.0f - 1.0f,
+ color->blue / 127.0f - 1.0f);
+ }
+ break;
+
+ case PROP_CONTRAST:
+ {
+ const ClutterColor *color = clutter_value_get_color (value);
+ clutter_brightness_contrast_effect_set_contrast_full (effect,
+ color->red / 127.0f - 1.0f,
+ color->green / 127.0f - 1.0f,
+ color->blue / 127.0f - 1.0f);
+ }
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_brightness_contrast_effect_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ClutterBrightnessContrastEffect *effect = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT (gobject);
+ ClutterColor color;
+
+ switch (prop_id)
+ {
+ case PROP_BRIGHTNESS:
+ {
+ color.red = (effect->brightness_red + 1.0f) * 127.0f;
+ color.green = (effect->brightness_green + 1.0f) * 127.0f;
+ color.blue = (effect->brightness_blue + 1.0f) * 127.0f;
+ color.alpha = 0xff;
+
+ clutter_value_set_color (value, &color);
+ }
+ break;
+
+ case PROP_CONTRAST:
+ {
+ color.red = (effect->contrast_red + 1.0f) * 127.0f;
+ color.green = (effect->contrast_green + 1.0f) * 127.0f;
+ color.blue = (effect->contrast_blue + 1.0f) * 127.0f;
+ color.alpha = 0xff;
+
+ clutter_value_set_color (value, &color);
+ }
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+clutter_brightness_contrast_effect_class_init (ClutterBrightnessContrastEffectClass *klass)
+{
+ ClutterEffectClass *effect_class = CLUTTER_EFFECT_CLASS (klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ ClutterOffscreenEffectClass *offscreen_class;
+
+ offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
+ offscreen_class->paint_target = clutter_brightness_contrast_effect_paint_target;
+
+ effect_class->pre_paint = clutter_brightness_contrast_effect_pre_paint;
+
+ gobject_class->set_property = clutter_brightness_contrast_effect_set_property;
+ gobject_class->get_property = clutter_brightness_contrast_effect_get_property;
+ gobject_class->dispose = clutter_brightness_contrast_effect_dispose;
+
+ /**
+ * ClutterBrightnessContrastEffect:brightness:
+ *
+ * The brightness change to apply to the effect.
+ *
+ * This property uses a #ClutterColor to represent the changes to each
+ * color channel. The range is [ 0, 255 ], with 127 as the value used
+ * to indicate no change; values smaller than 127 indicate a decrease
+ * in brightness, and values larger than 127 indicate an increase in
+ * brightness.
+ *
+ * Since: 1.10
+ */
+ obj_props[PROP_BRIGHTNESS] =
+ clutter_param_spec_color ("brightness",
+ P_("Brightness"),
+ P_("The brightness change to apply"),
+ &no_brightness_change,
+ CLUTTER_PARAM_READWRITE);
+
+ /**
+ * ClutterBrightnessContrastEffect:contrast:
+ *
+ * The contrast change to apply to the effect.
+ *
+ * This property uses a #ClutterColor to represent the changes to each
+ * color channel. The range is [ 0, 255 ], with 127 as the value used
+ * to indicate no change; values smaller than 127 indicate a decrease
+ * in contrast, and values larger than 127 indicate an increase in
+ * contrast.
+ *
+ * Since: 1.10
+ */
+ obj_props[PROP_CONTRAST] =
+ clutter_param_spec_color ("contrast",
+ P_("Contrast"),
+ P_("The contrast change to apply"),
+ &no_contrast_change,
+ CLUTTER_PARAM_READWRITE);
+
+ g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
+}
+
+static void
+get_brightness_values (gfloat value,
+ gfloat *multiplier,
+ gfloat *offset)
+{
+ if (value < 0.0f)
+ {
+ *multiplier = 1.0f + value;
+ *offset = 0.0f;
+ }
+ else
+ {
+ *multiplier = 1.0f - value;
+ *offset = value;
+ }
+}
+
+static inline void
+update_uniforms (ClutterBrightnessContrastEffect *self)
+{
+ if (self->brightness_multiplier_uniform > -1 &&
+ self->brightness_offset_uniform > -1)
+ {
+ float brightness_multiplier[3];
+ float brightness_offset[3];
+
+ get_brightness_values (self->brightness_red,
+ brightness_multiplier + 0,
+ brightness_offset + 0);
+ get_brightness_values (self->brightness_green,
+ brightness_multiplier + 1,
+ brightness_offset + 1);
+ get_brightness_values (self->brightness_blue,
+ brightness_multiplier + 2,
+ brightness_offset + 2);
+
+ cogl_pipeline_set_uniform_float (self->pipeline,
+ self->brightness_multiplier_uniform,
+ 3, /* n_components */
+ 1, /* count */
+ brightness_multiplier);
+ cogl_pipeline_set_uniform_float (self->pipeline,
+ self->brightness_offset_uniform,
+ 3, /* n_components */
+ 1, /* count */
+ brightness_offset);
+ }
+
+ if (self->contrast_uniform > -1)
+ {
+ float contrast[3] = {
+ tan ((self->contrast_red + 1) * G_PI_4),
+ tan ((self->contrast_green + 1) * G_PI_4),
+ tan ((self->contrast_blue + 1) * G_PI_4)
+ };
+
+ cogl_pipeline_set_uniform_float (self->pipeline,
+ self->contrast_uniform,
+ 3, /* n_components */
+ 1, /* count */
+ contrast);
+ }
+}
+
+static void
+clutter_brightness_contrast_effect_init (ClutterBrightnessContrastEffect *self)
+{
+ ClutterBrightnessContrastEffectClass *klass;
+
+ self->brightness_red = no_change;
+ self->brightness_green = no_change;
+ self->brightness_blue = no_change;
+
+ self->contrast_red = no_change;
+ self->contrast_green = no_change;
+ self->contrast_blue = no_change;
+
+ klass = CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_GET_CLASS (self);
+
+ if (G_UNLIKELY (klass->base_pipeline == NULL))
+ {
+ CoglSnippet *snippet;
+ CoglContext *ctx =
+ clutter_backend_get_cogl_context (clutter_get_default_backend ());
+
+ klass->base_pipeline = cogl_pipeline_new (ctx);
+
+ snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_FRAGMENT,
+ brightness_contrast_decls,
+ brightness_contrast_source);
+ cogl_pipeline_add_snippet (klass->base_pipeline, snippet);
+ cogl_object_unref (snippet);
+
+ cogl_pipeline_set_layer_null_texture (klass->base_pipeline,
+ 0, /* layer number */
+ COGL_TEXTURE_TYPE_2D);
+ }
+
+ self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
+
+ self->brightness_multiplier_uniform =
+ cogl_pipeline_get_uniform_location (self->pipeline,
+ "brightness_multiplier");
+ self->brightness_offset_uniform =
+ cogl_pipeline_get_uniform_location (self->pipeline,
+ "brightness_offset");
+ self->contrast_uniform =
+ cogl_pipeline_get_uniform_location (self->pipeline, "contrast");
+
+ update_uniforms (self);
+}
+
+/**
+ * clutter_brightness_contrast_effect_new:
+ *
+ * Creates a new #ClutterBrightnessContrastEffect to be used with
+ * clutter_actor_add_effect()
+ *
+ * Return value: (transfer full): the newly created
+ * #ClutterBrightnessContrastEffect or %NULL. Use g_object_unref() when
+ * done.
+ *
+ * Since: 1.10
+ */
+ClutterEffect *
+clutter_brightness_contrast_effect_new (void)
+{
+ return g_object_new (CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, NULL);
+}
+
+/**
+ * clutter_brightness_contrast_effect_set_brightness_full:
+ * @effect: a #ClutterBrightnessContrastEffect
+ * @red: red component of the change in brightness
+ * @green: green component of the change in brightness
+ * @blue: blue component of the change in brightness
+ *
+ * The range for each component is [-1.0, 1.0] where 0.0 designates no change,
+ * values below 0.0 mean a decrease in brightness, and values above indicate
+ * an increase.
+ *
+ * Since: 1.10
+ */
+void
+clutter_brightness_contrast_effect_set_brightness_full (ClutterBrightnessContrastEffect *effect,
+ gfloat red,
+ gfloat green,
+ gfloat blue)
+{
+ g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
+
+ if (red == effect->brightness_red &&
+ green == effect->brightness_green &&
+ blue == effect->brightness_blue)
+ return;
+
+ effect->brightness_red = red;
+ effect->brightness_green = green;
+ effect->brightness_blue = blue;
+
+ update_uniforms (effect);
+
+ clutter_effect_queue_repaint (CLUTTER_EFFECT (effect));
+
+ g_object_notify_by_pspec (G_OBJECT (effect), obj_props[PROP_BRIGHTNESS]);
+}
+
+/**
+ * clutter_brightness_contrast_effect_get_brightness:
+ * @effect: a #ClutterBrightnessContrastEffect
+ * @red: (out) (allow-none): return location for red component of the
+ * change in brightness
+ * @green: (out) (allow-none): return location for green component of the
+ * change in brightness
+ * @blue: (out) (allow-none): return location for blue component of the
+ * change in brightness
+ *
+ * Retrieves the change in brightness used by @effect.
+ *
+ * Since: 1.10
+ */
+void
+clutter_brightness_contrast_effect_get_brightness (ClutterBrightnessContrastEffect *effect,
+ gfloat *red,
+ gfloat *green,
+ gfloat *blue)
+{
+ g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
+
+ if (red != NULL)
+ *red = effect->brightness_red;
+
+ if (green != NULL)
+ *green = effect->brightness_green;
+
+ if (blue != NULL)
+ *blue = effect->brightness_blue;
+}
+
+/**
+ * clutter_brightness_contrast_effect_set_brightness:
+ * @effect: a #ClutterBrightnessContrastEffect
+ * @brightness: the brightness change for all three components (r, g, b)
+ *
+ * The range of @brightness is [-1.0, 1.0], where 0.0 designates no change;
+ * a value below 0.0 indicates a decrease in brightness; and a value
+ * above 0.0 indicates an increase of brightness.
+ *
+ * Since: 1.10
+ */
+void
+clutter_brightness_contrast_effect_set_brightness (ClutterBrightnessContrastEffect *effect,
+ gfloat brightness)
+{
+ clutter_brightness_contrast_effect_set_brightness_full (effect,
+ brightness,
+ brightness,
+ brightness);
+}
+
+/**
+ * clutter_brightness_contrast_effect_set_contrast_full:
+ * @effect: a #ClutterBrightnessContrastEffect
+ * @red: red component of the change in contrast
+ * @green: green component of the change in contrast
+ * @blue: blue component of the change in contrast
+ *
+ * The range for each component is [-1.0, 1.0] where 0.0 designates no change,
+ * values below 0.0 mean a decrease in contrast, and values above indicate
+ * an increase.
+ *
+ * Since: 1.10
+ */
+void
+clutter_brightness_contrast_effect_set_contrast_full (ClutterBrightnessContrastEffect *effect,
+ gfloat red,
+ gfloat green,
+ gfloat blue)
+{
+ g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
+
+ if (red == effect->contrast_red &&
+ green == effect->contrast_green &&
+ blue == effect->contrast_blue)
+ return;
+
+ effect->contrast_red = red;
+ effect->contrast_green = green;
+ effect->contrast_blue = blue;
+
+ update_uniforms (effect);
+
+ clutter_effect_queue_repaint (CLUTTER_EFFECT (effect));
+
+ g_object_notify_by_pspec (G_OBJECT (effect), obj_props[PROP_CONTRAST]);
+}
+
+/**
+ * clutter_brightness_contrast_effect_get_contrast:
+ * @effect: a #ClutterBrightnessContrastEffect
+ * @red: (out) (allow-none): return location for red component of the
+ * change in contrast
+ * @green: (out) (allow-none): return location for green component of the
+ * change in contrast
+ * @blue: (out) (allow-none): return location for blue component of the
+ * change in contrast
+ *
+ * Retrieves the contrast value used by @effect.
+ *
+ * Since: 1.10
+ */
+void
+clutter_brightness_contrast_effect_get_contrast (ClutterBrightnessContrastEffect *effect,
+ gfloat *red,
+ gfloat *green,
+ gfloat *blue)
+{
+ g_return_if_fail (CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT (effect));
+
+ if (red != NULL)
+ *red = effect->contrast_red;
+
+ if (green != NULL)
+ *green = effect->contrast_green;
+
+ if (blue != NULL)
+ *blue = effect->contrast_blue;
+}
+
+/**
+ * clutter_brightness_contrast_effect_set_contrast:
+ * @effect: a #ClutterBrightnessContrastEffect
+ * @contrast: contrast change for all three channels
+ *
+ * The range for @contrast is [-1.0, 1.0], where 0.0 designates no change;
+ * a value below 0.0 indicates a decrease in contrast; and a value above
+ * 0.0 indicates an increase.
+ *
+ * Since: 1.10
+ */
+void
+clutter_brightness_contrast_effect_set_contrast (ClutterBrightnessContrastEffect *effect,
+ gfloat contrast)
+{
+ clutter_brightness_contrast_effect_set_contrast_full (effect,
+ contrast,
+ contrast,
+ contrast);
+}
diff --git a/clutter/clutter-brightness-contrast-effect.h b/clutter/clutter-brightness-contrast-effect.h
new file mode 100644
index 0000000..b4b3a40
--- /dev/null
+++ b/clutter/clutter-brightness-contrast-effect.h
@@ -0,0 +1,80 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2010-2012 Inclusive Design Research Centre, OCAD University.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author:
+ * Joseph Scheuhammer <clown alum mit edu>
+ */
+
+#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only <clutter/clutter.h> can be included directly."
+#endif
+
+#ifndef __CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_H__
+#define __CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_H__
+
+#include <clutter/clutter-color.h>
+#include <clutter/clutter-effect.h>
+
+G_BEGIN_DECLS
+
+#define CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT (clutter_brightness_contrast_effect_get_type ())
+#define CLUTTER_BRIGHTNESS_CONTRAST_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT, ClutterBrightnessContrastEffect))
+#define CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT))
+
+/**
+ * ClutterBrightnessContrastEffect:
+ *
+ * <structname>ClutterBrightnessContrastEffect</structname> is an opaque structure
+ * whose members cannot be directly accessed
+ *
+ * Since: 1.10
+ */
+typedef struct _ClutterBrightnessContrastEffect ClutterBrightnessContrastEffect;
+typedef struct _ClutterBrightnessContrastEffectClass ClutterBrightnessContrastEffectClass;
+
+GType clutter_brightness_contrast_effect_get_type (void) G_GNUC_CONST;
+
+ClutterEffect * clutter_brightness_contrast_effect_new (void);
+
+void clutter_brightness_contrast_effect_set_brightness_full (ClutterBrightnessContrastEffect *effect,
+ float red,
+ float green,
+ float blue);
+void clutter_brightness_contrast_effect_set_brightness (ClutterBrightnessContrastEffect *effect,
+ float brightness);
+void clutter_brightness_contrast_effect_get_brightness (ClutterBrightnessContrastEffect *effect,
+ float *red,
+ float *green,
+ float *blue);
+
+void clutter_brightness_contrast_effect_set_contrast_full (ClutterBrightnessContrastEffect *effect,
+ float red,
+ float green,
+ float blue);
+void clutter_brightness_contrast_effect_set_contrast (ClutterBrightnessContrastEffect *effect,
+ float contrast);
+void clutter_brightness_contrast_effect_get_contrast (ClutterBrightnessContrastEffect *effect,
+ float *red,
+ float *green,
+ float *blue);
+
+G_END_DECLS
+
+#endif /* __CLUTTER_BRIGHTNESS_CONTRAST_EFFECT_H__ */
diff --git a/clutter/clutter.h b/clutter/clutter.h
index e767bd6..5c1c332 100644
--- a/clutter/clutter.h
+++ b/clutter/clutter.h
@@ -45,6 +45,7 @@
#include "clutter-bin-layout.h"
#include "clutter-blur-effect.h"
#include "clutter-box-layout.h"
+#include "clutter-brightness-contrast-effect.h"
#include "clutter-cairo-texture.h"
#include "clutter-child-meta.h"
#include "clutter-click-action.h"
diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols
index d7e681f..43943cf 100644
--- a/clutter/clutter.symbols
+++ b/clutter/clutter.symbols
@@ -462,6 +462,14 @@ clutter_box_packv
clutter_box_pack_after
clutter_box_pack_at
clutter_box_pack_before
+clutter_brightness_contrast_effect_get_brightness
+clutter_brightness_contrast_effect_get_contrast
+clutter_brightness_contrast_effect_get_type
+clutter_brightness_contrast_effect_new
+clutter_brightness_contrast_effect_set_brightness_full
+clutter_brightness_contrast_effect_set_brightness
+clutter_brightness_contrast_effect_set_contrast_full
+clutter_brightness_contrast_effect_set_contrast
clutter_cairo_set_source_color
clutter_cairo_texture_clear
clutter_cairo_texture_create
diff --git a/doc/reference/clutter/clutter-docs.xml.in b/doc/reference/clutter/clutter-docs.xml.in
index ced1044..4df48fd 100644
--- a/doc/reference/clutter/clutter-docs.xml.in
+++ b/doc/reference/clutter/clutter-docs.xml.in
@@ -112,6 +112,7 @@
<xi:include href="xml/clutter-deform-effect.xml"/>
<xi:include href="xml/clutter-blur-effect.xml"/>
+ <xi:include href="xml/clutter-brightness-contrast-effect.xml"/>
<xi:include href="xml/clutter-colorize-effect.xml"/>
<xi:include href="xml/clutter-desaturate-effect.xml"/>
<xi:include href="xml/clutter-page-turn-effect.xml"/>
diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt
index 1311b87..facca45 100644
--- a/doc/reference/clutter/clutter-sections.txt
+++ b/doc/reference/clutter/clutter-sections.txt
@@ -2801,6 +2801,26 @@ clutter_page_turn_effect_get_type
</SECTION>
<SECTION>
+<TITLE>ClutterBrightnessContrastEffect</TITLE>
+<FILE>clutter-brightness-contrast-effect</FILE>
+ClutterBrightnessContrastEffect
+clutter_brightness_contrast_effect_new
+clutter_brightness_contrast_effect_set_brightness
+clutter_brightness_contrast_effect_set_brightness_full
+clutter_brightness_contrast_effect_get_brightness
+clutter_brightness_contrast_effect_set_contrast
+clutter_brightness_contrast_effect_set_contrast_full
+clutter_brightness_contrast_effect_get_contrast
+<SUBSECTION Standard>
+CLUTTER_TYPE_BRIGHTNESS_CONTRAST_EFFECT
+CLUTTER_BRIGHTNESS_CONTRAST_EFFECT
+CLUTTER_IS_BRIGHTNESS_CONTRAST_EFFECT
+<SUBSECTION Private>
+ClutterBrightnessContrastEffectClass
+clutter_brightness_contrast_effect_get_type
+</SECTION>
+
+<SECTION>
<FILE>clutter-settings</FILE>
ClutterSettings
clutter_settings_get_default
diff --git a/doc/reference/clutter/clutter.types b/doc/reference/clutter/clutter.types
index 7c12b0f..0540340 100644
--- a/doc/reference/clutter/clutter.types
+++ b/doc/reference/clutter/clutter.types
@@ -21,6 +21,7 @@ clutter_bin_layout_get_type
clutter_blur_effect_get_type
clutter_box_get_type
clutter_box_layout_get_type
+clutter_brightness_contrast_effect_get_type
clutter_cairo_texture_get_type
clutter_child_meta_get_type
clutter_click_action_get_type
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]