StScrollViewFade: Make fade-offset a property rather than a hardcoded constant
https://bugzilla.gnome.org/show_bug.cgi?id=642510
This commit is contained in:
parent
bb70be31c0
commit
07bde8248e
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
typedef struct _StScrollViewFadeClass StScrollViewFadeClass;
|
typedef struct _StScrollViewFadeClass StScrollViewFadeClass;
|
||||||
|
|
||||||
#define FADE_OFFSET 68.0f
|
#define DEFAULT_FADE_OFFSET 68.0f
|
||||||
|
|
||||||
static const gchar *fade_glsl_shader =
|
static const gchar *fade_glsl_shader =
|
||||||
"uniform sampler2D tex;\n"
|
"uniform sampler2D tex;\n"
|
||||||
@ -84,6 +84,8 @@ struct _StScrollViewFade
|
|||||||
StAdjustment *vadjustment;
|
StAdjustment *vadjustment;
|
||||||
|
|
||||||
guint is_attached : 1;
|
guint is_attached : 1;
|
||||||
|
|
||||||
|
float fade_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _StScrollViewFadeClass
|
struct _StScrollViewFadeClass
|
||||||
@ -95,6 +97,12 @@ G_DEFINE_TYPE (StScrollViewFade,
|
|||||||
st_scroll_view_fade,
|
st_scroll_view_fade,
|
||||||
CLUTTER_TYPE_OFFSCREEN_EFFECT);
|
CLUTTER_TYPE_OFFSCREEN_EFFECT);
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
|
||||||
|
PROP_FADE_OFFSET,
|
||||||
|
};
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
st_scroll_view_fade_pre_paint (ClutterEffect *effect)
|
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 (self->offset_top_uniform > -1) {
|
||||||
if (value > lower + 0.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
|
else
|
||||||
cogl_program_set_uniform_1f (self->program, self->offset_top_uniform, 0.0f);
|
cogl_program_set_uniform_1f (self->program, self->offset_top_uniform, 0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->offset_bottom_uniform > -1) {
|
if (self->offset_bottom_uniform > -1) {
|
||||||
if (value < upper - page_size - 0.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
|
else
|
||||||
cogl_program_set_uniform_1f (self->program, self->offset_bottom_uniform, 0.0f);
|
cogl_program_set_uniform_1f (self->program, self->offset_bottom_uniform, 0.0f);
|
||||||
}
|
}
|
||||||
@ -282,6 +290,62 @@ st_scroll_view_fade_dispose (GObject *gobject)
|
|||||||
G_OBJECT_CLASS (st_scroll_view_fade_parent_class)->dispose (gobject);
|
G_OBJECT_CLASS (st_scroll_view_fade_parent_class)->dispose (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
|
static void
|
||||||
st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
||||||
{
|
{
|
||||||
@ -291,6 +355,8 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass)
|
|||||||
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
|
ClutterActorMetaClass *meta_class = CLUTTER_ACTOR_META_CLASS (klass);
|
||||||
|
|
||||||
gobject_class->dispose = st_scroll_view_fade_dispose;
|
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;
|
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 = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
|
||||||
offscreen_class->create_texture = st_scroll_view_fade_create_texture;
|
offscreen_class->create_texture = st_scroll_view_fade_create_texture;
|
||||||
offscreen_class->paint_target = st_scroll_view_fade_paint_target;
|
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
|
static void
|
||||||
st_scroll_view_fade_init (StScrollViewFade *self)
|
st_scroll_view_fade_init (StScrollViewFade *self)
|
||||||
@ -336,6 +410,7 @@ st_scroll_view_fade_init (StScrollViewFade *self)
|
|||||||
self->scrollbar_width_uniform = -1;
|
self->scrollbar_width_uniform = -1;
|
||||||
self->offset_top_uniform = -1;
|
self->offset_top_uniform = -1;
|
||||||
self->offset_bottom_uniform = -1;
|
self->offset_bottom_uniform = -1;
|
||||||
|
self->fade_offset = DEFAULT_FADE_OFFSET;
|
||||||
|
|
||||||
if (shader != COGL_INVALID_HANDLE)
|
if (shader != COGL_INVALID_HANDLE)
|
||||||
cogl_handle_ref (self->shader);
|
cogl_handle_ref (self->shader);
|
||||||
|
Loading…
Reference in New Issue
Block a user