Add drop_area_t

This commit is contained in:
Abdelrahman Said 2024-01-08 00:16:47 +00:00
parent 2fce90f0f3
commit 66abe8585c
2 changed files with 71 additions and 0 deletions

17
include/drop_area.h Normal file
View File

@ -0,0 +1,17 @@
#ifndef DROP_AREA_H
#define DROP_AREA_H
#include "colour.h"
#include "window.h"
#include <stdbool.h>
typedef struct {
render_rect_t rect;
colour_t border_colour;
bool mouseover;
} drop_area_t;
void init_drop_area(window_t *wnd, drop_area_t *area, render_rect_t rect,
colour_t border_colour);
#endif // !DROP_AREA_H

54
src/drop_area.c Normal file
View File

@ -0,0 +1,54 @@
#include "drop_area.h"
#include "SDL_events.h"
#include "colour.h"
#include "window.h"
#include <stdio.h>
void handle_hover(const window_t *wnd, void *obj, const SDL_Event *ev);
void handle_drop_file(const window_t *wnd, void *obj, const SDL_Event *ev);
void render_drop_area(const window_t *wnd, void *obj);
void init_drop_area(window_t *wnd, drop_area_t *area, render_rect_t rect,
colour_t border_colour) {
area->rect = rect;
area->border_colour = border_colour;
area->mouseover = false;
add_event_listener(wnd, area, handle_hover);
add_event_listener(wnd, area, handle_drop_file);
add_renderer_func(wnd, area, render_drop_area);
}
void handle_hover(const window_t *wnd, void *obj, const SDL_Event *ev) {
if (!obj || ev->type != SDL_MOUSEMOTION) {
return;
}
drop_area_t *area = (drop_area_t *)obj;
area->mouseover = aabb(ev->motion.x, ev->motion.y, &(area->rect));
}
void handle_drop_file(const window_t *wnd, void *obj, const SDL_Event *ev) {
if (!obj || ev->type != SDL_DROPFILE) {
return;
}
drop_area_t *area = (drop_area_t *)obj;
if (!(area->mouseover)) {
return;
}
printf("%s\n", ev->drop.file);
}
void render_drop_area(const window_t *wnd, void *obj) {
if (!obj) {
return;
}
drop_area_t *area = (drop_area_t *)obj;
draw_rect(wnd, &(area->rect), area->border_colour);
}