diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..08b74df --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +CC = gcc +CFLAGS = -g -DWLR_USE_UNSTABLE `pkg-config --cflags wlroots-0.19 wayland-server pixman-1 libpng` +LDFLAGS = `pkg-config --libs wlroots-0.19 wayland-server pixman-1 libpng` + +all: panes + +panes: main.c + $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) diff --git a/cursor.png b/cursor.png new file mode 100644 index 0000000..5e5ee49 Binary files /dev/null and b/cursor.png differ diff --git a/fuck b/fuck new file mode 100644 index 0000000..e69de29 diff --git a/main.c b/main.c new file mode 100644 index 0000000..4e9dc3a --- /dev/null +++ b/main.c @@ -0,0 +1,105 @@ +#define WLR_USE_UNSTABLE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct server { + struct wl_display *display; + struct wlr_backend *backend; + struct wlr_renderer *renderer; + struct wlr_allocator *allocator; + struct wlr_scene *scene; + struct wlr_output_layout *layout; + struct wl_listener new_output; +}; + +static void handle_new_output(struct wl_listener *listener, void *data) { + struct server *server = wl_container_of(listener, server, new_output); + struct wlr_output *output = data; + + // Pick the first available mode + if (!wl_list_empty(&output->modes)) { + struct wlr_output_mode *mode = wl_container_of(output->modes.next, mode, link); + + struct wlr_output_state state; + memset(&state, 0, sizeof(state)); + state.committed = WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE; + state.enabled = true; + state.mode_type = WLR_OUTPUT_STATE_MODE_FIXED; + state.mode = mode; + + if (!wlr_output_commit_state(output, &state)) { + wlr_log(WLR_ERROR, "Failed to commit output state"); + return; + } + } + + wlr_output_layout_add_auto(server->layout, output); + wlr_scene_output_create(server->scene, output); + + float bg[4] = {0.1f, 0.1f, 0.1f, 1.0f}; + struct wlr_scene_rect *rect = + wlr_scene_rect_create(&server->scene->tree, 1, 1, bg); + wlr_scene_node_lower_to_bottom(&rect->node); +} + +int main(void) { + wlr_log_init(WLR_DEBUG, NULL); + struct server server = {0}; + + server.display = wl_display_create(); + struct wl_event_loop *loop = wl_display_get_event_loop(server.display); + + // Create the backend first + server.backend = wlr_backend_autocreate(loop, NULL); // Automatically choose the backend + if (!server.backend) { + wlr_log(WLR_ERROR, "Failed to create backend"); + return 1; + } + + // Create the renderer after the backend + server.renderer = wlr_renderer_autocreate(server.backend); + if (!server.renderer) { + wlr_log(WLR_ERROR, "Failed to create renderer"); + return 1; + } + + // Now create the allocator with the valid renderer + server.allocator = wlr_allocator_autocreate(server.backend, server.renderer); + if (!server.allocator) { + wlr_log(WLR_ERROR, "Failed to create allocator"); + return 1; + } + + // Create the compositor with the renderer + wlr_compositor_create(server.display, 4, server.renderer); + wlr_data_device_manager_create(server.display); + + server.scene = wlr_scene_create(); + server.layout = wlr_output_layout_create(server.display); + + server.new_output.notify = handle_new_output; + wl_signal_add(&server.backend->events.new_output, &server.new_output); + + // Start the backend + if (!wlr_backend_start(server.backend)) { + wlr_log(WLR_ERROR, "Failed to start backend"); + return 1; + } + + wlr_log(WLR_INFO, "Panes compositor running (wlroots 0.18)..."); + wl_display_run(server.display); + wl_display_destroy(server.display); + return 0; +} diff --git a/panes b/panes new file mode 100755 index 0000000..380a9ae Binary files /dev/null and b/panes differ diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..73271ab --- /dev/null +++ b/start.sh @@ -0,0 +1,5 @@ +export WAYLAND_DISPLAY=wayland-nested +export XDG_RUNTIME_DIR="/run/user/$(id -u)" +export WLR_BACKENDS=wayland +export WLR_WL_OUTPUTS=1 +export WLR_LIBINPUT_NO_DEVICES=1 diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..6d1d965 --- /dev/null +++ b/test.sh @@ -0,0 +1,2 @@ +export XDG_RUNTIME_DIR="/run/user/$(id -u)" +WLR_BACKENDS=drm WLR_LIBINPUT_NO_DEVICES=0 ./panes