1
0
mirror of https://codeberg.org/vyivel/dulcepan/ synced 2025-12-17 07:35:13 +02:00

Drop cairo

This commit is contained in:
Kirill Primak
2024-06-18 19:01:51 +03:00
parent 3d604a4380
commit cc13becc46
2 changed files with 43 additions and 19 deletions

60
main.c
View File

@@ -1,5 +1,4 @@
#include <assert.h> #include <assert.h>
#include <cairo.h>
#include <fcntl.h> #include <fcntl.h>
#include <linux/input-event-codes.h> #include <linux/input-event-codes.h>
#include <pixman.h> #include <pixman.h>
@@ -24,8 +23,7 @@
struct dp_swapchain_buffer { struct dp_swapchain_buffer {
struct wl_buffer *buffer; struct wl_buffer *buffer;
void *data; void *data;
cairo_surface_t *cairo_surface; pixman_image_t *image;
cairo_t *cairo;
bool used; bool used;
}; };
@@ -104,6 +102,10 @@ static int pointer_y = 0;
static bool quick = false; static bool quick = false;
static pixman_image_t *unselected_fill_image = NULL;
static pixman_image_t *selected_fill_image = NULL;
static pixman_image_t *border_fill_image = NULL;
static void die(const char *fmt, ...) { static void die(const char *fmt, ...) {
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
@@ -227,23 +229,29 @@ static void redraw(struct dp_output *output) {
} }
sc_buffer->used = true; sc_buffer->used = true;
cairo_set_operator(sc_buffer->cairo, CAIRO_OPERATOR_SOURCE); pixman_image_composite32(PIXMAN_OP_SRC, unselected_fill_image, NULL, sc_buffer->image, 0, 0, 0,
0, 0, 0, output->px_width, output->px_height);
cairo_set_source_rgba(sc_buffer->cairo, 0.5, 0.5, 0.5, 0.5);
cairo_paint(sc_buffer->cairo);
if (output == selected_output) { if (output == selected_output) {
cairo_rectangle(sc_buffer->cairo, selected_x, selected_y, selected_width, selected_height); int border_size = 2;
cairo_set_line_width(sc_buffer->cairo, 4);
cairo_set_source_rgba(sc_buffer->cairo, 1.0, 1.0, 1.0, 1.0); pixman_image_composite32(PIXMAN_OP_SRC, border_fill_image, NULL, sc_buffer->image, 0, 0, 0,
cairo_stroke_preserve(sc_buffer->cairo); 0, selected_x - border_size, selected_y - border_size,
cairo_set_source_rgba(sc_buffer->cairo, 0.0, 0.0, 0.0, 0.0); selected_width + border_size * 2, border_size);
cairo_fill(sc_buffer->cairo); pixman_image_composite32(PIXMAN_OP_SRC, border_fill_image, NULL, sc_buffer->image, 0, 0, 0,
0, selected_x - border_size, selected_y + selected_height,
selected_width + border_size * 2, border_size);
pixman_image_composite32(PIXMAN_OP_SRC, border_fill_image, NULL, sc_buffer->image, 0, 0, 0,
0, selected_x - border_size, selected_y, border_size, selected_height);
pixman_image_composite32(PIXMAN_OP_SRC, border_fill_image, NULL, sc_buffer->image, 0, 0, 0,
0, selected_x + selected_width, selected_y, border_size, selected_height);
pixman_image_composite32(PIXMAN_OP_SRC, selected_fill_image, NULL, sc_buffer->image, 0, 0,
0, 0, selected_x, selected_y, selected_width, selected_height);
} }
wl_surface_attach(output->ui_surface, sc_buffer->buffer, 0, 0); wl_surface_attach(output->ui_surface, sc_buffer->buffer, 0, 0);
wl_surface_damage(output->ui_surface, 0, 0, 200000000, 200000000); wl_surface_damage(output->ui_surface, 0, 0, output->px_width, output->px_height);
wl_surface_commit(output->ui_surface); wl_surface_commit(output->ui_surface);
} }
@@ -734,9 +742,8 @@ int main(void) {
int stride = output->frame_width * 4; int stride = output->frame_width * 4;
sc_buffer->buffer = create_buffer(output->px_width, output->px_height, stride, sc_buffer->buffer = create_buffer(output->px_width, output->px_height, stride,
WL_SHM_FORMAT_ARGB8888, &sc_buffer->data); WL_SHM_FORMAT_ARGB8888, &sc_buffer->data);
sc_buffer->cairo_surface = cairo_image_surface_create_for_data(sc_buffer->data, sc_buffer->image = pixman_image_create_bits(
CAIRO_FORMAT_ARGB32, output->px_width, output->px_height, stride); PIXMAN_a8r8g8b8, output->px_width, output->px_height, sc_buffer->data, stride);
sc_buffer->cairo = cairo_create(sc_buffer->cairo_surface);
wl_buffer_add_listener(sc_buffer->buffer, &sc_buffer_listener, sc_buffer); wl_buffer_add_listener(sc_buffer->buffer, &sc_buffer_listener, sc_buffer);
} }
@@ -750,6 +757,25 @@ int main(void) {
} }
} }
unselected_fill_image = pixman_image_create_solid_fill(&(pixman_color_t){
.red = UINT16_MAX / 2,
.green = UINT16_MAX / 2,
.blue = UINT16_MAX / 2,
.alpha = UINT16_MAX / 2,
});
selected_fill_image = pixman_image_create_solid_fill(&(pixman_color_t){
.red = 0,
.green = 0,
.blue = 0,
.alpha = 0,
});
border_fill_image = pixman_image_create_solid_fill(&(pixman_color_t){
.red = UINT16_MAX,
.green = UINT16_MAX,
.blue = UINT16_MAX,
.alpha = UINT16_MAX,
});
// Select the "first" output, whatever that is // Select the "first" output, whatever that is
selected_output = wl_container_of(outputs.next, selected_output, link); selected_output = wl_container_of(outputs.next, selected_output, link);
select_whole(); select_whole();

View File

@@ -43,7 +43,6 @@ add_project_arguments(cc.get_supported_arguments([
wayland_client = dependency('wayland-client') wayland_client = dependency('wayland-client')
wayland_protos = dependency('wayland-protocols') wayland_protos = dependency('wayland-protocols')
cairo = dependency('cairo')
pixman = dependency('pixman-1') pixman = dependency('pixman-1')
xkbcommon = dependency('xkbcommon') xkbcommon = dependency('xkbcommon')
@@ -59,7 +58,6 @@ executable(
dependencies: [ dependencies: [
client_protos, client_protos,
wayland_client, wayland_client,
cairo,
pixman, pixman,
xkbcommon, xkbcommon,
], ],