mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-11 13:29:45 -05:00
scene: add wlr_scene_node_toggle
This allows compositors to easily enable or disable a scene-graph node. This can be used to show/hide a surface when the xdg_surface is mapped/unmapped.
This commit is contained in:
parent
f686fbd0c6
commit
7e9ad9a67b
2 changed files with 17 additions and 0 deletions
|
|
@ -32,6 +32,7 @@ struct wlr_scene_node_state {
|
||||||
|
|
||||||
struct wl_list children; // wlr_scene_node_state.link
|
struct wl_list children; // wlr_scene_node_state.link
|
||||||
|
|
||||||
|
bool enabled;
|
||||||
int x, y;
|
int x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -66,6 +67,12 @@ void wlr_scene_node_destroy(struct wlr_scene_node *node);
|
||||||
* Atomically apply pending changes for this node and all of its children.
|
* Atomically apply pending changes for this node and all of its children.
|
||||||
*/
|
*/
|
||||||
void wlr_scene_node_commit(struct wlr_scene_node *node);
|
void wlr_scene_node_commit(struct wlr_scene_node *node);
|
||||||
|
/**
|
||||||
|
* Enable or disable this node. If a node is disabled, all of its children are
|
||||||
|
* implicitly disabled as well. This state is double-buffered, see
|
||||||
|
* wlr_scene_node_commit.
|
||||||
|
*/
|
||||||
|
void wlr_scene_node_toggle(struct wlr_scene_node *node, bool enabled);
|
||||||
/**
|
/**
|
||||||
* Set the position of the node relative to its parent. This state is
|
* Set the position of the node relative to its parent. This state is
|
||||||
* double-buffered, see wlr_scene_node_commit.
|
* double-buffered, see wlr_scene_node_commit.
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ static struct wlr_scene_surface *scene_node_get_surface(
|
||||||
static void scene_node_state_init(struct wlr_scene_node_state *state) {
|
static void scene_node_state_init(struct wlr_scene_node_state *state) {
|
||||||
wl_list_init(&state->children);
|
wl_list_init(&state->children);
|
||||||
wl_list_init(&state->link);
|
wl_list_init(&state->link);
|
||||||
|
state->enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scene_node_state_finish(struct wlr_scene_node_state *state) {
|
static void scene_node_state_finish(struct wlr_scene_node_state *state) {
|
||||||
|
|
@ -118,6 +119,7 @@ struct wlr_scene_surface *wlr_scene_surface_create(struct wlr_scene_node *parent
|
||||||
|
|
||||||
static void scene_node_state_move(struct wlr_scene_node_state *dst,
|
static void scene_node_state_move(struct wlr_scene_node_state *dst,
|
||||||
const struct wlr_scene_node_state *src) {
|
const struct wlr_scene_node_state *src) {
|
||||||
|
dst->enabled = src->enabled;
|
||||||
dst->x = src->x;
|
dst->x = src->x;
|
||||||
dst->y = src->y;
|
dst->y = src->y;
|
||||||
}
|
}
|
||||||
|
|
@ -136,6 +138,10 @@ void wlr_scene_node_commit(struct wlr_scene_node *node) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlr_scene_node_toggle(struct wlr_scene_node *node, bool enabled) {
|
||||||
|
node->pending.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
void wlr_scene_node_move(struct wlr_scene_node *node, int x, int y) {
|
void wlr_scene_node_move(struct wlr_scene_node *node, int x, int y) {
|
||||||
node->pending.x = x;
|
node->pending.x = x;
|
||||||
node->pending.y = y;
|
node->pending.y = y;
|
||||||
|
|
@ -172,6 +178,10 @@ static void surface_iterator(struct wlr_surface *surface,
|
||||||
static void scene_node_for_each_surface(struct wlr_scene_node *node,
|
static void scene_node_for_each_surface(struct wlr_scene_node *node,
|
||||||
int lx, int ly, wlr_surface_iterator_func_t user_iterator,
|
int lx, int ly, wlr_surface_iterator_func_t user_iterator,
|
||||||
void *user_data) {
|
void *user_data) {
|
||||||
|
if (!node->current.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
lx += node->current.x;
|
lx += node->current.x;
|
||||||
ly += node->current.y;
|
ly += node->current.y;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue