Commit 5e396ae9 authored by Axel Davy's avatar Axel Davy Committed by Kristian H. Kristensen

Restoring alpha after the shell effects.

After the fade or zoom effects, alpha could not have been 1.0, preventing
not redrawing behind opaque windows.

This patch add a reset function in weston_surface_animation to reset
some variables the effects affect.
Signed-off-by: Axel Davy's avatarAxel Davy <axel.davy@ens.fr>
parent fda26526
......@@ -124,6 +124,7 @@ struct weston_surface_animation {
struct wl_listener listener;
float start, stop;
weston_surface_animation_frame_func_t frame;
weston_surface_animation_frame_func_t reset;
weston_surface_animation_done_func_t done;
void *data;
};
......@@ -134,6 +135,8 @@ weston_surface_animation_destroy(struct weston_surface_animation *animation)
wl_list_remove(&animation->animation.link);
wl_list_remove(&animation->listener.link);
wl_list_remove(&animation->transform.link);
if (animation->reset)
animation->reset(animation);
weston_surface_geometry_dirty(animation->surface);
if (animation->done)
animation->done(animation, animation->data);
......@@ -179,6 +182,7 @@ static struct weston_surface_animation *
weston_surface_animation_run(struct weston_surface *surface,
float start, float stop,
weston_surface_animation_frame_func_t frame,
weston_surface_animation_frame_func_t reset,
weston_surface_animation_done_func_t done,
void *data)
{
......@@ -190,6 +194,7 @@ weston_surface_animation_run(struct weston_surface *surface,
animation->surface = surface;
animation->frame = frame;
animation->reset = reset;
animation->done = done;
animation->data = data;
animation->start = start;
......@@ -212,6 +217,14 @@ weston_surface_animation_run(struct weston_surface *surface,
return animation;
}
static void
reset_alpha(struct weston_surface_animation *animation)
{
struct weston_surface *surface = animation->surface;
surface->alpha = animation->stop;
}
static void
zoom_frame(struct weston_surface_animation *animation)
{
......@@ -242,7 +255,8 @@ weston_zoom_run(struct weston_surface *surface, float start, float stop,
struct weston_surface_animation *zoom;
zoom = weston_surface_animation_run(surface, start, stop,
zoom_frame, done, data);
zoom_frame, reset_alpha,
done, data);
weston_spring_init(&zoom->spring, 300.0, start, stop);
zoom->spring.friction = 1400;
......@@ -269,8 +283,9 @@ weston_fade_run(struct weston_surface *surface,
{
struct weston_surface_animation *fade;
fade = weston_surface_animation_run(surface, 0, 0,
fade_frame, done, data);
fade = weston_surface_animation_run(surface, 0, end,
fade_frame, reset_alpha,
done, data);
weston_spring_init(&fade->spring, k, start, end);
......@@ -307,7 +322,8 @@ weston_slide_run(struct weston_surface *surface, float start, float stop,
struct weston_surface_animation *animation;
animation = weston_surface_animation_run(surface, start, stop,
slide_frame, done, data);
slide_frame, NULL, done,
data);
if (!animation)
return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment