[gnome-shell] StScrollViewFade: Make fade-offset a property rather than a hardcoded constant
- From: Adel Gadllah <agadllah src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] StScrollViewFade: Make fade-offset a property rather than a hardcoded constant
- Date: Wed, 16 Feb 2011 22:07:17 +0000 (UTC)
commit 07bde8248e055755ab5b99319cb580461d869694
Author: Adel Gadllah <adel gadllah gmail com>
Date: Wed Feb 16 22:12:19 2011 +0100
StScrollViewFade: Make fade-offset a property rather than a hardcoded constant
https://bugzilla.gnome.org/show_bug.cgi?id=642510
src/st/st-scroll-view-fade.c | 83 ++++++++++++++++++++++++++++++++++++++++--
1 files changed, 79 insertions(+), 4 deletions(-)
---
diff --git a/src/st/st-scroll-view-fade.c b/src/st/st-scroll-view-fade.c
index 050cea5..58179fe 100644
--- a/src/st/st-scroll-view-fade.c
+++ b/src/st/st-scroll-view-fade.c
@@ -33,7 +33,7 @@
typedef struct _StScrollViewFadeClass StScrollViewFadeClass;
-#define FADE_OFFSET 68.0f
+#define DEFAULT_FADE_OFFSET 68.0f
static const gchar *fade_glsl_shader =
"uniform sampler2D tex;\n"
@@ -84,6 +84,8 @@ struct _StScrollViewFade
StAdjustment *vadjustment;
guint is_attached : 1;
+
+ float fade_offset;
};
struct _StScrollViewFadeClass
@@ -95,6 +97,12 @@ G_DEFINE_TYPE (StScrollViewFade,
st_scroll_view_fade,
CLUTTER_TYPE_OFFSCREEN_EFFECT);
+enum {
+ PROP_0,
+
+ PROP_FADE_OFFSET,
+};
+
static gboolean
st_scroll_view_fade_pre_paint (ClutterEffect *effect)
{
@@ -171,14 +179,14 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
if (self->offset_top_uniform > -1) {
if (value > lower + 0.1)
- cogl_program_set_uniform_1f (self->program, self->offset_top_uniform, FADE_OFFSET);
+ cogl_program_set_uniform_1f (self->program, self->offset_top_uniform, self->fade_offset);
else
cogl_program_set_uniform_1f (self->program, self->offset_top_uniform, 0.0f);
}
if (self->offset_bottom_uniform > -1) {
if (value < upper - page_size - 0.1)
- cogl_program_set_uniform_1f (self->program, self->offset_bottom_uniform, FADE_OFFSET);
+ cogl_program_set_uniform_1f (self->program, self->offset_bottom_uniform, self->fade_offset);
else
cogl_program_set_uniform_1f (self->program, self->offset_bottom_uniform, 0.0f);
}
@@ -283,6 +291,62 @@ st_scroll_view_fade_dispose (GObject *gobject)
}
static void
+st_scroll_view_fade_set_offset (StScrollViewFade *self,
+ float fade_offset)
+{
+ if (self->fade_offset == fade_offset)
+ return;
+
+ g_object_freeze_notify (G_OBJECT (self));
+
+ self->fade_offset = fade_offset;
+
+ if (self->actor != NULL)
+ clutter_actor_queue_redraw (self->actor);
+
+ g_object_notify (G_OBJECT (self), "fade-offset");
+ g_object_thaw_notify (G_OBJECT (self));
+}
+
+static void
+st_scroll_view_fade_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ StScrollViewFade *self = ST_SCROLL_VIEW_FADE (object);
+
+ switch (prop_id)
+ {
+ case PROP_FADE_OFFSET:
+ st_scroll_view_fade_set_offset (self, g_value_get_float (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+st_scroll_view_fade_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ StScrollViewFade *self = ST_SCROLL_VIEW_FADE (object);
+
+ switch (prop_id)
+ {
+ case PROP_FADE_OFFSET:
+ g_value_set_float (value, self->fade_offset);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
{
ClutterEffectClass *effect_class = CLUTTER_EFFECT_CLASS (klass);
@@ -291,6 +355,8 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
gobject_class->dispose = st_scroll_view_fade_dispose;
+ gobject_class->get_property = st_scroll_view_fade_get_property;
+ gobject_class->set_property = st_scroll_view_fade_set_property;
meta_class->set_actor = st_scroll_view_fade_set_actor;
@@ -299,8 +365,16 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
offscreen_class->create_texture = st_scroll_view_fade_create_texture;
offscreen_class->paint_target = st_scroll_view_fade_paint_target;
-}
+ g_object_class_install_property (gobject_class,
+ PROP_FADE_OFFSET,
+ g_param_spec_float ("fade-offset",
+ "Fade Offset",
+ "The height of the area which is faded at the edge",
+ 0.f, G_MAXFLOAT, DEFAULT_FADE_OFFSET,
+ G_PARAM_READWRITE));
+
+}
static void
st_scroll_view_fade_init (StScrollViewFade *self)
@@ -336,6 +410,7 @@ st_scroll_view_fade_init (StScrollViewFade *self)
self->scrollbar_width_uniform = -1;
self->offset_top_uniform = -1;
self->offset_bottom_uniform = -1;
+ self->fade_offset = DEFAULT_FADE_OFFSET;
if (shader != COGL_INVALID_HANDLE)
cogl_handle_ref (self->shader);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]