arrow-drawing-test/main.c
2024-01-14 02:10:32 +00:00

114 lines
2.6 KiB
C

#include "SDL_mouse.h"
#include "aliases/aliases.h"
#include "drawing.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_video.h>
#include <stdbool.h>
#include <stdlib.h>
#define WINDOW_WIDTH 1280
#define WINDOW_HEIGHT 720
typedef struct state state_t;
struct state {
i32 mouse_x;
i32 mouse_y;
i32 current_origin_x;
i32 current_origin_y;
bool running;
bool drawing;
arrows_t arrows;
arrow_t tmp_arrow;
};
int main(void) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window =
SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
SDL_Renderer *renderer = SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
state_t st = {
.mouse_x = -1,
.mouse_y = -1,
.current_origin_x = -1,
.current_origin_y = -1,
.running = true,
.drawing = false,
.arrows = {0},
.tmp_arrow = {0},
};
SDL_Event event = {0};
if (!init_arrows_default(&(st.arrows))) {
return EXIT_FAILURE;
}
while (st.running) {
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
st.running = false;
break;
case SDL_MOUSEBUTTONUP:
if (event.button.button == SDL_BUTTON_LEFT) {
if (st.drawing) {
add_arrow(&(st.arrows), st.tmp_arrow);
st.tmp_arrow = (arrow_t){0};
st.drawing = false;
} else {
st.current_origin_x = event.button.x;
st.current_origin_y = event.button.y;
st.drawing = true;
}
} else if (event.button.button == SDL_BUTTON_RIGHT) {
st.current_origin_x = -1;
st.current_origin_y = -1;
st.drawing = false;
}
break;
case SDL_MOUSEMOTION:
st.mouse_x = event.motion.x;
st.mouse_y = event.motion.y;
break;
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
if (st.drawing) {
st.tmp_arrow.origin = (point_t){st.current_origin_x, st.current_origin_y};
st.tmp_arrow.direction = (vec2_t){st.mouse_x - st.current_origin_x,
st.mouse_y - st.current_origin_y};
draw_arrow(renderer, &(st.tmp_arrow), (colour_t){.abgr = 0xff0000ff});
}
draw_arrows(renderer, &(st.arrows), (colour_t){.abgr = 0xff000000});
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return EXIT_SUCCESS;
}