Skip to content

Commit

Permalink
view: adjust position according to declared top left corner
Browse files Browse the repository at this point in the history
  • Loading branch information
joggee-fr committed Feb 13, 2024
1 parent 9563f7a commit f493e72
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 18 deletions.
10 changes: 7 additions & 3 deletions view.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,15 @@ view_position(struct cg_view *view)
struct wlr_box layout_box;
wlr_output_layout_get_box(view->server->output_layout, NULL, &layout_box);

view->impl->get_geometry(view, &view->width, &view->height);
struct wlr_box view_box;
view->impl->get_geometry(view, &view_box);

// If view dimensions are not the same as output layout ones, it will be centered first
view->lx = layout_box.x + (layout_box.width - view->width) / 2;
view->ly = layout_box.y + (layout_box.height - view->height) / 2;
// Do not forget to adjust position according to top left corner declared in view geometry
view->lx = layout_box.x + (layout_box.width - view_box.width) / 2 - view_box.x;
view->ly = layout_box.y + (layout_box.height - view_box.height) / 2 - view_box.y;
view->width = view_box.width;
view->height = view_box.height;

wlr_scene_node_set_position(&view->scene_tree->node, view->lx, view->ly);

Expand Down
2 changes: 1 addition & 1 deletion view.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ struct cg_view {

struct cg_view_impl {
char *(*get_title)(struct cg_view *view);
void (*get_geometry)(struct cg_view *view, int *width_out, int *height_out);
void (*get_geometry)(struct cg_view *view, struct wlr_box *view_box);
bool (*is_primary)(struct cg_view *view);
bool (*is_transient_for)(struct cg_view *child, struct cg_view *parent);
void (*activate)(struct cg_view *view, bool activate);
Expand Down
14 changes: 5 additions & 9 deletions xdg_shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,10 @@ get_title(struct cg_view *view)
}

static void
get_geometry(struct cg_view *view, int *width_out, int *height_out)
get_geometry(struct cg_view *view, struct wlr_box *view_box)
{
struct cg_xdg_shell_view *xdg_shell_view = xdg_shell_view_from_view(view);
struct wlr_box geom;

wlr_xdg_surface_get_geometry(xdg_shell_view->xdg_toplevel->base, &geom);
*width_out = geom.width;
*height_out = geom.height;
wlr_xdg_surface_get_geometry(xdg_shell_view->xdg_toplevel->base, view_box);
}

static bool
Expand Down Expand Up @@ -195,9 +191,9 @@ handle_xdg_shell_surface_commit(struct wl_listener *listener, void *data)
struct cg_view *view = &xdg_shell_view->view;

// Check if view dimensions have changed
int width, height;
get_geometry(view, &width, &height);
if (width != view->width || height != view->height) {
struct wlr_box view_box;
get_geometry(view, &view_box);
if (view_box.width != view->width || view_box.height != view->height) {
view_position(view);
}
}
Expand Down
14 changes: 9 additions & 5 deletions xwayland.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,22 @@ get_title(struct cg_view *view)
}

static void
get_geometry(struct cg_view *view, int *width_out, int *height_out)
get_geometry(struct cg_view *view, struct wlr_box *view_box)
{
struct cg_xwayland_view *xwayland_view = xwayland_view_from_view(view);
struct wlr_xwayland_surface *xsurface = xwayland_view->xwayland_surface;

view_box->x = 0;
view_box->y = 0;

if (xsurface->surface == NULL) {
*width_out = 0;
*height_out = 0;
view_box->width = 0;
view_box->height = 0;
return;
}

*width_out = xsurface->surface->current.width;
*height_out = xsurface->surface->current.height;
view_box->width = xwayland_view->xwayland_surface->surface->current.width;
view_box->height = xwayland_view->xwayland_surface->surface->current.height;
}

static bool
Expand Down

0 comments on commit f493e72

Please sign in to comment.