Compare commits
2 Commits
81fbff96b8
...
d114cfce99
Author | SHA1 | Date | |
---|---|---|---|
d114cfce99 | |||
9806a5c708 |
@ -37,6 +37,8 @@ struct rect {
|
||||
|
||||
struct window {
|
||||
u32 id;
|
||||
u64 x;
|
||||
u64 y;
|
||||
u64 width;
|
||||
u64 height;
|
||||
const char *title;
|
||||
@ -52,7 +54,8 @@ struct colour {
|
||||
};
|
||||
};
|
||||
|
||||
bool init_window(window_t *wnd, const char *title, u64 width, u64 height);
|
||||
bool init_window(window_t *wnd, const char *title, u32 width, u32 height, i32 x,
|
||||
i32 y);
|
||||
void cleanup_window(window_t *wnd);
|
||||
void clear_window(const window_t *wnd, colour_t colour);
|
||||
void swap_buffers(const window_t *wnd);
|
||||
|
@ -38,13 +38,19 @@ i32 run_main_loop(void) {
|
||||
comp.nodes = (node_t *)malloc(sizeof(node_t) * MAX_NODES);
|
||||
|
||||
window_t *main_window = &(comp.windows[0]);
|
||||
window_t *toolbox = &(comp.windows[1]);
|
||||
|
||||
if (!init_window(main_window, "Compositor", WINDOW_WIDTH, WINDOW_HEIGHT)) {
|
||||
if (!init_window(main_window, "Compositor", WINDOW_WIDTH, WINDOW_HEIGHT, -1,
|
||||
-1)) {
|
||||
SDL_Quit();
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
u32 toolbox_window_width = WINDOW_WIDTH / 7;
|
||||
init_window(toolbox, "Toolbox", toolbox_window_width, WINDOW_HEIGHT,
|
||||
main_window->x - toolbox_window_width, -1);
|
||||
|
||||
comp.running = true;
|
||||
|
||||
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
|
||||
@ -56,6 +62,14 @@ i32 run_main_loop(void) {
|
||||
switch (comp.event.type) {
|
||||
case SDL_QUIT:
|
||||
comp.running = false;
|
||||
break;
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (comp.event.window.event) {
|
||||
case SDL_WINDOWEVENT_CLOSE:
|
||||
comp.running = false;
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
if (comp.event.button.windowID == main_window->id) {
|
||||
@ -108,16 +122,23 @@ i32 run_main_loop(void) {
|
||||
}
|
||||
}
|
||||
|
||||
clear_window(main_window, bg_colour);
|
||||
for (u64 i = 0; i < MAX_WINDOWS; ++i) {
|
||||
clear_window(&(comp.windows[i]), bg_colour);
|
||||
}
|
||||
|
||||
for (u64 i = 0; i < comp.count; ++i) {
|
||||
node_t *node = &(comp.nodes[i]);
|
||||
draw_node(main_window, node);
|
||||
}
|
||||
|
||||
swap_buffers(main_window);
|
||||
for (u64 i = 0; i < MAX_WINDOWS; ++i) {
|
||||
swap_buffers(&(comp.windows[i]));
|
||||
}
|
||||
}
|
||||
|
||||
cleanup_window(toolbox);
|
||||
cleanup_window(main_window);
|
||||
|
||||
SDL_Quit();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
25
src/window.c
25
src/window.c
@ -5,10 +5,13 @@
|
||||
#include <SDL2/SDL_video.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
bool init_window(window_t *wnd, const char *title, u64 width, u64 height) {
|
||||
bool init_window(window_t *wnd, const char *title, u32 width, u32 height, i32 x,
|
||||
i32 y) {
|
||||
i32 pos_x = x >= 0 ? x : SDL_WINDOWPOS_CENTERED;
|
||||
i32 pos_y = y >= 0 ? y : SDL_WINDOWPOS_CENTERED;
|
||||
|
||||
wnd->window =
|
||||
SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
||||
width, height, SDL_WINDOW_SHOWN);
|
||||
SDL_CreateWindow(title, pos_x, pos_y, width, height, SDL_WINDOW_SHOWN);
|
||||
if (!(wnd->window)) {
|
||||
return false;
|
||||
}
|
||||
@ -22,8 +25,20 @@ bool init_window(window_t *wnd, const char *title, u64 width, u64 height) {
|
||||
|
||||
wnd->id = SDL_GetWindowID(wnd->window);
|
||||
wnd->title = title;
|
||||
wnd->width = width;
|
||||
wnd->height = height;
|
||||
|
||||
i32 x_tmp = -1;
|
||||
i32 y_tmp = -1;
|
||||
SDL_GetWindowPosition(wnd->window, &x_tmp, &y_tmp);
|
||||
|
||||
wnd->x = x_tmp;
|
||||
wnd->y = y_tmp;
|
||||
|
||||
i32 w_tmp = -1;
|
||||
i32 h_tmp = -1;
|
||||
SDL_GetWindowSize(wnd->window, &w_tmp, &h_tmp);
|
||||
|
||||
wnd->width = w_tmp;
|
||||
wnd->height = h_tmp;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user