summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/events.cc4
-rw-r--r--src/events.h4
-rw-r--r--src/wayclock.cc30
3 files changed, 27 insertions, 11 deletions
diff --git a/src/events.cc b/src/events.cc
index 06fc68f..5b4da55 100644
--- a/src/events.cc
+++ b/src/events.cc
@@ -56,12 +56,12 @@ bool wayc_eventloop_running(struct eventloop_s* loop) {
return loop->running;
}
-void wayc_eventloop_update(struct eventloop_s* loop) {
+void wayc_eventloop_update(struct eventloop_s* loop, u8* user) {
wayc_notnull(loop);
if (wayc_hashmap_count(&loop->windows) == 0) loop->running = false;
wayc_wlstate_update(&loop->state);
struct event_s event;
- while (wayc_vec_pop(&loop->events, &event)) loop->handler(loop, &event);
+ while (wayc_vec_pop(&loop->events, &event)) loop->handler(user, loop, &event);
}
diff --git a/src/events.h b/src/events.h
index 3e7be19..9dff1de 100644
--- a/src/events.h
+++ b/src/events.h
@@ -40,7 +40,7 @@ struct event_s {
struct eventloop_s;
-typedef void (*event_handler_t)(struct eventloop_s* loop,
+typedef void (*event_handler_t)(u8* user, struct eventloop_s* loop,
struct event_s* event);
enum eventloop_error_e {
@@ -64,4 +64,4 @@ window_id_t wayc_eventloop_register(struct eventloop_s* loop,
struct window_s* window);
void wayc_eventloop_unregister(struct eventloop_s* loop, window_id_t winid);
bool wayc_eventloop_running(struct eventloop_s* loop);
-void wayc_eventloop_update(struct eventloop_s* loop);
+void wayc_eventloop_update(struct eventloop_s* loop, u8* user);
diff --git a/src/wayclock.cc b/src/wayclock.cc
index ac6a796..889faef 100644
--- a/src/wayclock.cc
+++ b/src/wayclock.cc
@@ -1,5 +1,4 @@
-#include <cstdio>
#include "events.h"
#include "graphics.h"
@@ -10,17 +9,22 @@
#define WAYC_APP_WIDTH 1280
#define WAYC_APP_HEIGHT 1080
-void frame(struct window_s* window, struct eventloop_s* loop) {
+void wayc_frame(struct renderer_s* renderer, struct window_s* window,
+ struct eventloop_s* loop) {
wayc_notnull(window);
wayc_notnull(loop);
+ wayc_notnull(renderer);
+ wayc_renderer_swap(renderer);
wayc_window_redraw(window, loop);
}
-void handle(struct eventloop_s* loop, struct event_s* event) {
+void wayc_handle(u8* user, struct eventloop_s* loop, struct event_s* event) {
wayc_notnull(loop);
wayc_notnull(event);
+ struct renderer_s* renderer = (struct renderer_s*)user;
+
struct window_s* window = event->window;
union event_data_u data = event->data;
@@ -30,10 +34,10 @@ void handle(struct eventloop_s* loop, struct event_s* event) {
break;
case EVENT_KIND_RESIZE: {
struct event_resize_s resize = data.resize;
- fprintf(stderr, "Window resized: %d x %d\n", resize.width, resize.height);
+ wayc_renderer_resize(renderer, resize.width, resize.height);
} break;
case EVENT_KIND_FRAME:
- frame(window, loop);
+ wayc_frame(renderer, window, loop);
break;
default:
break;
@@ -42,7 +46,7 @@ void handle(struct eventloop_s* loop, struct event_s* event) {
int main() {
struct eventloop_s loop;
- if (wayc_eventloop_init(&loop, handle) != EVENTLOOP_ERROR_NONE)
+ if (wayc_eventloop_init(&loop, wayc_handle) != EVENTLOOP_ERROR_NONE)
wayc_panic("Failed to initialize event loop");
struct graphics_s graphics;
@@ -59,8 +63,20 @@ int main() {
window_id_t winid = wayc_eventloop_register(&loop, &window);
window.id = winid;
- while (wayc_eventloop_running(&loop)) wayc_eventloop_update(&loop);
+ struct renderer_s renderer;
+ if (wayc_renderer_init(&renderer, &window, &graphics, WAYC_APP_WIDTH,
+ WAYC_APP_HEIGHT) != RENDERER_ERROR_NONE) {
+ wayc_window_deinit(&window);
+ wayc_graphics_deinit(&graphics);
+ wayc_eventloop_deinit(&loop);
+ wayc_panic("Failed to initialize renderer");
+ }
+
+ wayc_renderer_use(&renderer);
+ while (wayc_eventloop_running(&loop))
+ wayc_eventloop_update(&loop, (u8*)&renderer);
+ wayc_renderer_deinit(&renderer);
wayc_window_deinit(&window);
wayc_graphics_deinit(&graphics);
wayc_eventloop_deinit(&loop);