Add drop_area_t
This commit is contained in:
parent
2fce90f0f3
commit
66abe8585c
17
include/drop_area.h
Normal file
17
include/drop_area.h
Normal 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
54
src/drop_area.c
Normal 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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user