From: Kristian Høgsberg Date: Fri, 22 Jun 2012 02:34:39 +0000 (-0400) Subject: shell: Animate input panel mapping X-Git-Tag: 0.94.90~29 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ce6a2a2b389057529bd46184eb833cd9cb4244f;p=profile%2Fivi%2Fweston.git shell: Animate input panel mapping We slide it in from below. --- diff --git a/src/compositor.h b/src/compositor.h index bcc8ad2..8331faa 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -725,7 +725,9 @@ weston_zoom_run(struct weston_surface *surface, GLfloat start, GLfloat stop, struct weston_surface_animation * weston_fade_run(struct weston_surface *surface, weston_surface_animation_done_func_t done, void *data); - +struct weston_surface_animation * +weston_slide_run(struct weston_surface *surface, GLfloat start, GLfloat stop, + weston_surface_animation_done_func_t done, void *data); void weston_surface_set_color(struct weston_surface *surface, diff --git a/src/shell.c b/src/shell.c index b3a7e68..c7ff3c5 100644 --- a/src/shell.c +++ b/src/shell.c @@ -1919,12 +1919,17 @@ hide_screensaver(struct desktop_shell *shell, struct shell_surface *surface) static void show_input_panel(struct desktop_shell *shell, struct shell_surface *surface) { + if (weston_surface_is_mapped(surface->surface)) + return; + wl_list_remove(&surface->surface->layer_link); wl_list_insert(&shell->panel_layer.surface_list, &surface->surface->layer_link); surface->surface->output = surface->output; weston_surface_damage(surface->surface); - weston_zoom_run(surface->surface, 0.8, 1.0, NULL, NULL); + weston_slide_run(surface->surface, + surface->surface->geometry.height, 0, + NULL, NULL); } static void @@ -2660,7 +2665,9 @@ map(struct desktop_shell *shell, struct weston_surface *surface, break; case SHELL_SURFACE_INPUT_PANEL: bottom_center_on_output(surface, get_default_output(compositor)); - break; + /* Don't map the input panel here, wait for + * show_input_panels signal. */ + return; case SHELL_SURFACE_POPUP: shell_map_popup(shsurf); case SHELL_SURFACE_NONE: diff --git a/src/util.c b/src/util.c index ff9310d..cb03dde 100644 --- a/src/util.c +++ b/src/util.c @@ -234,6 +234,32 @@ weston_fade_run(struct weston_surface *surface, fade_frame, done, data); } +static void +slide_frame(struct weston_surface_animation *animation) +{ + GLfloat scale; + + scale = animation->start + + (animation->stop - animation->start) * + animation->spring.current; + weston_matrix_init(&animation->transform.matrix); + weston_matrix_translate(&animation->transform.matrix, 0, scale, 0); +} + +WL_EXPORT struct weston_surface_animation * +weston_slide_run(struct weston_surface *surface, GLfloat start, GLfloat stop, + weston_surface_animation_done_func_t done, void *data) +{ + struct weston_surface_animation *animation; + + animation = weston_surface_animation_run(surface, start, stop, + slide_frame, done, data); + animation->spring.friction = 900; + animation->spring.k = 300; + + return animation; +} + struct weston_binding { uint32_t key; uint32_t button;