chore: tidy up scene logic and fix position

This commit is contained in:
ShootingStarDragons 2024-02-20 09:45:59 +08:00
parent d7ee56eee2
commit ed5674ed0c

View file

@ -304,7 +304,8 @@ static void input_popup_update(struct sway_input_popup *popup) {
struct wlr_box parent; struct wlr_box parent;
struct wlr_layer_surface_v1 *layer_surface = struct wlr_layer_surface_v1 *layer_surface =
wlr_layer_surface_v1_try_from_wlr_surface(focused_surface); wlr_layer_surface_v1_try_from_wlr_surface(focused_surface);
struct wlr_scene_tree *relative; struct wlr_scene_tree *relative_parent;
if (layer_surface != NULL) { if (layer_surface != NULL) {
struct sway_layer_surface *layer = struct sway_layer_surface *layer =
layer_surface->data; layer_surface->data;
@ -312,10 +313,7 @@ static void input_popup_update(struct sway_input_popup *popup) {
return; return;
} }
relative = wlr_scene_tree_create(layer->scene->tree); relative_parent = layer->scene->tree;
if (relative == NULL) {
return;
}
struct wlr_output *output = layer->layer_surface->output; struct wlr_output *output = layer->layer_surface->output;
wlr_output_layout_get_box(root->output_layout, output, &output_box); wlr_output_layout_get_box(root->output_layout, output, &output_box);
int lx, ly; int lx, ly;
@ -326,10 +324,7 @@ static void input_popup_update(struct sway_input_popup *popup) {
popup->desc.view = NULL; popup->desc.view = NULL;
} else { } else {
struct sway_view *view = view_from_wlr_surface(focused_surface); struct sway_view *view = view_from_wlr_surface(focused_surface);
relative = wlr_scene_tree_create(view->scene_tree); relative_parent = view->scene_tree;
if (relative == NULL) {
return;
}
int lx, ly; int lx, ly;
wlr_scene_node_coords(&view->scene_tree->node, &lx, &ly); wlr_scene_node_coords(&view->scene_tree->node, &lx, &ly);
struct wlr_output *output = wlr_output_layout_output_at(root->output_layout, struct wlr_output *output = wlr_output_layout_output_at(root->output_layout,
@ -345,6 +340,8 @@ static void input_popup_update(struct sway_input_popup *popup) {
popup->desc.view = view; popup->desc.view = view;
} }
struct wlr_scene_tree *relative = wlr_scene_tree_create(relative_parent);
popup->desc.relative = &relative->node; popup->desc.relative = &relative->node;
if (!scene_descriptor_assign(&popup->scene_tree->node, if (!scene_descriptor_assign(&popup->scene_tree->node,
SWAY_SCENE_DESC_POPUP, &popup->desc)) { SWAY_SCENE_DESC_POPUP, &popup->desc)) {
@ -381,7 +378,7 @@ static void input_popup_update(struct sway_input_popup *popup) {
y = y1 - popup_height; y = y1 - popup_height;
} }
wlr_scene_node_set_position(&relative->node, x, y); wlr_scene_node_set_position(&relative->node, x - parent.x, y - parent.y);
if (cursor_rect) { if (cursor_rect) {
struct wlr_box box = { struct wlr_box box = {
.x = x1 - x, .x = x1 - x,