wayland: have backbuffer be larger then framebuffer instead of other way around
All checks were successful
pyrite-dev/milsko/pipeline/head This commit looks good
All checks were successful
pyrite-dev/milsko/pipeline/head This commit looks good
This commit is contained in:
parent
8ccf819b57
commit
24ae1c4e11
1 changed files with 34 additions and 29 deletions
|
|
@ -1001,8 +1001,8 @@ static void xdg_toplevel_configure(void* data,
|
||||||
region_setup(self);
|
region_setup(self);
|
||||||
|
|
||||||
if(self->wayland.type == MWLL_WAYLAND_TOPLEVEL && !self->wayland.has_decorations) {
|
if(self->wayland.type == MWLL_WAYLAND_TOPLEVEL && !self->wayland.has_decorations) {
|
||||||
MwU32 vwidth = self->wayland.ww - (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT);
|
MwU32 vwidth = self->wayland.ww;
|
||||||
MwU32 vheight = self->wayland.wh - (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM);
|
MwU32 vheight = self->wayland.wh;
|
||||||
if(vwidth < 0) vwidth = 0;
|
if(vwidth < 0) vwidth = 0;
|
||||||
if(vheight < 0) vheight = 0;
|
if(vheight < 0) vheight = 0;
|
||||||
wp_viewport_set_destination(self->wayland.vp, vwidth, vheight);
|
wp_viewport_set_destination(self->wayland.vp, vwidth, vheight);
|
||||||
|
|
@ -1123,9 +1123,15 @@ static void backbuffer_setup(struct _MwLLWayland* wayland) {
|
||||||
if(wayland->type != MWLL_WAYLAND_TOPLEVEL) {
|
if(wayland->type != MWLL_WAYLAND_TOPLEVEL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
buffer_setup(&wayland->backbuffer, wayland->ww, wayland->wh);
|
MwU32 w = wayland->ww;
|
||||||
|
MwU32 h = wayland->wh;
|
||||||
|
if(!wayland->has_decorations) {
|
||||||
|
w += (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT);
|
||||||
|
h += (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM);
|
||||||
|
}
|
||||||
|
buffer_setup(&wayland->backbuffer, w, h);
|
||||||
|
|
||||||
wayland->back_cs = cairo_image_surface_create_for_data(wayland->backbuffer.buf, CAIRO_FORMAT_ARGB32, wayland->ww, wayland->wh, 4 * wayland->ww);
|
wayland->back_cs = cairo_image_surface_create_for_data(wayland->backbuffer.buf, CAIRO_FORMAT_ARGB32, w, h, 4 * w);
|
||||||
wayland->back_cairo = cairo_create(wayland->back_cs);
|
wayland->back_cairo = cairo_create(wayland->back_cs);
|
||||||
|
|
||||||
memset(wayland->backbuffer.buf, 0, wayland->backbuffer.buf_size);
|
memset(wayland->backbuffer.buf, 0, wayland->backbuffer.buf_size);
|
||||||
|
|
@ -1301,13 +1307,17 @@ static void setup_toplevel(MwLL r, int x, int y) {
|
||||||
dec->decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE);
|
dec->decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE);
|
||||||
} else {
|
} else {
|
||||||
/* otherwise set up viewporter */
|
/* otherwise set up viewporter */
|
||||||
struct wp_viewporter* wp = WAYLAND_GET_INTERFACE(r->wayland, wp_viewporter)->context;
|
struct wp_viewporter* wp = WAYLAND_GET_INTERFACE(r->wayland, wp_viewporter)->context;
|
||||||
r->wayland.vp = wp_viewporter_get_viewport(wp, r->wayland.framebuffer.surface);
|
MwI32 x = r->wayland.x;
|
||||||
MwU32 vwidth = r->wayland.ww - (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT);
|
MwI32 y = r->wayland.y;
|
||||||
MwU32 vheight = r->wayland.wh - (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM);
|
MwU32 vwidth = r->wayland.ww;
|
||||||
|
MwU32 vheight = r->wayland.wh;
|
||||||
|
r->wayland.vp = wp_viewporter_get_viewport(wp, r->wayland.framebuffer.surface);
|
||||||
|
if(x < 0) x = 0;
|
||||||
|
if(y < 0) y = 0;
|
||||||
if(vwidth < 0) vwidth = 0;
|
if(vwidth < 0) vwidth = 0;
|
||||||
if(vheight < 0) vheight = 0;
|
if(vheight < 0) vheight = 0;
|
||||||
wp_viewport_set_source(r->wayland.vp, r->wayland.x, r->wayland.y, r->wayland.ww, r->wayland.wh);
|
wp_viewport_set_source(r->wayland.vp, wl_fixed_from_int(x), wl_fixed_from_int(y), wl_fixed_from_int(r->wayland.ww), wl_fixed_from_int(r->wayland.wh));
|
||||||
wp_viewport_set_destination(r->wayland.vp, vwidth, vheight);
|
wp_viewport_set_destination(r->wayland.vp, vwidth, vheight);
|
||||||
|
|
||||||
wl_subsurface_set_position(r->wayland.toplevel->ssurface, CSD_BORDER_FRAME_LEFT, CSD_BORDER_FRAME_TOP);
|
wl_subsurface_set_position(r->wayland.toplevel->ssurface, CSD_BORDER_FRAME_LEFT, CSD_BORDER_FRAME_TOP);
|
||||||
|
|
@ -1678,14 +1688,7 @@ static void MwLLSetWHImpl(MwLL handle, int w, int h) {
|
||||||
handle->wayland.wh = 10;
|
handle->wayland.wh = 10;
|
||||||
goto refresh;
|
goto refresh;
|
||||||
}
|
}
|
||||||
if(handle->wayland.parent) {
|
|
||||||
if(handle->wayland.parent->wayland.type == MWLL_WAYLAND_TOPLEVEL && !handle->wayland.parent->wayland.has_decorations) {
|
|
||||||
if(w >= handle->wayland.parent->wayland.ww - (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT))
|
|
||||||
w = handle->wayland.parent->wayland.ww - (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT);
|
|
||||||
if(h >= handle->wayland.parent->wayland.wh - (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM))
|
|
||||||
h = handle->wayland.parent->wayland.wh - (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handle->wayland.ww = w;
|
handle->wayland.ww = w;
|
||||||
handle->wayland.wh = h;
|
handle->wayland.wh = h;
|
||||||
|
|
||||||
|
|
@ -1719,34 +1722,36 @@ static void MwLLBeginDrawImpl(MwLL handle) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!handle->wayland.has_decorations) {
|
if(!handle->wayland.has_decorations) {
|
||||||
int x, y;
|
int x, y;
|
||||||
|
MwU32 w = handle->wayland.ww + CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT;
|
||||||
|
MwU32 h = handle->wayland.wh + CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM;
|
||||||
cairo_set_line_width(handle->wayland.back_cairo, 4.0);
|
cairo_set_line_width(handle->wayland.back_cairo, 4.0);
|
||||||
for(x = 0; x < handle->wayland.ww; x++) {
|
for(x = 0; x < w; x++) {
|
||||||
float placeholder = (float)x / (float)handle->wayland.ww;
|
float placeholder = (float)x / (float)w;
|
||||||
cairo_set_source_rgb(handle->wayland.back_cairo, placeholder, 0.25, 0.25);
|
cairo_set_source_rgb(handle->wayland.back_cairo, placeholder, 0.25, 0.25);
|
||||||
|
|
||||||
cairo_move_to(handle->wayland.back_cairo, handle->wayland.ww - x, 0);
|
cairo_move_to(handle->wayland.back_cairo, w - x, 0);
|
||||||
cairo_line_to(handle->wayland.back_cairo, handle->wayland.ww - x, CSD_BORDER_FRAME_TOP);
|
cairo_line_to(handle->wayland.back_cairo, w - x, CSD_BORDER_FRAME_TOP);
|
||||||
cairo_stroke(handle->wayland.back_cairo);
|
cairo_stroke(handle->wayland.back_cairo);
|
||||||
|
|
||||||
cairo_move_to(handle->wayland.back_cairo, x, CSD_BORDER_FRAME_TOP);
|
cairo_move_to(handle->wayland.back_cairo, x, CSD_BORDER_FRAME_TOP);
|
||||||
cairo_line_to(handle->wayland.back_cairo, x, handle->wayland.wh);
|
cairo_line_to(handle->wayland.back_cairo, x, h);
|
||||||
cairo_stroke(handle->wayland.back_cairo);
|
cairo_stroke(handle->wayland.back_cairo);
|
||||||
}
|
}
|
||||||
cairo_set_source_rgba(handle->wayland.back_cairo, 1, 1, 1, 0.5);
|
cairo_set_source_rgba(handle->wayland.back_cairo, 1, 1, 1, 0.5);
|
||||||
cairo_move_to(handle->wayland.back_cairo, 0, 0);
|
cairo_move_to(handle->wayland.back_cairo, 0, 0);
|
||||||
cairo_line_to(handle->wayland.back_cairo, 0, handle->wayland.wh);
|
cairo_line_to(handle->wayland.back_cairo, 0, h);
|
||||||
cairo_stroke(handle->wayland.back_cairo);
|
cairo_stroke(handle->wayland.back_cairo);
|
||||||
cairo_move_to(handle->wayland.back_cairo, 0, 0);
|
cairo_move_to(handle->wayland.back_cairo, 0, 0);
|
||||||
cairo_line_to(handle->wayland.back_cairo, handle->wayland.ww, 0);
|
cairo_line_to(handle->wayland.back_cairo, w, 0);
|
||||||
cairo_stroke(handle->wayland.back_cairo);
|
cairo_stroke(handle->wayland.back_cairo);
|
||||||
|
|
||||||
cairo_set_source_rgba(handle->wayland.back_cairo, 0, 0, 0, 0.5);
|
cairo_set_source_rgba(handle->wayland.back_cairo, 0, 0, 0, 0.5);
|
||||||
cairo_move_to(handle->wayland.back_cairo, 0, handle->wayland.wh);
|
cairo_move_to(handle->wayland.back_cairo, 0, h);
|
||||||
cairo_line_to(handle->wayland.back_cairo, handle->wayland.ww, handle->wayland.wh);
|
cairo_line_to(handle->wayland.back_cairo, w, h);
|
||||||
cairo_stroke(handle->wayland.back_cairo);
|
cairo_stroke(handle->wayland.back_cairo);
|
||||||
cairo_move_to(handle->wayland.back_cairo, handle->wayland.ww, 0);
|
cairo_move_to(handle->wayland.back_cairo, w, 0);
|
||||||
cairo_line_to(handle->wayland.back_cairo, handle->wayland.ww, handle->wayland.wh);
|
cairo_line_to(handle->wayland.back_cairo, w, h);
|
||||||
cairo_stroke(handle->wayland.back_cairo);
|
cairo_stroke(handle->wayland.back_cairo);
|
||||||
|
|
||||||
if(strlen(handle->wayland.title) != 0) {
|
if(strlen(handle->wayland.title) != 0) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue