snapshot previous buffer so that we don't have ghosting anymore on rotate (this also makes resizing A Bit better)
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
cb5efd9224
commit
58027c095f
2 changed files with 24 additions and 0 deletions
|
|
@ -428,6 +428,8 @@ struct _MwLLWayland {
|
||||||
MwBool do_cascading_draw;
|
MwBool do_cascading_draw;
|
||||||
int cascading_child_num;
|
int cascading_child_num;
|
||||||
|
|
||||||
|
cairo_surface_t* snapshot;
|
||||||
|
|
||||||
MwBool dispatching_resize;
|
MwBool dispatching_resize;
|
||||||
|
|
||||||
struct _MwLLWaylandShmBuffer framebuffer;
|
struct _MwLLWaylandShmBuffer framebuffer;
|
||||||
|
|
|
||||||
|
|
@ -939,6 +939,13 @@ static void draw_children(MwLL handle) {
|
||||||
|
|
||||||
cairo_reset_clip(handle->wayland.cairo.front_cairo_back);
|
cairo_reset_clip(handle->wayland.cairo.front_cairo_back);
|
||||||
|
|
||||||
|
if(handle->wayland.snapshot) {
|
||||||
|
cairo_set_operator(handle->wayland.cairo.front_cairo_back, CAIRO_OPERATOR_SOURCE);
|
||||||
|
cairo_set_source_surface(handle->wayland.cairo.front_cairo_back, handle->wayland.snapshot, 0, 0);
|
||||||
|
cairo_paint(handle->wayland.cairo.front_cairo_back);
|
||||||
|
cairo_set_operator(handle->wayland.cairo.front_cairo_back, CAIRO_OPERATOR_OVER);
|
||||||
|
}
|
||||||
|
|
||||||
MwLLWaylandChildrenIterate(handle, draw_child);
|
MwLLWaylandChildrenIterate(handle, draw_child);
|
||||||
|
|
||||||
if(handle->wayland.configured) MwLLWaylandBufferUpdate(handle, &handle->wayland.framebuffer);
|
if(handle->wayland.configured) MwLLWaylandBufferUpdate(handle, &handle->wayland.framebuffer);
|
||||||
|
|
@ -1299,6 +1306,21 @@ static void MwLLEndDrawImpl(MwLL handle) {
|
||||||
}
|
}
|
||||||
root->wayland.do_cascading_draw = MwTRUE;
|
root->wayland.do_cascading_draw = MwTRUE;
|
||||||
|
|
||||||
|
if(handle->wayland.snapshot) {
|
||||||
|
cairo_surface_destroy(handle->wayland.snapshot);
|
||||||
|
handle->wayland.snapshot = NULL;
|
||||||
|
}
|
||||||
|
if(handle->wayland.ww > 0 && handle->wayland.wh > 0) {
|
||||||
|
cairo_t* snap_cr;
|
||||||
|
|
||||||
|
handle->wayland.snapshot = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, handle->wayland.ww, handle->wayland.wh);
|
||||||
|
snap_cr = cairo_create(handle->wayland.snapshot);
|
||||||
|
cairo_set_operator(snap_cr, CAIRO_OPERATOR_SOURCE);
|
||||||
|
cairo_set_source_surface(snap_cr, handle->wayland.cairo.front_cs_back, 0, 0);
|
||||||
|
cairo_paint(snap_cr);
|
||||||
|
cairo_destroy(snap_cr);
|
||||||
|
}
|
||||||
|
|
||||||
if(handle->wayland.configured) {
|
if(handle->wayland.configured) {
|
||||||
if(handle->wayland.type == MwLL_WAYLAND_TOPLEVEL) {
|
if(handle->wayland.type == MwLL_WAYLAND_TOPLEVEL) {
|
||||||
MwLLWaylandBufferUpdate(handle, &handle->wayland.backbuffer);
|
MwLLWaylandBufferUpdate(handle, &handle->wayland.backbuffer);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue