libweston: Use weston_coord in struct weston_output

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
Derek Foreman 2022-11-09 14:28:15 -06:00
parent 244dc963b9
commit e8208d21d7
18 changed files with 167 additions and 155 deletions

View File

@ -1766,10 +1766,9 @@ weston_output_lazy_align(struct weston_output *output)
if (!wl_list_empty(&c->output_list)) {
peer = container_of(c->output_list.prev,
struct weston_output, link);
next_x = peer->x + peer->width;
next_x = peer->pos.c.x + peer->width;
}
output->x = next_x;
output->y = 0;
output->pos.c = weston_coord(next_x, 0);
}
static void

View File

@ -870,7 +870,9 @@ shared_output_repainted(struct wl_listener *listener, void *data)
*/
pixman_region32_init(&sb_damage);
pixman_region32_copy(&sb_damage, global_output_damage);
pixman_region32_translate(&sb_damage, -so->output->x, -so->output->y);
pixman_region32_translate(&sb_damage,
-so->output->pos.c.x,
-so->output->pos.c.y);
/* Apply damage to all buffers */
wl_list_for_each(sb, &so->shm.buffers, link)
@ -1149,12 +1151,12 @@ weston_output_share(struct weston_output *output, struct screen_share *ss)
}
static struct weston_output *
weston_output_find(struct weston_compositor *c, int32_t x, int32_t y)
weston_output_find(struct weston_compositor *c, struct weston_coord_global pos)
{
struct weston_output *output;
wl_list_for_each(output, &c->output_list, link)
if (weston_output_contains_point(output, x, y))
if (weston_output_contains_coord(output, pos))
return output;
return NULL;
@ -1171,8 +1173,7 @@ share_output_binding(struct weston_keyboard *keyboard,
pointer = weston_seat_get_pointer(keyboard->seat);
if (pointer) {
output = weston_output_find(pointer->seat->compositor,
pointer->pos.c.x,
pointer->pos.c.y);
pointer->pos);
} else {
output = weston_shell_utils_get_focused_output(keyboard->seat->compositor);
if (!output)

View File

@ -72,8 +72,10 @@ calc_input_panel_position(struct input_panel_surface *ip_surface, float *x, floa
*y = view->geometry.pos_offset.y +
shell->text_input.cursor_rectangle.y2;
} else {
*x = ip_surface->output->x + (ip_surface->output->width - ip_surface->surface->width) / 2;
*y = ip_surface->output->y + ip_surface->output->height - ip_surface->surface->height;
*x = ip_surface->output->pos.c.x +
(ip_surface->output->width - ip_surface->surface->width) / 2;
*y = ip_surface->output->pos.c.y +
ip_surface->output->height - ip_surface->surface->height;
}
return 0;
}

View File

@ -389,8 +389,8 @@ get_output_work_area(struct desktop_shell *shell,
return;
}
area->x = output->x;
area->y = output->y;
area->x = output->pos.c.x;
area->y = output->pos.c.y;
get_output_panel_size(shell, output, &panel_width, &panel_height);
switch (shell->panel_position) {
@ -580,7 +580,7 @@ create_focus_surface(struct weston_compositor *ec,
struct focus_surface *fsurf = NULL;
struct weston_curtain_params curtain_params = {
.r = 0.0, .g = 0.0, .b = 0.0, .a = 1.0,
.x = output->x, .y = output->y,
.x = output->pos.c.x, .y = output->pos.c.y,
.width = output->width, .height = output->height,
.surface_committed = focus_surface_committed,
.get_label = focus_surface_get_label,
@ -1922,7 +1922,7 @@ shell_ensure_fullscreen_black_view(struct shell_surface *shsurf)
struct weston_output *output = shsurf->fullscreen_output;
struct weston_curtain_params curtain_params = {
.r = 0.0, .g = 0.0, .b = 0.0, .a = 1.0,
.x = output->x, .y = output->y,
.x = output->pos.c.x, .y = output->pos.c.y,
.width = output->width, .height = output->height,
.surface_committed = black_surface_committed,
.get_label = black_surface_get_label,
@ -2326,7 +2326,7 @@ set_position_from_xwayland(struct shell_surface *shsurf)
#ifdef WM_DEBUG
weston_log("%s: XWM %d, %d; geometry %d, %d; view %f, %f\n",
__func__, shsurf->xwayland.x, shsurf->xwayland.y,
geometry.x, geometry.y, x, y);
(int)geometry.coord.x, (int)geometry.coord.y, pos.x, pos.y);
#endif
}
@ -2874,7 +2874,9 @@ configure_static_view(struct weston_view *ev, struct weston_layer *layer, int x,
}
}
pos.c = weston_coord(ev->output->x + x, ev->output->y + y);
pos = ev->output->pos;
pos.c.x += x;
pos.c.y += y;
weston_view_set_position(ev, pos);
weston_surface_map(ev->surface);
ev->is_mapped = true;
@ -3985,7 +3987,7 @@ shell_fade_create_view_for_output(struct desktop_shell *shell,
struct weston_output *output = shell_output->output;
struct weston_curtain_params curtain_params = {
.r = 0.0, .g = 0.0, .b = 0.0, .a = 1.0,
.x = output->x, .y = output->y,
.x = output->pos.c.x, .y = output->pos.c.y,
.width = output->width, .height = output->height,
.surface_committed = black_surface_committed,
.get_label = fade_surface_get_label,
@ -4228,7 +4230,6 @@ weston_view_set_initial_position(struct weston_view *view,
struct desktop_shell *shell)
{
struct weston_compositor *compositor = shell->compositor;
int ix = 0, iy = 0;
int32_t range_x, range_y;
int32_t x, y;
struct weston_output *output, *target_output = NULL;
@ -4241,18 +4242,18 @@ weston_view_set_initial_position(struct weston_view *view,
*
* TODO: Do something clever for touch too?
*/
pos.c = weston_coord(0, 0);
wl_list_for_each(seat, &compositor->seat_list, link) {
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
if (pointer) {
ix = pointer->pos.c.x;
iy = pointer->pos.c.y;
pos = pointer->pos;
break;
}
}
wl_list_for_each(output, &compositor->output_list, link) {
if (weston_output_contains_point(output, ix, iy)) {
if (weston_output_contains_coord(output, pos)) {
target_output = output;
break;
}
@ -4655,21 +4656,20 @@ shell_reposition_view_on_output_change(struct weston_view *view)
struct weston_output *output, *first_output;
struct weston_compositor *ec = view->surface->compositor;
struct shell_surface *shsurf;
float x, y;
int visible;
if (wl_list_empty(&ec->output_list))
return;
x = view->geometry.pos_offset.x;
y = view->geometry.pos_offset.y;
/* At this point the destroyed output is not in the list anymore.
* If the view is still visible somewhere, we leave where it is,
* otherwise, move it to the first output. */
visible = 0;
wl_list_for_each(output, &ec->output_list, link) {
if (weston_output_contains_point(output, x, y)) {
struct weston_coord_global pos;
pos.c = view->geometry.pos_offset;
if (weston_output_contains_coord(output, pos)) {
visible = 1;
break;
}
@ -4685,7 +4685,7 @@ shell_reposition_view_on_output_change(struct weston_view *view)
first_output = container_of(ec->output_list.next,
struct weston_output, link);
pos.c = weston_coord(first_output->x, first_output->y);
pos = first_output->pos;
pos.c.x += first_output->width / 4;
pos.c.y += first_output->height / 4;
@ -4832,12 +4832,11 @@ handle_output_move_layer(struct desktop_shell *shell,
wl_list_for_each(view, &layer->view_list.link, layer_link.link) {
struct weston_coord_global pos;
if (view->output != output)
continue;
pos.c = weston_coord(output->move_x, output->move_y);
pos.c = weston_coord_add(view->geometry.pos_offset, pos.c);
pos.c = weston_coord_add(view->geometry.pos_offset,
output->move.c);
weston_view_set_position(view, pos);
}
}

View File

@ -324,7 +324,7 @@ fs_output_create(struct fullscreen_shell *shell, struct weston_output *output)
fsout->surface_destroyed.notify = surface_destroyed;
fsout->pending.surface_destroyed.notify = pending_surface_destroyed;
fsout->curtain = create_curtain(shell->compositor, fsout,
output->x, output->y,
output->pos.c.x, output->pos.c.y,
output->width, output->height);
fsout->curtain->view->is_mapped = true;
weston_layer_entry_insert(&shell->layer.view_list,
@ -369,20 +369,16 @@ fs_output_scale_view(struct fs_output *fsout, float width, float height)
struct weston_matrix *matrix;
struct weston_view *view = fsout->view;
struct weston_output *output = fsout->output;
struct weston_coord_global pos = fsout->output->pos;
weston_shell_utils_subsurfaces_boundingbox(view->surface, &surf_x, &surf_y,
&surf_width, &surf_height);
if (output->width == surf_width && output->height == surf_height) {
struct weston_coord_global pos;
pos.c = weston_coord(fsout->output->x, fsout->output->y);
pos.c.x -= surf_x;
pos.c.y -= surf_y;
weston_view_set_position(view, pos);
} else {
struct weston_coord_global pos;
matrix = &fsout->transform.matrix;
weston_matrix_init(matrix);
@ -392,10 +388,8 @@ fs_output_scale_view(struct fs_output *fsout, float width, float height)
wl_list_insert(&fsout->view->geometry.transformation_list,
&fsout->transform.link);
pos.c = weston_coord(output->x, output->y);
pos.c.x += (output->width - width) / 2 - surf_x;
pos.c.y += (output->height - height) / 2 - surf_y;
weston_view_set_position(view, pos);
}
}
@ -464,7 +458,7 @@ fs_output_configure_simple(struct fs_output *fsout,
break;
}
pos.c = weston_coord(fsout->output->x, fsout->output->y);
pos = fsout->output->pos;
pos.c.x -= surf_x;
pos.c.y -= surf_y;
weston_view_set_position(fsout->curtain->view, pos);
@ -544,7 +538,7 @@ fs_output_configure_for_mode(struct fs_output *fsout,
fs_output_apply_pending(fsout);
pos.c = weston_coord(fsout->output->x, fsout->output->y);
pos = fsout->output->pos;
pos.c.x -= surf_x;
pos.c.y -= surf_y;
weston_view_set_position(fsout->view, pos);

View File

@ -468,7 +468,8 @@ struct weston_output {
struct weston_matrix inverse_matrix;
struct wl_list animation_list;
int32_t x, y, width, height;
struct weston_coord_global pos;
int32_t width, height;
/** List of paint nodes in z-order, from top to bottom, maybe pruned
*
@ -503,7 +504,7 @@ struct weston_output {
struct wl_signal frame_signal;
struct wl_signal destroy_signal; /**< sent when disabled */
int move_x, move_y;
struct weston_coord_global move;
struct timespec frame_time; /* presentation timestamp */
uint64_t msc; /* media stream counter */
int disable_planes;
@ -2550,8 +2551,8 @@ weston_output_allow_protection(struct weston_output *output,
bool allow_protection);
bool
weston_output_contains_point(struct weston_output *output,
int32_t x, int32_t y);
weston_output_contains_coord(struct weston_output *output,
struct weston_coord_global pos);
int
weston_compositor_enable_touch_calibrator(struct weston_compositor *compositor,

View File

@ -546,13 +546,13 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
lp->dest_y,
lp->dest_width,
lp->dest_height };
struct ivi_rectangle screen_dest_rect = { output->x,
output->y,
struct ivi_rectangle screen_dest_rect = { output->pos.c.x,
output->pos.c.y,
output->width,
output->height };
struct ivi_rectangle layer_dest_rect_in_global =
{ lp->dest_x + output->x,
lp->dest_y + output->y,
{ lp->dest_x + output->pos.c.x,
lp->dest_y + output->pos.c.y,
lp->dest_width,
lp->dest_height };
struct ivi_rectangle layer_dest_rect_in_global_intersected;
@ -569,7 +569,7 @@ calc_surface_to_global_matrix_and_mask_to_weston_surface(
calc_transformation_matrix(&surface_source_rect, &surface_dest_rect, m);
calc_transformation_matrix(&layer_source_rect, &layer_dest_rect, m);
weston_matrix_translate(m, output->x, output->y, 0.0f);
weston_matrix_translate(m, output->pos.c.x, output->pos.c.y, 0.0f);
/*
* destination rectangle of layer in multi screens coordinate

View File

@ -502,8 +502,8 @@ kiosk_shell_output_recreate_background(struct kiosk_shell_output *shoutput)
curtain_params.b = ((bg_color >> 0) & 0xff) / 255.0;
curtain_params.a = 1.0;
curtain_params.x = output->x;
curtain_params.y = output->y;
curtain_params.x = output->pos.c.x;
curtain_params.y = output->pos.c.y;
curtain_params.width = output->width;
curtain_params.height = output->height;
@ -1130,25 +1130,28 @@ kiosk_shell_handle_output_moved(struct wl_listener *listener, void *data)
container_of(listener, struct kiosk_shell, output_moved_listener);
struct weston_output *output = data;
struct weston_view *view;
struct weston_coord_global pos;
wl_list_for_each(view, &shell->background_layer.view_list.link,
layer_link.link) {
struct weston_coord_global pos;
if (view->output != output)
continue;
pos.c = view->geometry.pos_offset;
pos.c.x += output->move_x;
pos.c.y += output->move_y;
pos.c = weston_coord_add(view->geometry.pos_offset,
output->move.c);
weston_view_set_position(view, pos);
}
wl_list_for_each(view, &shell->normal_layer.view_list.link,
layer_link.link) {
struct weston_coord_global pos;
if (view->output != output)
continue;
pos.c = view->geometry.pos_offset;
pos.c.x += output->move_x;
pos.c.x += output->move_y;
pos.c = weston_coord_add(view->geometry.pos_offset,
output->move.c);
weston_view_set_position(view, pos);
}
}

View File

@ -1455,7 +1455,8 @@ drm_output_init_pixman(struct drm_output *output, struct drm_backend *b)
goto err;
pixman_region32_init_rect(&output->renderbuffer[i]->damage,
output->base.x, output->base.y,
output->base.pos.c.x,
output->base.pos.c.y,
output->base.width,
output->base.height);
}

View File

@ -315,7 +315,7 @@ rdp_head_contains(struct rdp_head *rdp_head, int32_t x, int32_t y)
if (!output)
return false;
return rect_contains(x, y, output->x, output->y,
return rect_contains(x, y, output->pos.c.x, output->pos.c.y,
output->width * output->scale,
output->height * output->scale);
}
@ -349,8 +349,8 @@ to_weston_coordinate(RdpPeerContext *peerContext, int32_t *x, int32_t *y)
sx *= scale;
sy *= scale;
/* translate x/y to offset of this output in weston space. */
sx += output->x;
sy += output->y;
sx += output->pos.c.x;
sy += output->pos.c.y;
rdp_debug_verbose(b, "%s: (x:%d, y:%d) -> (sx:%d, sy:%d) at head:%s\n",
__func__, *x, *y, sx, sy, head->base.name);
*x = sx;

View File

@ -548,10 +548,10 @@ vnc_region_global_to_output(pixman_region16_t *dst,
dest_rects = xcalloc(n_rects, sizeof(*dest_rects));
for (i = 0; i < n_rects; i++) {
dest_rects[i].x1 = src_rects[i].x1 - output->x;
dest_rects[i].y1 = src_rects[i].y1 - output->y;
dest_rects[i].x2 = src_rects[i].x2 - output->x;
dest_rects[i].y2 = src_rects[i].y2 - output->y;
dest_rects[i].x1 = src_rects[i].x1 - output->pos.c.x;
dest_rects[i].y1 = src_rects[i].y1 - output->pos.c.y;
dest_rects[i].x2 = src_rects[i].x2 - output->pos.c.x;
dest_rects[i].y2 = src_rects[i].y2 - output->pos.c.y;
}
pixman_region_init_rects(dst, dest_rects, n_rects);

View File

@ -1266,7 +1266,8 @@ wayland_output_enable(struct weston_output *base)
weston_log("Creating %dx%d wayland output at (%d, %d)\n",
output->base.current_mode->width,
output->base.current_mode->height,
output->base.x, output->base.y);
(int)output->base.pos.c.x,
(int)output->base.pos.c.y);
if (!output->parent.surface)
ret = wayland_backend_create_output_surface(output);

View File

@ -264,8 +264,8 @@ weston_mode_switch_send_events(struct weston_head *head,
}
wl_resource_for_each(resource, &head->xdg_output_resource_list) {
zxdg_output_v1_send_logical_position(resource,
output->x,
output->y);
output->pos.c.x,
output->pos.c.y);
zxdg_output_v1_send_logical_size(resource,
output->width,
output->height);
@ -274,10 +274,11 @@ weston_mode_switch_send_events(struct weston_head *head,
}
WL_EXPORT bool
weston_output_contains_point(struct weston_output *output,
int32_t x, int32_t y)
weston_output_contains_coord(struct weston_output *output,
struct weston_coord_global pos)
{
return pixman_region32_contains_point(&output->region, x, y, NULL);
return pixman_region32_contains_point(&output->region,
pos.c.x, pos.c.y, NULL);
}
static void
@ -294,7 +295,8 @@ weston_mode_switch_finish(struct weston_output *output,
/* Update output region and transformation matrix */
weston_output_transform_scale_init(output, output->transform, output->current_scale);
pixman_region32_init_rect(&output->region, output->x, output->y,
pixman_region32_init_rect(&output->region,
output->pos.c.x, output->pos.c.y,
output->width, output->height);
weston_output_update_matrix(output);
@ -303,6 +305,7 @@ weston_mode_switch_finish(struct weston_output *output,
* lower-right corner */
wl_list_for_each(seat, &output->compositor->seat_list, link) {
struct weston_pointer *pointer = weston_seat_get_pointer(seat);
double quantum = 1.0 / 1024.0;
int32_t x, y;
if (!pointer)
@ -312,15 +315,14 @@ weston_mode_switch_finish(struct weston_output *output,
y = pointer->pos.c.y;
if (!pixman_region32_contains_point(&old_output_region,
x, y, NULL) ||
weston_output_contains_point(output, x, y))
weston_output_contains_coord(output, pointer->pos))
continue;
if (x >= output->x + output->width)
x = output->x + output->width - 1;
if (y >= output->y + output->height)
y = output->y + output->height - 1;
if (pointer->pos.c.x >= output->pos.c.x + output->width - quantum)
pointer->pos.c.x = output->pos.c.x + output->width - quantum;
pointer->pos.c = weston_coord(x, y);
if (pointer->pos.c.y >= output->pos.c.y + output->height - quantum)
pointer->pos.c.y = output->pos.c.y + output->height - quantum;
}
pixman_region32_fini(&old_output_region);
@ -1819,10 +1821,10 @@ weston_view_matches_output_entirely(struct weston_view *ev,
assert(!ev->transform.dirty);
if (extents->x1 != output->x ||
extents->y1 != output->y ||
extents->x2 != output->x + output->width ||
extents->y2 != output->y + output->height)
if (extents->x1 != (int32_t)output->pos.c.x ||
extents->y1 != (int32_t)output->pos.c.y ||
extents->x2 != (int32_t)output->pos.c.x + output->width ||
extents->y2 != (int32_t)output->pos.c.y + output->height)
return false;
return true;
@ -5396,8 +5398,8 @@ bind_output(struct wl_client *client,
unbind_resource);
wl_output_send_geometry(resource,
output->x,
output->y,
output->pos.c.x,
output->pos.c.y,
head->mm_width,
head->mm_height,
head->subpixel,
@ -6381,10 +6383,9 @@ weston_compositor_reflow_outputs(struct weston_compositor *compositor,
}
if (start_resizing) {
struct weston_coord_global pos;
struct weston_coord_global pos = output->pos;
pos.c = weston_coord(output->x + delta_width,
output->y);
pos.c.x += delta_width;
weston_output_set_position(output, pos);
}
}
@ -6417,7 +6418,7 @@ weston_output_update_matrix(struct weston_output *output)
weston_output_dirty_paint_nodes(output);
weston_matrix_init_transform(&output->matrix, output->transform,
output->x, output->y,
output->pos.c.x, output->pos.c.y,
output->width, output->height,
output->current_scale);
@ -6438,13 +6439,16 @@ weston_output_transform_scale_init(struct weston_output *output, uint32_t transf
}
static void
weston_output_init_geometry(struct weston_output *output, int x, int y)
weston_output_init_geometry(struct weston_output *output,
struct weston_coord_global pos)
{
output->x = x;
output->y = y;
output->pos = pos;
output->pos.c.x = (int)output->pos.c.x;
output->pos.c.y = (int)output->pos.c.y;
pixman_region32_fini(&output->region);
pixman_region32_init_rect(&output->region, x, y,
pixman_region32_init_rect(&output->region,
output->pos.c.x, output->pos.c.y,
output->width,
output->height);
}
@ -6460,19 +6464,20 @@ weston_output_set_position(struct weston_output *output,
struct wl_resource *resource;
int ver;
output->pos.c.x = (int)output->pos.c.x;
output->pos.c.y = (int)output->pos.c.y;
if (!output->enabled) {
output->x = pos.c.x;
output->y = pos.c.y;
output->pos = pos;
return;
}
output->move_x = pos.c.x - output->x;
output->move_y = pos.c.y - output->y;
output->move.c = weston_coord_sub(pos.c, output->pos.c);
if (output->move_x == 0 && output->move_y == 0)
if (output->move.c.x == 0 && output->move.c.y == 0)
return;
weston_output_init_geometry(output, pos.c.x, pos.c.y);
weston_output_init_geometry(output, pos);
weston_output_update_matrix(output);
@ -6483,8 +6488,8 @@ weston_output_set_position(struct weston_output *output,
wl_list_for_each(head, &output->head_list, output_link) {
wl_resource_for_each(resource, &head->resource_list) {
wl_output_send_geometry(resource,
output->x,
output->y,
output->pos.c.x,
output->pos.c.y,
head->mm_width,
head->mm_height,
head->subpixel,
@ -6499,8 +6504,8 @@ weston_output_set_position(struct weston_output *output,
wl_resource_for_each(resource, &head->xdg_output_resource_list) {
zxdg_output_v1_send_logical_position(resource,
output->x,
output->y);
output->pos.c.x,
output->pos.c.y);
zxdg_output_v1_send_done(resource);
}
}
@ -6851,7 +6856,7 @@ weston_output_set_transform(struct weston_output *output,
pixman_region32_init(&old_region);
pixman_region32_copy(&old_region, &output->region);
weston_output_init_geometry(output, output->x, output->y);
weston_output_init_geometry(output, output->pos);
weston_output_update_matrix(output);
@ -6859,8 +6864,8 @@ weston_output_set_transform(struct weston_output *output,
wl_list_for_each(head, &output->head_list, output_link) {
wl_resource_for_each(resource, &head->resource_list) {
wl_output_send_geometry(resource,
output->x,
output->y,
output->pos.c.x,
output->pos.c.y,
head->mm_width,
head->mm_height,
head->subpixel,
@ -6874,8 +6879,8 @@ weston_output_set_transform(struct weston_output *output,
}
wl_resource_for_each(resource, &head->xdg_output_resource_list) {
zxdg_output_v1_send_logical_position(resource,
output->x,
output->y);
output->pos.c.x,
output->pos.c.y);
zxdg_output_v1_send_logical_size(resource,
output->width,
output->height);
@ -6884,8 +6889,8 @@ weston_output_set_transform(struct weston_output *output,
}
/* we must ensure that pointers are inside output, otherwise they disappear */
mid_x = output->x + output->width / 2;
mid_y = output->y + output->height / 2;
mid_x = output->pos.c.x + output->width / 2;
mid_y = output->pos.c.y + output->height / 2;
ev.mask = WESTON_POINTER_MOTION_ABS;
ev.abs.c = weston_coord(mid_x, mid_y);
@ -7072,6 +7077,7 @@ weston_output_init(struct weston_output *output,
struct weston_compositor *compositor,
const char *name)
{
output->pos.c = weston_coord(0, 0);
output->compositor = compositor;
output->destroying = 0;
output->name = strdup(name);
@ -7261,7 +7267,7 @@ weston_output_enable(struct weston_output *output)
weston_output_transform_scale_init(output, output->transform, output->scale);
weston_output_init_geometry(output, output->x, output->y);
weston_output_init_geometry(output, output->pos);
/* At this point we have a valid region so we can check placement. */
if (!weston_output_placement_ok(output))
@ -7717,7 +7723,9 @@ xdg_output_manager_get_xdg_output(struct wl_client *client,
wl_resource_set_implementation(resource, &xdg_output_interface,
NULL, xdg_output_unlist);
zxdg_output_v1_send_logical_position(resource, output->x, output->y);
zxdg_output_v1_send_logical_position(resource,
output->pos.c.x,
output->pos.c.y);
zxdg_output_v1_send_logical_size(resource,
output->width,
output->height);
@ -8340,14 +8348,16 @@ weston_compositor_print_scene_graph(struct weston_compositor *ec)
wl_list_for_each(output, &ec->output_list, link) {
struct weston_head *head;
int head_idx = 0;
int x, y;
fprintf(fp, "Output %d (%s):\n", output->id, output->name);
assert(output->enabled);
x = output->pos.c.x;
y = output->pos.c.y;
fprintf(fp, "\tposition: (%d, %d) -> (%d, %d)\n",
output->x, output->y,
output->x + output->width,
output->y + output->height);
x, y, x + output->width, y + output->height);
fprintf(fp, "\tmode: %dx%d@%.3fHz\n",
output->current_mode->width,
output->current_mode->height,

View File

@ -2147,18 +2147,19 @@ weston_pointer_clamp_for_output(struct weston_pointer *pointer,
struct weston_output *output,
struct weston_coord_global pos)
{
double quantum = 1.0 / 1024.0;
struct weston_coord_global out = pos;
int x = pos.c.x;
int y = pos.c.y;
if (x < output->x)
out.c.x = output->x;
else if (x >= output->x + output->width)
out.c.x = output->x + output->width - 1;
if (y < output->y)
out.c.y = output->y;
else if (y >= output->y + output->height)
out.c.y = output->y + output->height - 1;
if (x < output->pos.c.x)
out.c.x = output->pos.c.x;
else if (x >= output->pos.c.x + output->width - quantum)
out.c.x = output->pos.c.x + output->width - quantum;
if (y < output->pos.c.y)
out.c.y = output->pos.c.y;
else if (y >= output->pos.c.y + output->height - quantum)
out.c.y = output->pos.c.y + output->height - quantum;
return out;
}
@ -2173,10 +2174,9 @@ weston_pointer_clamp(struct weston_pointer *pointer, struct weston_coord_global
wl_list_for_each(output, &ec->output_list, link) {
if (pointer->seat->output && pointer->seat->output != output)
continue;
if (weston_output_contains_point(output, pos.c.x, pos.c.y))
if (weston_output_contains_coord(output, pos))
valid = 1;
if (weston_output_contains_point(output, pointer->pos.c.x,
pointer->pos.c.y))
if (weston_output_contains_coord(output, pointer->pos))
prev = output;
}
@ -2237,13 +2237,17 @@ weston_pointer_handle_output_destroy(struct wl_listener *listener, void *data)
y = pointer->pos.c.y;
wl_list_for_each(output, &ec->output_list, link) {
if (weston_output_contains_point(output, x, y))
int ox, oy;
if (weston_output_contains_coord(output, pointer->pos))
return;
ox = output->pos.c.x;
oy = output->pos.c.y;
/* Aproximante the distance from the pointer to the center of
* the output. */
distance = abs(output->x + output->width / 2 - x) +
abs(output->y + output->height / 2 - y);
distance = abs(ox + output->width / 2 - x) +
abs(oy + output->height / 2 - y);
if (distance < min) {
min = distance;
closest = output;

View File

@ -141,7 +141,7 @@ weston_shell_utils_center_on_output(struct weston_view *view,
weston_shell_utils_subsurfaces_boundingbox(view->surface, &surf_x,
&surf_y, &width, &height);
pos.c = weston_coord(output->x, output->y);
pos = output->pos;
pos.c.x += (output->width - width) / 2 - surf_x / 2;
pos.c.y += (output->height - height) / 2 - surf_y / 2;

View File

@ -181,7 +181,6 @@ map_calibrator(struct weston_touch_calibrator *calibrator)
{
struct weston_compositor *c = calibrator->compositor;
struct weston_touch_device *device = calibrator->device;
struct weston_coord_global pos;
static const struct weston_touch_device_matrix identity = {
.m = { 1, 0, 0, 0, 1, 0}
};
@ -200,8 +199,7 @@ map_calibrator(struct weston_touch_calibrator *calibrator)
weston_layer_entry_insert(&c->calibrator_layer.view_list,
&calibrator->view->layer_link);
pos.c = weston_coord(calibrator->output->x, calibrator->output->y);
weston_view_set_position(calibrator->view, pos);
weston_view_set_position(calibrator->view, calibrator->output->pos);
calibrator->view->output = calibrator->surface->output;
calibrator->view->is_mapped = true;

View File

@ -365,8 +365,7 @@ simple_weston_output_prepare(struct weston_output *output,
int x, int y, int width, int height,
int scale, uint32_t transform)
{
output->x = x;
output->y = y;
output->pos.c = weston_coord(x, y);
output->width = width;
output->height = height;
output->current_scale = scale;
@ -383,36 +382,36 @@ simple_transform_vector(struct weston_output *output, struct weston_vector in)
switch (output->transform) {
case WL_OUTPUT_TRANSFORM_NORMAL:
out.f[0] = (-output->x + in.f[0]) * scale;
out.f[1] = (-output->y + in.f[1]) * scale;
out.f[0] = (-output->pos.c.x + in.f[0]) * scale;
out.f[1] = (-output->pos.c.y + in.f[1]) * scale;
break;
case WL_OUTPUT_TRANSFORM_FLIPPED:
out.f[0] = (output->x + output->width - in.f[0]) * scale;
out.f[1] = (-output->y + in.f[1]) * scale;
out.f[0] = (output->pos.c.x + output->width - in.f[0]) * scale;
out.f[1] = (-output->pos.c.y + in.f[1]) * scale;
break;
case WL_OUTPUT_TRANSFORM_90:
out.f[0] = (-output->y + in.f[1]) * scale;
out.f[1] = (output->x + output->width - in.f[0]) * scale;
out.f[0] = (-output->pos.c.y + in.f[1]) * scale;
out.f[1] = (output->pos.c.x + output->width - in.f[0]) * scale;
break;
case WL_OUTPUT_TRANSFORM_FLIPPED_90:
out.f[0] = (-output->y + in.f[1]) * scale;
out.f[1] = (-output->x + in.f[0]) * scale;
out.f[0] = (-output->pos.c.y + in.f[1]) * scale;
out.f[1] = (-output->pos.c.x + in.f[0]) * scale;
break;
case WL_OUTPUT_TRANSFORM_180:
out.f[0] = (output->x + output->width - in.f[0]) * scale;
out.f[1] = (output->y + output->height - in.f[1]) * scale;
out.f[0] = (output->pos.c.x + output->width - in.f[0]) * scale;
out.f[1] = (output->pos.c.y + output->height - in.f[1]) * scale;
break;
case WL_OUTPUT_TRANSFORM_FLIPPED_180:
out.f[0] = (-output->x + in.f[0]) * scale;
out.f[1] = (output->y + output->height - in.f[1]) * scale;
out.f[0] = (-output->pos.c.x + in.f[0]) * scale;
out.f[1] = (output->pos.c.y + output->height - in.f[1]) * scale;
break;
case WL_OUTPUT_TRANSFORM_270:
out.f[0] = (output->y + output->height - in.f[1]) * scale;
out.f[1] = (-output->x + in.f[0]) * scale;
out.f[0] = (output->pos.c.y + output->height - in.f[1]) * scale;
out.f[1] = (-output->pos.c.x + in.f[0]) * scale;
break;
case WL_OUTPUT_TRANSFORM_FLIPPED_270:
out.f[0] = (output->y + output->height - in.f[1]) * scale;
out.f[1] = (output->x + output->width - in.f[0]) * scale;
out.f[0] = (output->pos.c.y + output->height - in.f[1]) * scale;
out.f[1] = (output->pos.c.x + output->width - in.f[0]) * scale;
break;
}
out.f[2] = 0;

View File

@ -3148,8 +3148,8 @@ legacy_fullscreen(struct weston_wm *wm,
/* Heuristics for detecting legacy fullscreen windows... */
wl_list_for_each(output, &compositor->output_list, link) {
if (output->x == window->x &&
output->y == window->y &&
if ((int)output->pos.c.x == window->x &&
(int)output->pos.c.y == window->y &&
output->width == window->width &&
output->height == window->height &&
window->override_redirect) {
@ -3171,8 +3171,8 @@ legacy_fullscreen(struct weston_wm *wm,
if (matching_size && !window->decorate &&
(window->size_hints.flags & (USPosition | PPosition)) &&
window->size_hints.x == output->x &&
window->size_hints.y == output->y) {
window->size_hints.x == (int)output->pos.c.x &&
window->size_hints.y == (int)output->pos.c.y) {
*output_ret = output;
return 1;
}