Restructure output zoom.
A quick clean-up of zoom to prepare for the other patches in this series.
This commit is contained in:
committed by
Kristian Høgsberg
parent
85ecac0a4e
commit
850ca42b9b
+10
-10
@@ -2442,20 +2442,18 @@ weston_output_destroy(struct weston_output *output)
|
|||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
weston_output_update_zoom(struct weston_output *output, wl_fixed_t fx, wl_fixed_t fy)
|
weston_output_update_zoom(struct weston_output *output, wl_fixed_t fx, wl_fixed_t fy)
|
||||||
{
|
{
|
||||||
float ratio;
|
|
||||||
int32_t x, y;
|
int32_t x, y;
|
||||||
|
|
||||||
if (output->zoom.level <= 0)
|
if (output->zoom.level >= 1.0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
x = wl_fixed_to_int(fx);
|
x = wl_fixed_to_int(fx);
|
||||||
y = wl_fixed_to_int(fy);
|
y = wl_fixed_to_int(fy);
|
||||||
|
|
||||||
output->zoom.magnification = 1 / output->zoom.level;
|
output->zoom.trans_x = (((float)(x - output->x) / output->current->width) *
|
||||||
ratio = 1 - (1 / output->zoom.magnification);
|
(output->zoom.level * 2)) - output->zoom.level;
|
||||||
|
output->zoom.trans_y = (((float)(y - output->y) / output->current->height) *
|
||||||
output->zoom.trans_x = (((float)(x - output->x) / output->current->width) * (ratio * 2)) - ratio;
|
(output->zoom.level * 2)) - output->zoom.level;
|
||||||
output->zoom.trans_y = (((float)(y - output->y) / output->current->height) * (ratio * 2)) - ratio;
|
|
||||||
|
|
||||||
output->dirty = 1;
|
output->dirty = 1;
|
||||||
weston_output_damage(output);
|
weston_output_damage(output);
|
||||||
@@ -2465,6 +2463,7 @@ WL_EXPORT void
|
|||||||
weston_output_update_matrix(struct weston_output *output)
|
weston_output_update_matrix(struct weston_output *output)
|
||||||
{
|
{
|
||||||
int flip;
|
int flip;
|
||||||
|
float magnification;
|
||||||
struct weston_matrix camera;
|
struct weston_matrix camera;
|
||||||
struct weston_matrix modelview;
|
struct weston_matrix modelview;
|
||||||
|
|
||||||
@@ -2477,12 +2476,14 @@ weston_output_update_matrix(struct weston_output *output)
|
|||||||
weston_matrix_scale(&output->matrix,
|
weston_matrix_scale(&output->matrix,
|
||||||
2.0 / (output->current->width + output->border.left + output->border.right),
|
2.0 / (output->current->width + output->border.left + output->border.right),
|
||||||
flip * 2.0 / (output->current->height + output->border.top + output->border.bottom), 1);
|
flip * 2.0 / (output->current->height + output->border.top + output->border.bottom), 1);
|
||||||
|
|
||||||
if (output->zoom.active) {
|
if (output->zoom.active) {
|
||||||
|
magnification = 1 / (1 - output->zoom.level);
|
||||||
weston_matrix_init(&camera);
|
weston_matrix_init(&camera);
|
||||||
weston_matrix_init(&modelview);
|
weston_matrix_init(&modelview);
|
||||||
weston_matrix_translate(&camera, output->zoom.trans_x, flip * output->zoom.trans_y, 0);
|
weston_matrix_translate(&camera, output->zoom.trans_x, flip * output->zoom.trans_y, 0);
|
||||||
weston_matrix_invert(&modelview, &camera);
|
weston_matrix_invert(&modelview, &camera);
|
||||||
weston_matrix_scale(&modelview, output->zoom.magnification, output->zoom.magnification, 1.0);
|
weston_matrix_scale(&modelview, magnification, magnification, 1.0);
|
||||||
weston_matrix_multiply(&output->matrix, &modelview);
|
weston_matrix_multiply(&output->matrix, &modelview);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2519,8 +2520,7 @@ weston_output_init(struct weston_output *output, struct weston_compositor *c,
|
|||||||
|
|
||||||
output->zoom.active = 0;
|
output->zoom.active = 0;
|
||||||
output->zoom.increment = 0.05;
|
output->zoom.increment = 0.05;
|
||||||
output->zoom.level = 1.0;
|
output->zoom.level = 0.0;
|
||||||
output->zoom.magnification = 1.0;
|
|
||||||
output->zoom.trans_x = 0.0;
|
output->zoom.trans_x = 0.0;
|
||||||
output->zoom.trans_y = 0.0;
|
output->zoom.trans_y = 0.0;
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ struct weston_output_zoom {
|
|||||||
int active;
|
int active;
|
||||||
float increment;
|
float increment;
|
||||||
float level;
|
float level;
|
||||||
float magnification;
|
|
||||||
float trans_x, trans_y;
|
float trans_x, trans_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+8
-5
@@ -1637,6 +1637,7 @@ zoom_binding(struct wl_seat *seat, uint32_t time,
|
|||||||
struct weston_seat *ws = (struct weston_seat *) seat;
|
struct weston_seat *ws = (struct weston_seat *) seat;
|
||||||
struct weston_compositor *compositor = ws->compositor;
|
struct weston_compositor *compositor = ws->compositor;
|
||||||
struct weston_output *output;
|
struct weston_output *output;
|
||||||
|
float maximum_level;
|
||||||
|
|
||||||
wl_list_for_each(output, &compositor->output_list, link) {
|
wl_list_for_each(output, &compositor->output_list, link) {
|
||||||
if (pixman_region32_contains_point(&output->region,
|
if (pixman_region32_contains_point(&output->region,
|
||||||
@@ -1644,15 +1645,17 @@ zoom_binding(struct wl_seat *seat, uint32_t time,
|
|||||||
wl_fixed_to_double(seat->pointer->y),
|
wl_fixed_to_double(seat->pointer->y),
|
||||||
NULL)) {
|
NULL)) {
|
||||||
output->zoom.active = 1;
|
output->zoom.active = 1;
|
||||||
output->zoom.level += output->zoom.increment * -value;
|
output->zoom.level += output->zoom.increment * value;
|
||||||
|
|
||||||
if (output->zoom.level >= 1.0) {
|
if (output->zoom.level <= 0.0) {
|
||||||
output->zoom.active = 0;
|
output->zoom.active = 0;
|
||||||
output->zoom.level = 1.0;
|
output->zoom.level = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output->zoom.level < output->zoom.increment)
|
maximum_level = 1 - output->zoom.increment;
|
||||||
output->zoom.level = output->zoom.increment;
|
|
||||||
|
if (output->zoom.level > maximum_level)
|
||||||
|
output->zoom.level = maximum_level;
|
||||||
|
|
||||||
weston_output_update_zoom(output,
|
weston_output_update_zoom(output,
|
||||||
seat->pointer->x,
|
seat->pointer->x,
|
||||||
|
|||||||
Reference in New Issue
Block a user