mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-03-13 05:33:51 -04:00
Remove all references to cairo; we now use pixman only
This commit is contained in:
parent
81107753bf
commit
f45e5c6aef
8 changed files with 14 additions and 66 deletions
60
shm.c
60
shm.c
|
|
@ -47,11 +47,10 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies)
|
|||
* No existing buffer available. Create a new one by:
|
||||
*
|
||||
* 1. open a memory backed "file" with memfd_create()
|
||||
* 2. mmap() the memory file, to be used by the cairo surface
|
||||
* 2. mmap() the memory file, to be used by the pixman image
|
||||
* 3. create a wayland shm buffer for the same memory file
|
||||
*
|
||||
* The cairo surface and the wayland buffer are now sharing
|
||||
* memory.
|
||||
* The pixman image and the wayland buffer are now sharing memory.
|
||||
*/
|
||||
|
||||
int pool_fd = -1;
|
||||
|
|
@ -61,8 +60,6 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies)
|
|||
struct wl_shm_pool *pool = NULL;
|
||||
struct wl_buffer *buf = NULL;
|
||||
|
||||
cairo_surface_t **cairo_surface = NULL;
|
||||
cairo_t **cairo = NULL;
|
||||
pixman_image_t **pix = NULL;
|
||||
|
||||
/* Backing memory for SHM */
|
||||
|
|
@ -72,8 +69,12 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies)
|
|||
goto err;
|
||||
}
|
||||
|
||||
/* TODO: copied from font.c */
|
||||
/* Calculate stride. Copied from cairoint.h:CAIRO_STRIDE_FOR_WIDTH_BPP */
|
||||
int bpp = 32;
|
||||
const int stride = (((bpp * width + 7) / 8 + 4 - 1) & -4);
|
||||
|
||||
/* Total size */
|
||||
const uint32_t stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width);
|
||||
size = stride * height;
|
||||
if (ftruncate(pool_fd, size) == -1) {
|
||||
LOG_ERRNO("failed to truncate SHM pool");
|
||||
|
|
@ -103,28 +104,9 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies)
|
|||
wl_shm_pool_destroy(pool); pool = NULL;
|
||||
close(pool_fd); pool_fd = -1;
|
||||
|
||||
/* Create a cairo surface around the mmapped memory */
|
||||
cairo_surface = calloc(copies, sizeof(cairo_surface[0]));
|
||||
cairo = calloc(copies, sizeof(cairo[0]));
|
||||
/* One pixman image for each worker thread (do we really need multiple?) */
|
||||
pix = calloc(copies, sizeof(pix[0]));
|
||||
|
||||
for (size_t i = 0; i < copies; i++) {
|
||||
cairo_surface[i] = cairo_image_surface_create_for_data(
|
||||
mmapped, CAIRO_FORMAT_ARGB32, width, height, stride);
|
||||
|
||||
if (cairo_surface_status(cairo_surface[i]) != CAIRO_STATUS_SUCCESS) {
|
||||
LOG_ERR("failed to create cairo surface: %s",
|
||||
cairo_status_to_string(cairo_surface_status(cairo_surface[i])));
|
||||
goto err;
|
||||
}
|
||||
|
||||
cairo[i] = cairo_create(cairo_surface[i]);
|
||||
if (cairo_status(cairo[i]) != CAIRO_STATUS_SUCCESS) {
|
||||
LOG_ERR("failed to create cairo context: %s",
|
||||
cairo_status_to_string(cairo_status(cairo[i])));
|
||||
goto err;
|
||||
}
|
||||
|
||||
pix[i] = pixman_image_create_bits_no_clear(
|
||||
PIXMAN_a8r8g8b8, width, height, (uint32_t *)mmapped, stride);
|
||||
|
||||
|
|
@ -146,8 +128,6 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies)
|
|||
.mmapped = mmapped,
|
||||
.wl_buf = buf,
|
||||
.copies = copies,
|
||||
.cairo_surface = cairo_surface,
|
||||
.cairo = cairo,
|
||||
.pix = pix}
|
||||
)
|
||||
);
|
||||
|
|
@ -157,18 +137,6 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies)
|
|||
return ret;
|
||||
|
||||
err:
|
||||
if (cairo != NULL) {
|
||||
for (size_t i = 0; i < copies; i++)
|
||||
if (cairo[i] != NULL)
|
||||
cairo_destroy(cairo[i]);
|
||||
free(cairo);
|
||||
}
|
||||
if (cairo_surface != NULL) {
|
||||
for (size_t i = 0; i < copies; i++)
|
||||
if (cairo_surface[i] != NULL)
|
||||
cairo_surface_destroy(cairo_surface[i]);
|
||||
free(cairo_surface);
|
||||
}
|
||||
if (pix != NULL) {
|
||||
for (size_t i = 0; i < copies; i++)
|
||||
if (pix[i] != NULL)
|
||||
|
|
@ -193,18 +161,6 @@ shm_fini(void)
|
|||
tll_foreach(buffers, it) {
|
||||
struct buffer *buf = &it->item;
|
||||
|
||||
if (buf->cairo != NULL) {
|
||||
for (size_t i = 0; i < buf->copies; i++)
|
||||
if (buf->cairo[i] != NULL)
|
||||
cairo_destroy(buf->cairo[i]);
|
||||
free(buf->cairo);
|
||||
}
|
||||
if (buf->cairo_surface != NULL) {
|
||||
for (size_t i = 0; i < buf->copies; i++)
|
||||
if (buf->cairo_surface[i] != NULL)
|
||||
cairo_surface_destroy(buf->cairo_surface[i]);
|
||||
free(buf->cairo_surface);
|
||||
}
|
||||
if (buf->pix != NULL) {
|
||||
for (size_t i = 0; i < buf->copies; i++)
|
||||
if (buf->pix[i] != NULL)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue