mirror of
https://github.com/wizbright/waybox.git
synced 2025-10-29 05:40:20 -04:00
fixing issues now
This commit is contained in:
parent
7603e06da8
commit
4a04ba2237
3 changed files with 117 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
build
|
||||
41
meson.build
Normal file
41
meson.build
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# SirCmpwn is a god. (from mcwayface)
|
||||
|
||||
project(
|
||||
'waybox',
|
||||
'c',
|
||||
version: '0.0.1',
|
||||
license: 'MIT',
|
||||
meson_version: '>=0.43.0',
|
||||
default_options: [
|
||||
'c_std=c11',
|
||||
'warning_level=2',
|
||||
'werror=true',
|
||||
],
|
||||
)
|
||||
|
||||
add_project_arguments('-Wno-unused-parameter', language: 'c')
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
if cc.get_id() == 'clang'
|
||||
add_project_arguments('-Wno-missing-field-initializers', language: 'c')
|
||||
add_project_arguments('-Wno-missing-braces', language: 'c')
|
||||
endif
|
||||
|
||||
# Hiding depreciation warnings
|
||||
add_project_arguments('-DWL_HIDE_DEPRECATED', language: 'c')
|
||||
|
||||
pixman = dependency('pixman-1')
|
||||
wlroots = dependency('wlroots')
|
||||
wayland_server = dependency('wayland-server')
|
||||
|
||||
executable(
|
||||
'waybox',
|
||||
[
|
||||
'src/main.c'
|
||||
],
|
||||
dependencies: [
|
||||
pixman,
|
||||
wlroots,
|
||||
wayland_server,
|
||||
]
|
||||
)
|
||||
75
src/main.c
75
src/main.c
|
|
@ -1,12 +1,82 @@
|
|||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <wayland-server.h>
|
||||
#include <wlr/backend.h>
|
||||
#include <wlr/render.h>
|
||||
|
||||
|
||||
struct wb_server {
|
||||
struct wl_display *wl_display;
|
||||
struct wl_event_loop *wl_event_loop;
|
||||
|
||||
struct wlr_backend *backend;
|
||||
|
||||
struct wl_listener new_output;
|
||||
struct wl_list outputs; // wb_output::link
|
||||
};
|
||||
|
||||
struct wb_output {
|
||||
struct wlr_output *wlr_output;
|
||||
struct wb_server *server;
|
||||
struct timespec last_frame;
|
||||
float color[4];
|
||||
int dec;
|
||||
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener frame;
|
||||
|
||||
struct wl_list link;
|
||||
};
|
||||
|
||||
static void output_frame_notify(struct wl_listener *listener, void *data) {
|
||||
struct wb_output *output = wl_container_of(listener, output, frame);
|
||||
struct wlr_output *wlr_output = data;
|
||||
struct wlr_renderer *renderer = wlr_backend_get_renderer(
|
||||
wlr_output->backend);
|
||||
|
||||
wlr_output_make_current(wlr_output, NULL);
|
||||
wlr_renderer_begin(renderer, wlr_output);
|
||||
|
||||
float color[4] = {1.0, 0, 0, 1.0}; // Color red
|
||||
wlr_renderer_clear(renderer, &output->color);
|
||||
|
||||
wlr_output_swap_buffers(wlr_output, NULL, NULL);
|
||||
wlr_renderer_end(renderer);
|
||||
}
|
||||
|
||||
static void output_remove_notify(struct wl_listener *listener, void *data) {
|
||||
struct wb_output *output = wl_container_of(listener, output, destroy);
|
||||
wl_list_remove(&output->link);
|
||||
wl_list_remove(&output->destroy.link);
|
||||
wl_list_remove(&output->frame.link);
|
||||
free(output);
|
||||
}
|
||||
|
||||
static void new_output_notify(struct wl_listener *listener, void *data) {
|
||||
struct wb_server *server = wl_container_of(
|
||||
listener, server, new_output
|
||||
);
|
||||
|
||||
if (!wl_list_empty(&wlr_output->modes)) {
|
||||
struct wlr_output_mode *mode =
|
||||
wl_container_of(wlr_output->modes.prev, mode, link);
|
||||
wlr_output_set_mode(wlr_output, mode);
|
||||
}
|
||||
|
||||
struct wb_output *output = calloc(1, sizeof(struct wb_output));
|
||||
clock_gettime(CLOCK_MONOTONIC, &output->last_frame);
|
||||
output->server = server;
|
||||
output->wlr_output = wlr_output;
|
||||
wl_list_insert(&server->outputs, &output->link);
|
||||
|
||||
output->destroy.notify = output_destroy_notify;
|
||||
wl_signal_add(&wlr_output->events.destroy, &output->destroy);
|
||||
output->frame.notify = output_frame_notify;
|
||||
wl_signal_add(&wlr_output->events.frame, &output->frame);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv){
|
||||
struct wb_server server;
|
||||
|
||||
|
|
@ -18,6 +88,11 @@ int main(int argc, char **argv){
|
|||
server.backend = wlr_backend_autocreate(server.wl_display);
|
||||
assert(server.backend);
|
||||
|
||||
wl_list_init(&server.outputs);
|
||||
|
||||
server.new_output.notify = new_output_notify;
|
||||
wl_signal_add(&server.backend->events.new_output, &server.new_output);
|
||||
|
||||
if (!wlr_backend_start(server.backend)) {
|
||||
fprintf(stderr, "Failed to start backend\n");
|
||||
wl_display_destroy(server.wl_display);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue