static void slide_frame(struct weston_surface_animation *animation) { float 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); }
static void zoom_frame(struct weston_surface_animation *animation) { struct weston_surface *es = animation->surface; float scale; scale = animation->start + (animation->stop - animation->start) * animation->spring.current; weston_matrix_init(&animation->transform.matrix); weston_matrix_translate(&animation->transform.matrix, -0.5f * es->geometry.width, -0.5f * es->geometry.height, 0); weston_matrix_scale(&animation->transform.matrix, scale, scale, scale); weston_matrix_translate(&animation->transform.matrix, 0.5f * es->geometry.width, 0.5f * es->geometry.height, 0); es->alpha = animation->spring.current; if (es->alpha > 1.0) es->alpha = 1.0; }
static void pixman_renderer_compute_transform(pixman_transform_t *transform_out, struct weston_view *ev, struct weston_output *output) { struct weston_matrix matrix; /* Set up the source transformation based on the surface position, the output position/transform/scale and the client specified buffer transform/scale */ matrix = output->inverse_matrix; if (ev->transform.enabled) { weston_matrix_multiply(&matrix, &ev->transform.inverse); } else { weston_matrix_translate(&matrix, -ev->geometry.x, -ev->geometry.y, 0); } weston_matrix_multiply(&matrix, &ev->surface->surface_to_buffer_matrix); weston_matrix_to_pixman_transform(transform_out, &matrix); }
void Transform::translate(float x, float y, float z) { weston_matrix_translate(&m_transform.matrix, x, y, z); }