mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-09-30 06:41:56 +00:00
libweston: Use weston_coord in struct weston_output
Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
This commit is contained in:
parent
244dc963b9
commit
e8208d21d7
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue