backend-headless: use a loop in update_gl_border
Replace a bunch of copied code with a loop over a simple array. This makes the code easier to read, and allows further refactoring. This is pure refactoring, no changes to results or behavior. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
parent
915d8e8cdf
commit
f47ed7894c
@ -73,12 +73,7 @@ struct headless_output {
|
|||||||
|
|
||||||
struct frame *frame;
|
struct frame *frame;
|
||||||
struct {
|
struct {
|
||||||
struct {
|
cairo_surface_t *border[4]; /* enum gl_renderer_border_side */
|
||||||
cairo_surface_t *top;
|
|
||||||
cairo_surface_t *left;
|
|
||||||
cairo_surface_t *right;
|
|
||||||
cairo_surface_t *bottom;
|
|
||||||
} border;
|
|
||||||
} gl;
|
} gl;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -144,7 +139,6 @@ headless_output_update_gl_border(struct headless_output *output)
|
|||||||
struct headless_backend *backend = to_headless_backend(output->base.compositor);
|
struct headless_backend *backend = to_headless_backend(output->base.compositor);
|
||||||
struct gl_renderer_interface *glri = backend->glri;
|
struct gl_renderer_interface *glri = backend->glri;
|
||||||
int32_t ix, iy, iwidth, iheight, fwidth, fheight;
|
int32_t ix, iy, iwidth, iheight, fwidth, fheight;
|
||||||
cairo_t *cr;
|
|
||||||
|
|
||||||
if (!output->frame)
|
if (!output->frame)
|
||||||
return;
|
return;
|
||||||
@ -155,59 +149,45 @@ headless_output_update_gl_border(struct headless_output *output)
|
|||||||
fheight = frame_height(output->frame);
|
fheight = frame_height(output->frame);
|
||||||
frame_interior(output->frame, &ix, &iy, &iwidth, &iheight);
|
frame_interior(output->frame, &ix, &iy, &iwidth, &iheight);
|
||||||
|
|
||||||
if (!output->gl.border.top)
|
struct weston_geometry border_area[4] = {
|
||||||
output->gl.border.top =
|
[GL_RENDERER_BORDER_TOP] = {
|
||||||
cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
.x = 0, .y = 0,
|
||||||
fwidth, iy);
|
.width = fwidth, .height = iy
|
||||||
cr = cairo_create(output->gl.border.top);
|
},
|
||||||
frame_repaint(output->frame, cr);
|
[GL_RENDERER_BORDER_LEFT] = {
|
||||||
cairo_destroy(cr);
|
.x = 0, .y = iy,
|
||||||
glri->output_set_border(&output->base, GL_RENDERER_BORDER_TOP,
|
.width = ix, .height = 1
|
||||||
fwidth, iy,
|
},
|
||||||
cairo_image_surface_get_stride(output->gl.border.top) / 4,
|
[GL_RENDERER_BORDER_RIGHT] = {
|
||||||
cairo_image_surface_get_data(output->gl.border.top));
|
.x = iwidth + ix, .y = iy,
|
||||||
|
.width = fwidth - (ix + iwidth), .height = 1
|
||||||
|
},
|
||||||
|
[GL_RENDERER_BORDER_BOTTOM] = {
|
||||||
|
.x = 0, .y = iy + iheight,
|
||||||
|
.width = fwidth, .height = fheight - (iy + iheight)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < ARRAY_LENGTH(border_area); i++) {
|
||||||
|
const struct weston_geometry *g = &border_area[i];
|
||||||
|
int tex_width;
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
if (!output->gl.border.left)
|
if (!output->gl.border[i]) {
|
||||||
output->gl.border.left =
|
output->gl.border[i] =
|
||||||
cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
||||||
ix, 1);
|
g->width, g->height);
|
||||||
cr = cairo_create(output->gl.border.left);
|
}
|
||||||
cairo_translate(cr, 0, -iy);
|
|
||||||
frame_repaint(output->frame, cr);
|
|
||||||
cairo_destroy(cr);
|
|
||||||
glri->output_set_border(&output->base, GL_RENDERER_BORDER_LEFT,
|
|
||||||
ix, 1,
|
|
||||||
cairo_image_surface_get_stride(output->gl.border.left) / 4,
|
|
||||||
cairo_image_surface_get_data(output->gl.border.left));
|
|
||||||
|
|
||||||
|
tex_width = cairo_image_surface_get_stride(output->gl.border[i]) / 4;
|
||||||
|
|
||||||
if (!output->gl.border.right)
|
cr = cairo_create(output->gl.border[i]);
|
||||||
output->gl.border.right =
|
cairo_translate(cr, -g->x, -g->y);
|
||||||
cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
frame_repaint(output->frame, cr);
|
||||||
fwidth - (ix + iwidth), 1);
|
cairo_destroy(cr);
|
||||||
cr = cairo_create(output->gl.border.right);
|
glri->output_set_border(&output->base, i, g->width, g->height, tex_width,
|
||||||
cairo_translate(cr, -(iwidth + ix), -iy);
|
cairo_image_surface_get_data(output->gl.border[i]));
|
||||||
frame_repaint(output->frame, cr);
|
}
|
||||||
cairo_destroy(cr);
|
|
||||||
glri->output_set_border(&output->base, GL_RENDERER_BORDER_RIGHT,
|
|
||||||
fwidth - (ix + iwidth), 1,
|
|
||||||
cairo_image_surface_get_stride(output->gl.border.right) / 4,
|
|
||||||
cairo_image_surface_get_data(output->gl.border.right));
|
|
||||||
|
|
||||||
|
|
||||||
if (!output->gl.border.bottom)
|
|
||||||
output->gl.border.bottom =
|
|
||||||
cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
|
||||||
fwidth, fheight - (iy + iheight));
|
|
||||||
cr = cairo_create(output->gl.border.bottom);
|
|
||||||
cairo_translate(cr, 0, -(iy + iheight));
|
|
||||||
frame_repaint(output->frame, cr);
|
|
||||||
cairo_destroy(cr);
|
|
||||||
glri->output_set_border(&output->base, GL_RENDERER_BORDER_BOTTOM,
|
|
||||||
fwidth, fheight - (iy + iheight),
|
|
||||||
cairo_image_surface_get_stride(output->gl.border.bottom) / 4,
|
|
||||||
cairo_image_surface_get_data(output->gl.border.bottom));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -246,14 +226,10 @@ headless_output_disable_gl(struct headless_output *output)
|
|||||||
output->frame = NULL;
|
output->frame = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_surface_destroy(output->gl.border.top);
|
for (unsigned i = 0; i < ARRAY_LENGTH(output->gl.border); i++) {
|
||||||
cairo_surface_destroy(output->gl.border.left);
|
cairo_surface_destroy(output->gl.border[i]);
|
||||||
cairo_surface_destroy(output->gl.border.right);
|
output->gl.border[i] = NULL;
|
||||||
cairo_surface_destroy(output->gl.border.bottom);
|
}
|
||||||
output->gl.border.top = NULL;
|
|
||||||
output->gl.border.left = NULL;
|
|
||||||
output->gl.border.right = NULL;
|
|
||||||
output->gl.border.bottom = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user