Add drop_area_t
This commit is contained in:
		
							
								
								
									
										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