From 2be09373b41181200efac32685fb715e41d80abe Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Mon, 8 Mar 2021 22:45:52 +0200 Subject: [PATCH] desktop-shell, kiosk-shell: Migrate helpers to create a view to shell-utils Incidentally fixes #553 Signed-off-by: Marius Vlad --- desktop-shell/shell.c | 50 ++++++---------------------- kiosk-shell/kiosk-shell.c | 25 +++++++------- kiosk-shell/meson.build | 1 - kiosk-shell/util.c | 70 --------------------------------------- kiosk-shell/util.h | 36 -------------------- shared/shell-utils.c | 53 +++++++++++++++++++++++++++++ shared/shell-utils.h | 18 ++++++++++ 7 files changed, 94 insertions(+), 159 deletions(-) delete mode 100644 kiosk-shell/util.c delete mode 100644 kiosk-shell/util.h diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 90caf0fd..34a9ae4e 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -220,22 +220,6 @@ get_output_panel_size(struct desktop_shell *shell, static void shell_surface_update_child_surface_layers(struct shell_surface *shsurf); -static int -shell_surface_get_label(struct weston_surface *surface, char *buf, size_t len) -{ - const char *t, *c; - struct weston_desktop_surface *desktop_surface = - weston_surface_get_desktop_surface(surface); - - t = weston_desktop_surface_get_title(desktop_surface); - c = weston_desktop_surface_get_app_id(desktop_surface); - - return snprintf(buf, len, "%s window%s%s%s%s%s", - "top-level", - t ? " '" : "", t ?: "", t ? "'" : "", - c ? " of " : "", c ?: ""); -} - static void destroy_shell_grab_shsurf(struct wl_listener *listener, void *data) { @@ -2060,32 +2044,18 @@ create_black_surface(struct weston_compositor *ec, struct weston_view *fs_view, float x, float y, int w, int h) { - struct weston_surface *surface = NULL; - struct weston_view *view; + struct weston_solid_color_surface surface_data = {}; - surface = weston_surface_create(ec); - if (surface == NULL) { - weston_log("no memory\n"); - return NULL; - } - view = weston_view_create(surface); - if (surface == NULL) { - weston_log("no memory\n"); - weston_surface_destroy(surface); - return NULL; - } + surface_data.surface_committed = black_surface_committed; + surface_data.get_label = black_surface_get_label; + surface_data.surface_private = fs_view; - surface->committed = black_surface_committed; - surface->committed_private = fs_view; - weston_surface_set_label_func(surface, black_surface_get_label); - weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1); - pixman_region32_fini(&surface->opaque); - pixman_region32_init_rect(&surface->opaque, 0, 0, w, h); - pixman_region32_fini(&surface->input); - pixman_region32_init_rect(&surface->input, 0, 0, w, h); + surface_data.r = 0; + surface_data.g = 0; + surface_data.b = 0; - weston_surface_set_size(surface, w, h); - weston_view_set_position(view, x, y); + struct weston_view *view = + create_solid_color_surface(ec, &surface_data, x, y, w, h); return view; } @@ -2310,7 +2280,7 @@ desktop_surface_added(struct weston_desktop_surface *desktop_surface, return; } - weston_surface_set_label_func(surface, shell_surface_get_label); + weston_surface_set_label_func(surface, surface_get_label); shsurf->shell = (struct desktop_shell *) shell; shsurf->unresponsive = 0; diff --git a/kiosk-shell/kiosk-shell.c b/kiosk-shell/kiosk-shell.c index 0648ed58..5aea5bf0 100644 --- a/kiosk-shell/kiosk-shell.c +++ b/kiosk-shell/kiosk-shell.c @@ -34,7 +34,6 @@ #include "compositor/weston.h" #include "shared/helpers.h" #include "shared/shell-utils.h" -#include "util.h" #include @@ -461,7 +460,7 @@ kiosk_shell_output_recreate_background(struct kiosk_shell_output *shoutput) struct weston_output *output = shoutput->output; struct weston_config_section *shell_section = NULL; uint32_t bg_color = 0x0; - float r, g, b; + struct weston_solid_color_surface solid_surface = {}; if (shoutput->background_view) weston_surface_destroy(shoutput->background_view->surface); @@ -475,21 +474,23 @@ kiosk_shell_output_recreate_background(struct kiosk_shell_output *shoutput) weston_config_section_get_color(shell_section, "background-color", &bg_color, 0x00000000); - r = ((bg_color >> 16) & 0xff) / 255.0; - g = ((bg_color >> 8) & 0xff) / 255.0; - b = ((bg_color >> 0) & 0xff) / 255.0; + solid_surface.r = ((bg_color >> 16) & 0xff) / 255.0; + solid_surface.g = ((bg_color >> 8) & 0xff) / 255.0; + solid_surface.b = ((bg_color >> 0) & 0xff) / 255.0; + + solid_surface.get_label = kiosk_shell_background_surface_get_label; + solid_surface.surface_committed = NULL; + solid_surface.surface_private = NULL; shoutput->background_view = - create_colored_surface(shoutput->shell->compositor, - r, g, b, - output->x, output->y, - output->width, - output->height); + create_solid_color_surface(shoutput->shell->compositor, + &solid_surface, + output->x, output->y, + output->width, + output->height); weston_surface_set_role(shoutput->background_view->surface, "kiosk-shell-background", NULL, 0); - weston_surface_set_label_func(shoutput->background_view->surface, - kiosk_shell_background_surface_get_label); weston_layer_entry_insert(&shell->background_layer.view_list, &shoutput->background_view->layer_link); diff --git a/kiosk-shell/meson.build b/kiosk-shell/meson.build index f9468687..c3a37da2 100644 --- a/kiosk-shell/meson.build +++ b/kiosk-shell/meson.build @@ -2,7 +2,6 @@ if get_option('shell-kiosk') srcs_shell_kiosk = [ 'kiosk-shell.c', 'kiosk-shell-grab.c', - 'util.c', '../shared/shell-utils.c', weston_desktop_shell_server_protocol_h, weston_desktop_shell_protocol_c, diff --git a/kiosk-shell/util.c b/kiosk-shell/util.c deleted file mode 100644 index b411b504..00000000 --- a/kiosk-shell/util.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2010-2012 Intel Corporation - * Copyright 2013 Raspberry Pi Foundation - * Copyright 2011-2012,2020 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. - */ - -/* Helper functions for kiosk-shell */ - -#include "util.h" -#include "shared/helpers.h" -#include - -static void -colored_surface_committed(struct weston_surface *es, int32_t sx, int32_t sy) -{ -} - -struct weston_view * -create_colored_surface(struct weston_compositor *compositor, - float r, float g, float b, - float x, float y, int w, int h) -{ - struct weston_surface *surface = NULL; - struct weston_view *view; - - surface = weston_surface_create(compositor); - if (surface == NULL) { - weston_log("no memory\n"); - return NULL; - } - view = weston_view_create(surface); - if (surface == NULL) { - weston_log("no memory\n"); - weston_surface_destroy(surface); - return NULL; - } - - surface->committed = colored_surface_committed; - surface->committed_private = NULL; - - weston_surface_set_color(surface, r, g, b, 1.0); - pixman_region32_fini(&surface->opaque); - pixman_region32_init_rect(&surface->opaque, 0, 0, w, h); - pixman_region32_fini(&surface->input); - pixman_region32_init_rect(&surface->input, 0, 0, w, h); - - weston_surface_set_size(surface, w, h); - weston_view_set_position(view, x, y); - - return view; -} diff --git a/kiosk-shell/util.h b/kiosk-shell/util.h deleted file mode 100644 index a6647be6..00000000 --- a/kiosk-shell/util.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2010-2012 Intel Corporation - * Copyright 2013 Raspberry Pi Foundation - * Copyright 2011-2012,2020 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. - */ - -/* Helper functions adapted from desktop-shell */ - -#include - -struct weston_compositor; -struct weston_surface; - -struct weston_view * -create_colored_surface(struct weston_compositor *compositor, - float r, float g, float b, - float x, float y, int w, int h); diff --git a/shared/shell-utils.c b/shared/shell-utils.c index 7f9ec042..a301eefc 100644 --- a/shared/shell-utils.c +++ b/shared/shell-utils.c @@ -26,6 +26,7 @@ #include "config.h" #include "shared/shell-utils.h" +#include struct weston_output * get_default_output(struct weston_compositor *compositor) @@ -120,3 +121,55 @@ center_on_output(struct weston_view *view, struct weston_output *output) weston_view_set_position(view, x, y); } + +int +surface_get_label(struct weston_surface *surface, char *buf, size_t len) +{ + const char *t, *c; + struct weston_desktop_surface *desktop_surface = + weston_surface_get_desktop_surface(surface); + + t = weston_desktop_surface_get_title(desktop_surface); + c = weston_desktop_surface_get_app_id(desktop_surface); + + return snprintf(buf, len, "%s window%s%s%s%s%s", + "top-level", + t ? " '" : "", t ?: "", t ? "'" : "", + c ? " of " : "", c ?: ""); +} + +struct weston_view * +create_solid_color_surface(struct weston_compositor *compositor, + struct weston_solid_color_surface *ss, + float x, float y, int w, int h) +{ + struct weston_surface *surface = NULL; + struct weston_view *view; + + surface = weston_surface_create(compositor); + if (surface == NULL) { + weston_log("no memory\n"); + return NULL; + } + view = weston_view_create(surface); + if (view == NULL) { + weston_log("no memory\n"); + weston_surface_destroy(surface); + return NULL; + } + + surface->committed = ss->surface_committed; + surface->committed_private = ss->surface_private; + + weston_surface_set_color(surface, ss->r, ss->g, ss->b, 1.0); + weston_surface_set_label_func(surface, ss->get_label); + pixman_region32_fini(&surface->opaque); + pixman_region32_init_rect(&surface->opaque, 0, 0, w, h); + pixman_region32_fini(&surface->input); + pixman_region32_init_rect(&surface->input, 0, 0, w, h); + + weston_surface_set_size(surface, w, h); + weston_view_set_position(view, x, y); + + return view; +} diff --git a/shared/shell-utils.h b/shared/shell-utils.h index c1732ef5..b25de1a0 100644 --- a/shared/shell-utils.h +++ b/shared/shell-utils.h @@ -26,6 +26,14 @@ #include "shared/helpers.h" #include +/* parameter for create_solid_color_surface() */ +struct weston_solid_color_surface { + int (*get_label)(struct weston_surface *es, char *buf, size_t len); + void (*surface_committed)(struct weston_surface *es, int32_t sx, int32_t sy); + void *surface_private; + float r, g, b; +}; + struct weston_output * get_default_output(struct weston_compositor *compositor); @@ -38,3 +46,13 @@ 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); + +int +surface_get_label(struct weston_surface *surface, char *buf, size_t len); + +/* helper to create a view w/ a color + */ +struct weston_view * +create_solid_color_surface(struct weston_compositor *compositor, + struct weston_solid_color_surface *ss, + float x, float y, int w, int h);