mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05: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
3
PKGBUILD
3
PKGBUILD
|
|
@ -9,7 +9,7 @@ makedepends=('meson' 'ninja' 'scdoc')
|
|||
depends=(
|
||||
'libxkbcommon'
|
||||
'wayland'
|
||||
'freetype2' 'fontconfig' 'cairo')
|
||||
'freetype2' 'fontconfig' 'pixman')
|
||||
source=()
|
||||
|
||||
pkgver() {
|
||||
|
|
@ -25,4 +25,3 @@ build() {
|
|||
package() {
|
||||
DESTDIR="${pkgdir}/" ninja install
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
* fontconfig
|
||||
* freetype
|
||||
* cairo
|
||||
* pixman
|
||||
* wayland (_client_ and _cursor_ libraries)
|
||||
* wayland protocols
|
||||
* xkbcommon
|
||||
|
|
|
|||
2
font.c
2
font.c
|
|
@ -386,7 +386,7 @@ glyph_for_wchar(struct font *font, wchar_t wc, struct glyph *glyph)
|
|||
uint8_t *data = malloc(bitmap->rows * stride);
|
||||
assert(bitmap->pitch >= 0);
|
||||
|
||||
/* Convert FT bitmap to cairo surface (well, the backing image) */
|
||||
/* Convert FT bitmap to pixman image */
|
||||
switch (bitmap->pixel_mode) {
|
||||
case FT_PIXEL_MODE_MONO:
|
||||
for (size_t r = 0; r < bitmap->rows; r++) {
|
||||
|
|
|
|||
2
main.c
2
main.c
|
|
@ -1085,8 +1085,6 @@ out:
|
|||
tll_free(term.render.workers.queue);
|
||||
|
||||
config_free(conf);
|
||||
|
||||
cairo_debug_reset_static_data();
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ threads = dependency('threads')
|
|||
freetype = dependency('freetype2')
|
||||
fontconfig = dependency('fontconfig')
|
||||
pixman = dependency('pixman-1')
|
||||
cairo = dependency('cairo')
|
||||
wayland_protocols = dependency('wayland-protocols')
|
||||
wayland_client = dependency('wayland-client')
|
||||
wayland_cursor = dependency('wayland-cursor')
|
||||
|
|
@ -101,7 +100,7 @@ executable(
|
|||
'tllist.h',
|
||||
'vt.c', 'vt.h',
|
||||
wl_proto_src + wl_proto_headers,
|
||||
dependencies: [threads, math, freetype, fontconfig, pixman, cairo, wayland_client, wayland_cursor, xkb],
|
||||
dependencies: [threads, math, freetype, fontconfig, pixman, wayland_client, wayland_cursor, xkb],
|
||||
install: true)
|
||||
|
||||
custom_target(
|
||||
|
|
|
|||
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)
|
||||
|
|
|
|||
7
shm.h
7
shm.h
|
|
@ -3,7 +3,6 @@
|
|||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include <cairo.h>
|
||||
#include <pixman.h>
|
||||
#include <wayland-client.h>
|
||||
|
||||
|
|
@ -19,11 +18,9 @@ struct buffer {
|
|||
struct wl_buffer *wl_buf;
|
||||
|
||||
size_t copies;
|
||||
cairo_surface_t **cairo_surface;
|
||||
cairo_t **cairo;
|
||||
|
||||
pixman_image_t **pix;
|
||||
};
|
||||
|
||||
struct buffer *shm_get_buffer(struct wl_shm *shm, int width, int height, size_t copies);
|
||||
struct buffer *shm_get_buffer(
|
||||
struct wl_shm *shm, int width, int height, size_t copies);
|
||||
void shm_fini(void);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include <threads.h>
|
||||
#include <semaphore.h>
|
||||
|
||||
#include <cairo.h>
|
||||
#include <wayland-client.h>
|
||||
#include <primary-selection-unstable-v1.h>
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue