1
0
mirror of https://codeberg.org/vyivel/dulcepan/ synced 2025-03-12 18:59:15 +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 <cairo.h>
#include <fcntl.h>
#include <linux/input-event-codes.h>
#include <pixman.h>
@ -24,8 +23,7 @@
struct dp_swapchain_buffer {
struct wl_buffer *buffer;
void *data;
cairo_surface_t *cairo_surface;
cairo_t *cairo;
pixman_image_t *image;
bool used;
};
@ -104,6 +102,10 @@ static int pointer_y = 0;
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, ...) {
va_list args;
va_start(args, fmt);
@ -227,23 +229,29 @@ static void redraw(struct dp_output *output) {
}
sc_buffer->used = true;
cairo_set_operator(sc_buffer->cairo, CAIRO_OPERATOR_SOURCE);
cairo_set_source_rgba(sc_buffer->cairo, 0.5, 0.5, 0.5, 0.5);
cairo_paint(sc_buffer->cairo);
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);
if (output == selected_output) {
cairo_rectangle(sc_buffer->cairo, selected_x, selected_y, selected_width, selected_height);
cairo_set_line_width(sc_buffer->cairo, 4);
int border_size = 2;
cairo_set_source_rgba(sc_buffer->cairo, 1.0, 1.0, 1.0, 1.0);
cairo_stroke_preserve(sc_buffer->cairo);
cairo_set_source_rgba(sc_buffer->cairo, 0.0, 0.0, 0.0, 0.0);
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 - border_size,
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 + 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_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);
}
@ -734,9 +742,8 @@ int main(void) {
int stride = output->frame_width * 4;
sc_buffer->buffer = create_buffer(output->px_width, output->px_height, stride,
WL_SHM_FORMAT_ARGB8888, &sc_buffer->data);
sc_buffer->cairo_surface = cairo_image_surface_create_for_data(sc_buffer->data,
CAIRO_FORMAT_ARGB32, output->px_width, output->px_height, stride);
sc_buffer->cairo = cairo_create(sc_buffer->cairo_surface);
sc_buffer->image = pixman_image_create_bits(
PIXMAN_a8r8g8b8, output->px_width, output->px_height, sc_buffer->data, stride);
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
selected_output = wl_container_of(outputs.next, selected_output, link);
select_whole();

View File

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