commit cf1e3be22813d343ec177d48a926d7d9104230dd
parent 63420a2caa728dd52121fc4b9a3d6d7a4f2c3444
Author: Kenny Levinsen <kl@kl.wtf>
Date: Mon, 8 Feb 2021 00:51:10 +0100
view: Save surface x and y on saved buffers
We need to use surface_x and surface_y when rendering and damaging saved
buffers as these compensate for views that have been centered due to
being smaller than their container.
Add them to the surface positions on the saved buffer so we have the
values from the time the buffer was saved.
Diffstat:
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/sway/desktop/render.c b/sway/desktop/render.c
@@ -289,10 +289,8 @@ static void render_saved_view(struct sway_view *view,
}
struct wlr_box box = {
- .x = view->container->surface_x - output->lx -
- view->saved_geometry.x + saved_buf->x,
- .y = view->container->surface_y - output->ly -
- view->saved_geometry.y + saved_buf->y,
+ .x = saved_buf->x - view->saved_geometry.x - output->lx,
+ .y = saved_buf->y - view->saved_geometry.y - output->ly,
.width = saved_buf->width,
.height = saved_buf->height,
};
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c
@@ -214,8 +214,8 @@ static void apply_container_state(struct sway_container *container,
struct sway_saved_buffer *saved_buf;
wl_list_for_each(saved_buf, &view->saved_buffers, link) {
struct wlr_box box = {
- .x = container->current.content_x - view->saved_geometry.x + saved_buf->x,
- .y = container->current.content_y - view->saved_geometry.y + saved_buf->y,
+ .x = saved_buf->x - view->saved_geometry.x,
+ .y = saved_buf->y - view->saved_geometry.y,
.width = saved_buf->width,
.height = saved_buf->height,
};
diff --git a/sway/tree/view.c b/sway/tree/view.c
@@ -1350,8 +1350,8 @@ static void view_save_buffer_iterator(struct wlr_surface *surface,
saved_buffer->buffer = surface->buffer;
saved_buffer->width = surface->current.width;
saved_buffer->height = surface->current.height;
- saved_buffer->x = sx;
- saved_buffer->y = sy;
+ saved_buffer->x = view->container->surface_x + sx;
+ saved_buffer->y = view->container->surface_y + sy;
saved_buffer->transform = surface->current.transform;
wlr_surface_get_buffer_source_box(surface, &saved_buffer->source_box);
wl_list_insert(&view->saved_buffers, &saved_buffer->link);