static void weston_zoom_frame_xy(struct weston_animation *animation, struct weston_output *output, uint32_t msecs) { struct weston_seat *seat = weston_zoom_pick_seat(output->compositor); wl_fixed_t x, y; if (animation->frame_counter <= 1) output->zoom.spring_xy.timestamp = msecs; weston_spring_update(&output->zoom.spring_xy, msecs); x = output->zoom.from.x - ((output->zoom.from.x - output->zoom.to.x) * output->zoom.spring_xy.current); y = output->zoom.from.y - ((output->zoom.from.y - output->zoom.to.y) * output->zoom.spring_xy.current); output->zoom.current.x = x; output->zoom.current.y = y; if (weston_spring_done(&output->zoom.spring_xy)) { output->zoom.spring_xy.current = output->zoom.spring_xy.target; output->zoom.current.x = seat->pointer->x; output->zoom.current.y = seat->pointer->y; wl_list_remove(&animation->link); wl_list_init(&animation->link); } output->dirty = 1; weston_output_damage(output); }
static void weston_zoom_frame_z(struct weston_animation *animation, struct weston_output *output, uint32_t msecs) { if (animation->frame_counter <= 1) output->zoom.spring_z.timestamp = msecs; weston_spring_update(&output->zoom.spring_z, msecs); if (output->zoom.spring_z.current > output->zoom.max_level) output->zoom.spring_z.current = output->zoom.max_level; else if (output->zoom.spring_z.current < 0.0) output->zoom.spring_z.current = 0.0; if (weston_spring_done(&output->zoom.spring_z)) { if (output->zoom.active && output->zoom.level <= 0.0) { output->zoom.active = 0; output->disable_planes--; wl_list_remove(&output->zoom.motion_listener.link); } output->zoom.spring_z.current = output->zoom.level; wl_list_remove(&animation->link); wl_list_init(&animation->link); } output->dirty = 1; weston_output_damage(output); }
static void weston_zoom_transition(struct weston_output *output, wl_fixed_t x, wl_fixed_t y) { if (output->zoom.level != output->zoom.spring_z.current) { output->zoom.spring_z.target = output->zoom.level; if (wl_list_empty(&output->zoom.animation_z.link)) { output->zoom.animation_z.frame_counter = 0; wl_list_insert(output->animation_list.prev, &output->zoom.animation_z.link); } } output->dirty = 1; weston_output_damage(output); }
static void weston_zoom_transition(struct weston_output *output, uint32_t type, wl_fixed_t x, wl_fixed_t y) { if (output->zoom.type != type) { /* Set from/to points and start animation */ output->zoom.spring_xy.current = 0.0; output->zoom.spring_xy.previous = 0.0; output->zoom.spring_xy.target = 1.0; if (wl_list_empty(&output->zoom.animation_xy.link)) { output->zoom.animation_xy.frame_counter = 0; wl_list_insert(output->animation_list.prev, &output->zoom.animation_xy.link); output->zoom.from.x = (type == ZOOM_FOCUS_TEXT) ? x : output->zoom.text_cursor.x; output->zoom.from.y = (type == ZOOM_FOCUS_TEXT) ? y : output->zoom.text_cursor.y; } else { output->zoom.from.x = output->zoom.current.x; output->zoom.from.y = output->zoom.current.y; } output->zoom.to.x = (type == ZOOM_FOCUS_POINTER) ? x : output->zoom.text_cursor.x; output->zoom.to.y = (type == ZOOM_FOCUS_POINTER) ? y : output->zoom.text_cursor.y; output->zoom.current.x = output->zoom.from.x; output->zoom.current.y = output->zoom.from.y; output->zoom.type = type; } if (output->zoom.level != output->zoom.spring_z.current) { output->zoom.spring_z.target = output->zoom.level; if (wl_list_empty(&output->zoom.animation_z.link)) { output->zoom.animation_z.frame_counter = 0; wl_list_insert(output->animation_list.prev, &output->zoom.animation_z.link); } } output->dirty = 1; weston_output_damage(output); }