Group common functions found in both kiosk-shell and deskop-shell to a shared utils file. Signed-off-by: Marius Vlad <marius.vlad@collabora.com>dev
parent
d6ccc8b025
commit
d98c7e86fb
@ -0,0 +1,122 @@ |
||||
/*
|
||||
* Copyright 2010-2012 Intel Corporation |
||||
* Copyright 2013 Raspberry Pi Foundation |
||||
* Copyright 2011-2012,2021 Collabora, Ltd. |
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a |
||||
* copy of this software and associated documentation files (the "Software"), |
||||
* to deal in the Software without restriction, including without limitation |
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
* and/or sell copies of the Software, and to permit persons to whom the |
||||
* Software is furnished to do so, subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice (including the next |
||||
* paragraph) shall be included in all copies or substantial portions of the |
||||
* Software. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
* DEALINGS IN THE SOFTWARE. |
||||
* |
||||
*/ |
||||
|
||||
#include "config.h" |
||||
#include "shared/shell-utils.h" |
||||
|
||||
struct weston_output * |
||||
get_default_output(struct weston_compositor *compositor) |
||||
{ |
||||
if (wl_list_empty(&compositor->output_list)) |
||||
return NULL; |
||||
|
||||
return container_of(compositor->output_list.next, |
||||
struct weston_output, link); |
||||
} |
||||
|
||||
struct weston_output * |
||||
get_focused_output(struct weston_compositor *compositor) |
||||
{ |
||||
struct weston_seat *seat; |
||||
struct weston_output *output = NULL; |
||||
|
||||
wl_list_for_each(seat, &compositor->seat_list, link) { |
||||
struct weston_touch *touch = weston_seat_get_touch(seat); |
||||
struct weston_pointer *pointer = weston_seat_get_pointer(seat); |
||||
struct weston_keyboard *keyboard = |
||||
weston_seat_get_keyboard(seat); |
||||
|
||||
/* Priority has touch focus, then pointer and
|
||||
* then keyboard focus. We should probably have |
||||
* three for loops and check first for touch, |
||||
* then for pointer, etc. but unless somebody has some |
||||
* objections, I think this is sufficient. */ |
||||
if (touch && touch->focus) |
||||
output = touch->focus->output; |
||||
else if (pointer && pointer->focus) |
||||
output = pointer->focus->output; |
||||
else if (keyboard && keyboard->focus) |
||||
output = keyboard->focus->output; |
||||
|
||||
if (output) |
||||
break; |
||||
} |
||||
|
||||
return output; |
||||
} |
||||
|
||||
/* TODO: Fix this function to take into account nested subsurfaces. */ |
||||
void |
||||
surface_subsurfaces_boundingbox(struct weston_surface *surface, int32_t *x, |
||||
int32_t *y, int32_t *w, int32_t *h) |
||||
{ |
||||
pixman_region32_t region; |
||||
pixman_box32_t *box; |
||||
struct weston_subsurface *subsurface; |
||||
|
||||
pixman_region32_init_rect(®ion, 0, 0, |
||||
surface->width, |
||||
surface->height); |
||||
|
||||
wl_list_for_each(subsurface, &surface->subsurface_list, parent_link) { |
||||
pixman_region32_union_rect(®ion, ®ion, |
||||
subsurface->position.x, |
||||
subsurface->position.y, |
||||
subsurface->surface->width, |
||||
subsurface->surface->height); |
||||
} |
||||
|
||||
box = pixman_region32_extents(®ion); |
||||
if (x) |
||||
*x = box->x1; |
||||
if (y) |
||||
*y = box->y1; |
||||
if (w) |
||||
*w = box->x2 - box->x1; |
||||
if (h) |
||||
*h = box->y2 - box->y1; |
||||
|
||||
pixman_region32_fini(®ion); |
||||
} |
||||
|
||||
void |
||||
center_on_output(struct weston_view *view, struct weston_output *output) |
||||
{ |
||||
int32_t surf_x, surf_y, width, height; |
||||
float x, y; |
||||
|
||||
if (!output) { |
||||
weston_view_set_position(view, 0, 0); |
||||
return; |
||||
} |
||||
|
||||
surface_subsurfaces_boundingbox(view->surface, &surf_x, &surf_y, &width, &height); |
||||
|
||||
x = output->x + (output->width - width) / 2 - surf_x / 2; |
||||
y = output->y + (output->height - height) / 2 - surf_y / 2; |
||||
|
||||
weston_view_set_position(view, x, y); |
||||
} |
@ -0,0 +1,40 @@ |
||||
/*
|
||||
* Copyright 2021 Collabora, Ltd. |
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a |
||||
* copy of this software and associated documentation files (the "Software"), |
||||
* to deal in the Software without restriction, including without limitation |
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
* and/or sell copies of the Software, and to permit persons to whom the |
||||
* Software is furnished to do so, subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice (including the next |
||||
* paragraph) shall be included in all copies or substantial portions of the |
||||
* Software. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
* DEALINGS IN THE SOFTWARE. |
||||
* |
||||
*/ |
||||
|
||||
#include "config.h" |
||||
#include "shared/helpers.h" |
||||
#include <libweston/libweston.h> |
||||
|
||||
struct weston_output * |
||||
get_default_output(struct weston_compositor *compositor); |
||||
|
||||
struct weston_output * |
||||
get_focused_output(struct weston_compositor *compositor); |
||||
|
||||
void |
||||
center_on_output(struct weston_view *view, struct weston_output *output); |
||||
|
||||
void |
||||
surface_subsurfaces_boundingbox(struct weston_surface *surface, int32_t *x, |
||||
int32_t *y, int32_t *w, int32_t *h); |
Loading…
Reference in new issue