[PATCH] [RFC] desktop-shell: change the alpha of black view in fullscreen mode
Hyungwon Hwang
hyungwon.hwang7 at gmail.com
Thu Dec 3 05:33:27 PST 2015
This patch changes the alpha value of black view in fullscreen mode,
when the applications opacity changes.
Signed-off-by: Hyungwon Hwang <hyungwon.hwang7 at gmail.com>
---
This patch is incomplete, and just a proof of concept. But I want to
make this patch as the starting point of discussion related the opacity
in fullscreen mode [1]. I tested it with weston-fullscreen.
1. Changing the opacity in normal mode.
2. Changing the opacity in fullscreen mode.
3. Changing the opacity in fullscreen mode, but the content is smaller
then output.
4. After 1 & 2, switch to another application.
5. After 3, switch to another application.
In case of 1 ~ 4, it works fine. But in case of 5, the opacity does
not be kept, and it must be fixed. I think that it is also related another
issue I stated in PS below.
I want to discuss about what stance Weston will be on with this issue
: When opacity changes in fullscreen mode, which surface's opacity should
be affected.
PS. As I made this patch, I found that the opacity resets when the user switch
to another application irrespective of fullscreen. It also seemed a little
odd to me.
Best regards,
Hyungwon Hwang
[1]
http://lists.freedesktop.org/archives/wayland-devel/2015-December/025859.html
desktop-shell/shell.c | 36 +++++++++++++++++++++++-------------
1 file changed, 23 insertions(+), 13 deletions(-)
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 780902d..418c66f 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -2767,7 +2767,7 @@ black_surface_configure(struct weston_surface *es, int32_t sx, int32_t sy);
static struct weston_view *
create_black_surface(struct weston_compositor *ec,
struct weston_surface *fs_surface,
- float x, float y, int w, int h)
+ float x, float y, int w, int h, float alpha)
{
struct weston_surface *surface = NULL;
struct weston_view *view;
@@ -2783,11 +2783,12 @@ create_black_surface(struct weston_compositor *ec,
weston_surface_destroy(surface);
return NULL;
}
+ view->alpha = alpha;
surface->configure = black_surface_configure;
surface->configure_private = fs_surface;
weston_surface_set_label_func(surface, black_surface_get_label);
- weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1);
+ weston_surface_set_color(surface, 0.0, 0.0, 0.0, alpha);
pixman_region32_fini(&surface->opaque);
pixman_region32_init_rect(&surface->opaque, 0, 0, w, h);
pixman_region32_fini(&surface->input);
@@ -2812,7 +2813,8 @@ shell_ensure_fullscreen_black_view(struct shell_surface *shsurf)
shsurf->surface,
output->x, output->y,
output->width,
- output->height);
+ output->height,
+ shsurf->view->alpha);
weston_view_geometry_dirty(shsurf->fullscreen.black_view);
weston_layer_entry_remove(&shsurf->fullscreen.black_view->layer_link);
@@ -4717,10 +4719,24 @@ resize_binding(struct weston_pointer *pointer, uint32_t time,
}
static void
+do_adjust_alpha(struct weston_view *view, wl_fixed_t value) {
+ float step = 0.005;
+
+ view->alpha -= wl_fixed_to_double(value) * step;
+
+ if (view->alpha > 1.0)
+ view->alpha = 1.0;
+ if (view->alpha < step)
+ view->alpha = step;
+
+ weston_view_geometry_dirty(view);
+ weston_surface_damage(view->surface);
+}
+
+static void
surface_opacity_binding(struct weston_pointer *pointer, uint32_t time,
uint32_t axis, wl_fixed_t value, void *data)
{
- float step = 0.005;
struct shell_surface *shsurf;
struct weston_surface *focus = pointer->focus->surface;
struct weston_surface *surface;
@@ -4734,15 +4750,9 @@ surface_opacity_binding(struct weston_pointer *pointer, uint32_t time,
if (!shsurf)
return;
- shsurf->view->alpha -= wl_fixed_to_double(value) * step;
-
- if (shsurf->view->alpha > 1.0)
- shsurf->view->alpha = 1.0;
- if (shsurf->view->alpha < step)
- shsurf->view->alpha = step;
-
- weston_view_geometry_dirty(shsurf->view);
- weston_surface_damage(surface);
+ do_adjust_alpha(shsurf->view, value);
+ if (shsurf->fullscreen.black_view)
+ do_adjust_alpha(shsurf->fullscreen.black_view, value);
}
static void
--
1.9.1
More information about the wayland-devel
mailing list