mirror of
https://github.com/cage-kiosk/cage.git
synced 2026-02-16 22:05:58 -05:00
Render popups separately from their toplevel view when possible
This commit is contained in:
parent
2db815aa23
commit
a53dca91ce
7 changed files with 101 additions and 33 deletions
33
render.c
33
render.c
|
|
@ -115,8 +115,32 @@ render_view_toplevels(struct cg_view *view, struct cg_output *output, pixman_reg
|
|||
struct render_data data = {
|
||||
.damage = damage,
|
||||
};
|
||||
double ox = view->lx;
|
||||
double oy = view->ly;
|
||||
wlr_output_layout_output_coords(output->server->output_layout, output->wlr_output, &ox, &oy);
|
||||
output_surface_for_each_surface(output, view->wlr_surface, ox, oy,
|
||||
render_surface_iterator, &data);
|
||||
}
|
||||
|
||||
output_view_for_each_surface(output, view, render_surface_iterator, &data);
|
||||
static void
|
||||
render_popup_iterator(struct cg_output *output, struct wlr_surface *surface,
|
||||
struct wlr_box *box, void *data)
|
||||
{
|
||||
/* Render this popup's surface. */
|
||||
render_surface_iterator(output, surface, box, data);
|
||||
|
||||
/* Render this popup's child toplevels. */
|
||||
output_surface_for_each_surface(output, surface, box->x, box->y,
|
||||
render_surface_iterator, data);
|
||||
}
|
||||
|
||||
static void
|
||||
render_view_popups(struct cg_view *view, struct cg_output *output, pixman_region32_t *damage)
|
||||
{
|
||||
struct render_data data = {
|
||||
.damage = damage,
|
||||
};
|
||||
output_view_for_each_popup(output, view, render_popup_iterator, &data);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -151,8 +175,11 @@ output_render(struct cg_output *output, pixman_region32_t *damage)
|
|||
struct cg_view *view;
|
||||
wl_list_for_each_reverse(view, &server->views, link) {
|
||||
render_view_toplevels(view, output, damage);
|
||||
// TODO: popups on top view, possibly use focused view for this
|
||||
// TODO: render only top view, possibly use focused view for this
|
||||
}
|
||||
|
||||
struct cg_view *focused_view = seat_get_focus(server->seat);
|
||||
if (focused_view) {
|
||||
render_view_popups(focused_view, output, damage);
|
||||
}
|
||||
|
||||
render_drag_icons(output, damage, &server->seat->drag_icons);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue