Add drop_area_t
This commit is contained in:
		
							
								
								
									
										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); | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user