/* * Copyright (C) 2021 P. J. McDermott * * This file is part of Maze Fight * * Maze Fight is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Maze Fight is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Maze Fight. If not, see . */ #ifndef MFTK_WIDGET_H_ #define MFTK_WIDGET_H_ #include #include struct mftk_widget { int w; int h; int vis; int can_focus; void (*layout)(struct mftk_widget *); int (*event)(struct mftk_widget *, SDL_Event *, int, int); int (*render)(struct mftk_widget *, SDL_Renderer *, int, int); void (*destroy)(struct mftk_widget *); }; struct mftk_widget * mftk_widget_new(size_t size); #define mftk_widget_init(w, t_w, name) \ do { \ w = mftk_widget_new(sizeof(struct mftk_##name)); \ if (w == NULL) { \ return NULL; \ }; \ w->layout = &_mftk_##name##_layout; \ w->event = &_mftk_##name##_event; \ w->render = &_mftk_##name##_render; \ w->destroy = &_mftk_##name##_destroy; \ t_w = (struct mftk_##name *) w; \ } while (0) struct mftk_widget * mftk_grid_new_a(int rows, int cols, int row_spacing, int col_spacing, struct mftk_widget **children); enum mftk_check_shape { MFTK_CHECK_SHAPE_BOX, MFTK_CHECK_SHAPE_CIR }; void mftk_check_set_shape(struct mftk_widget *w, enum mftk_check_shape shape); #endif /* MFTK_WIDGET_H_ */