We slide it in from below.
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,
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
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:
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;