mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2025-11-08 13:29:56 -05:00
feat: blur layer shell surface
This commit is contained in:
parent
be7d81d337
commit
eabb18b369
1 changed files with 29 additions and 0 deletions
29
src/maomao.c
29
src/maomao.c
|
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* See LICENSE file for copyright and license details.
|
* See LICENSE file for copyright and license details.
|
||||||
*/
|
*/
|
||||||
|
#include "wlr-layer-shell-unstable-v1-protocol.h"
|
||||||
#include "wlr/util/box.h"
|
#include "wlr/util/box.h"
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <libinput.h>
|
#include <libinput.h>
|
||||||
|
|
@ -3102,6 +3103,25 @@ void closemon(Monitor *m) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void iter_layer_scene_buffers(struct wlr_scene_buffer *buffer, int sx,
|
||||||
|
int sy, void *user_data) {
|
||||||
|
LayerSurface *l = user_data;
|
||||||
|
|
||||||
|
struct wlr_scene_surface *scene_surface =
|
||||||
|
wlr_scene_surface_try_from_buffer(buffer);
|
||||||
|
if (!scene_surface) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blur && l) {
|
||||||
|
wlr_scene_buffer_set_backdrop_blur(buffer, true);
|
||||||
|
wlr_scene_buffer_set_backdrop_blur_optimized(buffer, true);
|
||||||
|
wlr_scene_buffer_set_backdrop_blur_ignore_transparent(buffer, true);
|
||||||
|
} else {
|
||||||
|
wlr_scene_buffer_set_backdrop_blur(buffer, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void commitlayersurfacenotify(struct wl_listener *listener, void *data) {
|
void commitlayersurfacenotify(struct wl_listener *listener, void *data) {
|
||||||
LayerSurface *l = wl_container_of(listener, l, surface_commit);
|
LayerSurface *l = wl_container_of(listener, l, surface_commit);
|
||||||
struct wlr_layer_surface_v1 *layer_surface = l->layer_surface;
|
struct wlr_layer_surface_v1 *layer_surface = l->layer_surface;
|
||||||
|
|
@ -3147,6 +3167,15 @@ void commitlayersurfacenotify(struct wl_listener *listener, void *data) {
|
||||||
if (blur) {
|
if (blur) {
|
||||||
// Rerender the optimized blur on change
|
// Rerender the optimized blur on change
|
||||||
struct wlr_layer_surface_v1 *wlr_layer_surface = l->layer_surface;
|
struct wlr_layer_surface_v1 *wlr_layer_surface = l->layer_surface;
|
||||||
|
|
||||||
|
if (wlr_layer_surface->current.layer !=
|
||||||
|
ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM &&
|
||||||
|
wlr_layer_surface->current.layer !=
|
||||||
|
ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND) {
|
||||||
|
wlr_scene_node_for_each_buffer(&l->scene->node,
|
||||||
|
iter_layer_scene_buffers, l);
|
||||||
|
}
|
||||||
|
|
||||||
if (wlr_layer_surface->current.layer ==
|
if (wlr_layer_surface->current.layer ==
|
||||||
ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND ||
|
ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND ||
|
||||||
wlr_layer_surface->current.layer ==
|
wlr_layer_surface->current.layer ==
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue