doublebuffered wayland #38
1 changed files with 7 additions and 23 deletions
double buffering handled properly on child widgets
commit
48756c2681
|
|
@ -925,8 +925,6 @@ static void draw_child(MwLL handle, MwLL child) {
|
||||||
|
|
||||||
while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent;
|
while(topmost_parent->wayland.parent) topmost_parent = topmost_parent->wayland.parent;
|
||||||
|
|
||||||
selected_cairo = handle->wayland.cairo.front_cairo_back;
|
|
||||||
|
|
||||||
wl_surface_commit(child->wayland.framebuffer.surface);
|
wl_surface_commit(child->wayland.framebuffer.surface);
|
||||||
|
|
||||||
cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, child->wayland.ww, child->wayland.wh);
|
cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, child->wayland.ww, child->wayland.wh);
|
||||||
|
|
@ -939,8 +937,8 @@ static void draw_child(MwLL handle, MwLL child) {
|
||||||
|
|
||||||
cairo_paint(c);
|
cairo_paint(c);
|
||||||
|
|
||||||
cairo_set_source_surface(selected_cairo, cs, child->wayland.x, child->wayland.y);
|
cairo_set_source_surface(handle->wayland.cairo.front_cairo_back, cs, child->wayland.x, child->wayland.y);
|
||||||
cairo_paint(selected_cairo);
|
cairo_paint(handle->wayland.cairo.front_cairo_back);
|
||||||
|
|
||||||
cairo_destroy(c);
|
cairo_destroy(c);
|
||||||
cairo_surface_destroy(cs);
|
cairo_surface_destroy(cs);
|
||||||
|
|
@ -949,6 +947,8 @@ static void draw_child(MwLL handle, MwLL child) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void draw_children(MwLL handle) {
|
static void draw_children(MwLL handle) {
|
||||||
|
wl_surface_damage(handle->wayland.framebuffer.surface, 0, 0, handle->wayland.ww, handle->wayland.wh);
|
||||||
|
|
||||||
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);
|
||||||
|
|
@ -959,10 +959,6 @@ static void cascade_child(MwLL handle, MwLL child) {
|
||||||
child->wayland.do_cascading_draw = 10;
|
child->wayland.do_cascading_draw = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void count_child(MwLL handle, MwLL child) {
|
|
||||||
handle->wayland.cascading_child_num++;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void frontbuffer_draw(MwLL handle) {
|
static void frontbuffer_draw(MwLL handle) {
|
||||||
cairo_t* c;
|
cairo_t* c;
|
||||||
cairo_surface_t* cs;
|
cairo_surface_t* cs;
|
||||||
|
|
@ -985,11 +981,7 @@ static void frontbuffer_draw(MwLL handle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MwLLWaylandCascadeChildren(MwLL handle) {
|
void MwLLWaylandCascadeChildren(MwLL handle) {
|
||||||
handle->wayland.cascading_child_num = 0;
|
handle->wayland.do_cascading_draw = 1;
|
||||||
MwLLWaylandChildrenIterate(handle, count_child);
|
|
||||||
|
|
||||||
handle->wayland.do_cascading_draw = handle->wayland.cascading_child_num * 10;
|
|
||||||
MwLLWaylandChildrenIterate(handle, cascade_child);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) {
|
static MwLL MwLLCreateImpl(MwLL parent, int x, int y, int width, int height) {
|
||||||
|
|
@ -1330,13 +1322,7 @@ static void MwLLEndDrawImpl(MwLL handle) {
|
||||||
}
|
}
|
||||||
MwLLWaylandBufferUpdate(handle, &handle->wayland.framebuffer);
|
MwLLWaylandBufferUpdate(handle, &handle->wayland.framebuffer);
|
||||||
|
|
||||||
// MwLLWaylandCascadeChildren(handle);
|
MwLLWaylandCascadeChildren(handle);
|
||||||
draw_children(handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(handle->wayland.type != MwLL_WAYLAND_SUBLEVEL) {
|
|
||||||
wl_surface_damage(handle->wayland.framebuffer.surface, 0, 0, handle->wayland.ww, handle->wayland.wh);
|
|
||||||
frontbuffer_draw(handle);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1401,9 +1387,7 @@ static int MwLLPendingImpl(MwLL handle) {
|
||||||
|
|
||||||
if(handle->wayland.do_cascading_draw) {
|
if(handle->wayland.do_cascading_draw) {
|
||||||
draw_children(handle);
|
draw_children(handle);
|
||||||
|
frontbuffer_draw(handle);
|
||||||
if(handle->wayland.do_cascading_draw > 0)
|
|
||||||
handle->wayland.do_cascading_draw--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
handle->wayland.end_time = MwTimeGetTick();
|
handle->wayland.end_time = MwTimeGetTick();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue