compositor: replace weston_buffer_viewport::viewport_set
Remove the explicit boolean variable, and use illegal width to denote "not set". Split the boolean into two, so we can later start having buffer.src_* and surface.* set or not set independently. This may become useful when the wl_viewport interface is changed to allow modifying them separately. At the moment, both buffer.src_width and surface.width conditions are always in sync. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
committed by
Kristian Høgsberg
parent
952b6c8004
commit
f0cad4844c
+9
-6
@@ -402,7 +402,8 @@ weston_surface_create(struct weston_compositor *compositor)
|
|||||||
|
|
||||||
surface->buffer_viewport.buffer.transform = WL_OUTPUT_TRANSFORM_NORMAL;
|
surface->buffer_viewport.buffer.transform = WL_OUTPUT_TRANSFORM_NORMAL;
|
||||||
surface->buffer_viewport.buffer.scale = 1;
|
surface->buffer_viewport.buffer.scale = 1;
|
||||||
surface->buffer_viewport.buffer.viewport_set = 0;
|
surface->buffer_viewport.buffer.src_width = wl_fixed_from_int(-1);
|
||||||
|
surface->buffer_viewport.surface.width = -1;
|
||||||
surface->pending.buffer_viewport = surface->buffer_viewport;
|
surface->pending.buffer_viewport = surface->buffer_viewport;
|
||||||
surface->output = NULL;
|
surface->output = NULL;
|
||||||
surface->pending.newly_attached = 0;
|
surface->pending.newly_attached = 0;
|
||||||
@@ -641,7 +642,8 @@ scaler_surface_to_buffer(struct weston_surface *surface,
|
|||||||
{
|
{
|
||||||
struct weston_buffer_viewport *vp = &surface->buffer_viewport;
|
struct weston_buffer_viewport *vp = &surface->buffer_viewport;
|
||||||
|
|
||||||
if (vp->buffer.viewport_set) {
|
if (vp->buffer.src_width != wl_fixed_from_int(-1) &&
|
||||||
|
vp->surface.width != -1) {
|
||||||
double a, b;
|
double a, b;
|
||||||
|
|
||||||
a = sx / vp->surface.width;
|
a = sx / vp->surface.width;
|
||||||
@@ -1204,7 +1206,8 @@ weston_surface_set_size_from_buffer(struct weston_surface *surface)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vp->buffer.viewport_set) {
|
if (vp->buffer.src_width != wl_fixed_from_int(-1) &&
|
||||||
|
vp->surface.width != -1) {
|
||||||
surface_set_size(surface, vp->surface.width,
|
surface_set_size(surface, vp->surface.width,
|
||||||
vp->surface.height);
|
vp->surface.height);
|
||||||
return;
|
return;
|
||||||
@@ -3359,7 +3362,9 @@ destroy_viewport(struct wl_resource *resource)
|
|||||||
wl_resource_get_user_data(resource);
|
wl_resource_get_user_data(resource);
|
||||||
|
|
||||||
surface->viewport_resource = NULL;
|
surface->viewport_resource = NULL;
|
||||||
surface->pending.buffer_viewport.buffer.viewport_set = 0;
|
surface->pending.buffer_viewport.buffer.src_width =
|
||||||
|
wl_fixed_from_int(-1);
|
||||||
|
surface->pending.buffer_viewport.surface.width = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -3402,8 +3407,6 @@ viewport_set(struct wl_client *client,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
surface->pending.buffer_viewport.buffer.viewport_set = 1;
|
|
||||||
|
|
||||||
surface->pending.buffer_viewport.buffer.src_x = src_x;
|
surface->pending.buffer_viewport.buffer.src_x = src_x;
|
||||||
surface->pending.buffer_viewport.buffer.src_y = src_y;
|
surface->pending.buffer_viewport.buffer.src_y = src_y;
|
||||||
surface->pending.buffer_viewport.buffer.src_width = src_width;
|
surface->pending.buffer_viewport.buffer.src_width = src_width;
|
||||||
|
|||||||
+7
-5
@@ -662,16 +662,18 @@ struct weston_buffer_viewport {
|
|||||||
/* wl_surface.set_scaling_factor */
|
/* wl_surface.set_scaling_factor */
|
||||||
int32_t scale;
|
int32_t scale;
|
||||||
|
|
||||||
/* bool for whether wl_viewport.set has been
|
/*
|
||||||
* called yet (before this is called there is no
|
* If src_width != wl_fixed_from_int(-1),
|
||||||
* cropping or scaling on the surface) */
|
* then and only then src_* are used.
|
||||||
int viewport_set; /* bool */
|
*/
|
||||||
|
|
||||||
wl_fixed_t src_x, src_y;
|
wl_fixed_t src_x, src_y;
|
||||||
wl_fixed_t src_width, src_height;
|
wl_fixed_t src_width, src_height;
|
||||||
} buffer;
|
} buffer;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
/*
|
||||||
|
* If width == -1, the size is inferred from the buffer.
|
||||||
|
*/
|
||||||
int32_t width, height;
|
int32_t width, height;
|
||||||
} surface;
|
} surface;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -258,7 +258,8 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
|
|||||||
pixman_double_to_fixed ((double)-ev->geometry.y));
|
pixman_double_to_fixed ((double)-ev->geometry.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vp->buffer.viewport_set) {
|
if (vp->buffer.src_width != wl_fixed_from_int(-1) &&
|
||||||
|
vp->surface.width != -1) {
|
||||||
double viewport_x, viewport_y, viewport_width, viewport_height;
|
double viewport_x, viewport_y, viewport_width, viewport_height;
|
||||||
double ratio_x, ratio_y;
|
double ratio_x, ratio_y;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user