[uwac] window: fix damage region dimensions (rounding errors)
This commit is contained in:
parent
d56af70dc1
commit
09c1269962
@ -680,11 +680,17 @@ static const struct wl_callback_listener frame_listener = { frame_done_cb };
|
|||||||
static void damage_surface(UwacWindow* window, UwacBuffer* buffer, int scale)
|
static void damage_surface(UwacWindow* window, UwacBuffer* buffer, int scale)
|
||||||
{
|
{
|
||||||
int nrects, i;
|
int nrects, i;
|
||||||
|
int x, y, w, h;
|
||||||
const pixman_box32_t* box = pixman_region32_rectangles(&buffer->damage, &nrects);
|
const pixman_box32_t* box = pixman_region32_rectangles(&buffer->damage, &nrects);
|
||||||
|
|
||||||
for (i = 0; i < nrects; i++, box++)
|
for (i = 0; i < nrects; i++, box++)
|
||||||
wl_surface_damage(window->surface, box->x1 / scale, box->y1 / scale,
|
{
|
||||||
(box->x2 - box->x1) / scale, (box->y2 - box->y1) / scale);
|
x = ((int)floor(box->x1 / scale)) - 1;
|
||||||
|
y = ((int)floor(box->y1 / scale)) - 1;
|
||||||
|
w = ((int)ceil((box->x2 - box->x1) / scale)) + 2;
|
||||||
|
h = ((int)ceil((box->y2 - box->y1) / scale)) + 2;
|
||||||
|
wl_surface_damage(window->surface, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
pixman_region32_clear(&buffer->damage);
|
pixman_region32_clear(&buffer->damage);
|
||||||
}
|
}
|
||||||
@ -692,11 +698,17 @@ static void damage_surface(UwacWindow* window, UwacBuffer* buffer, int scale)
|
|||||||
static void damage_surface(UwacWindow* window, UwacBuffer* buffer, int scale)
|
static void damage_surface(UwacWindow* window, UwacBuffer* buffer, int scale)
|
||||||
{
|
{
|
||||||
uint32_t nrects, i;
|
uint32_t nrects, i;
|
||||||
|
int x, y, w, h;
|
||||||
const RECTANGLE_16* box = region16_rects(&buffer->damage, &nrects);
|
const RECTANGLE_16* box = region16_rects(&buffer->damage, &nrects);
|
||||||
|
|
||||||
for (i = 0; i < nrects; i++, box++)
|
for (i = 0; i < nrects; i++, box++)
|
||||||
wl_surface_damage(window->surface, box->left / scale, box->top / scale,
|
{
|
||||||
(box->right - box->left) / scale, (box->bottom - box->top) / scale);
|
x = ((int)floor(box->left / scale)) - 1;
|
||||||
|
y = ((int)floor(box->top / scale)) - 1;
|
||||||
|
w = ((int)ceil((box->right - box->left) / scale)) + 2;
|
||||||
|
h = ((int)ceil((box->bottom - box->top) / scale)) + 2;
|
||||||
|
wl_surface_damage(window->surface, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
region16_clear(&buffer->damage);
|
region16_clear(&buffer->damage);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user