summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-04 20:17:59 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-04 20:17:59 (EDT)
commitddf513909ce1742021b9c57ea7279a61aeda4899 (patch)
tree63ef4993cdaea7da22255078cfa7858660307e01 /src
parent072f42236fb0d2509608a3ad345df2c5cf71f8dd (diff)
downloadmazefight-ddf513909ce1742021b9c57ea7279a61aeda4899.zip
mazefight-ddf513909ce1742021b9c57ea7279a61aeda4899.tar.gz
mazefight-ddf513909ce1742021b9c57ea7279a61aeda4899.tar.bz2
tk: Implement mouse button up event
Diffstat (limited to 'src')
-rw-r--r--src/splash.c12
-rw-r--r--src/tk.h2
-rw-r--r--src/tk/button.c4
-rw-r--r--src/tk/grid.c25
-rw-r--r--src/tk/label.c4
-rw-r--r--src/tk/widget.c4
-rw-r--r--src/tk/widget.h2
7 files changed, 44 insertions, 9 deletions
diff --git a/src/splash.c b/src/splash.c
index b7d9185..9b94057 100644
--- a/src/splash.c
+++ b/src/splash.c
@@ -28,6 +28,13 @@
#include "tk.h"
#include "util.h"
+static int
+_mf_splash_play(void *user_data)
+{
+ SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Playing");
+ return 0;
+}
+
int
mf_splash(SDL_Renderer *renderer)
{
@@ -70,7 +77,8 @@ mf_splash(SDL_Renderer *renderer)
mftk_label_new(title_font, "Maze Fight", &text_color,
renderer),
mftk_button_new(text_font, "Play", &text_color,
- &butn_color, 2, NULL, NULL, renderer));
+ &butn_color, 2, &_mf_splash_play, NULL,
+ renderer));
/* TODO: Widgets */
mftk_widget_layout(grid);
@@ -108,6 +116,8 @@ mf_splash(SDL_Renderer *renderer)
SDL_RenderClear(renderer);
mf_maze_render(maze, renderer, &maze_color,
MF_SPLASH_MAZE_CELL_W);
+ mftk_widget_event(grid, &event,
+ MF_SPLASH_WINDOW_P, MF_SPLASH_WINDOW_P);
mftk_widget_render(grid, renderer,
MF_SPLASH_WINDOW_P, MF_SPLASH_WINDOW_P);
SDL_RenderPresent(renderer);
diff --git a/src/tk.h b/src/tk.h
index 7a3c9c6..2a4706d 100644
--- a/src/tk.h
+++ b/src/tk.h
@@ -36,7 +36,7 @@ void
mftk_widget_layout(struct mftk_widget *w);
int
-mftk_widget_event(struct mftk_widget *w, SDL_Event *e);
+mftk_widget_event(struct mftk_widget *w, SDL_Event *e, int x, int y);
int
mftk_widget_render(struct mftk_widget *w, SDL_Renderer *renderer, int x, int y);
diff --git a/src/tk/button.c b/src/tk/button.c
index 0db91a9..ffac9de 100644
--- a/src/tk/button.c
+++ b/src/tk/button.c
@@ -42,7 +42,9 @@ _mftk_button_layout(struct mftk_widget *w)
}
static int
-_mftk_button_event(struct mftk_widget *w, SDL_Event *e)
+_mftk_button_event(struct mftk_widget *w, SDL_Event *e,
+ int x __attribute__((__unused__)),
+ int y __attribute__((__unused__)))
{
struct mftk_button *b = (struct mftk_button *) w;
diff --git a/src/tk/grid.c b/src/tk/grid.c
index 5994929..67fa677 100644
--- a/src/tk/grid.c
+++ b/src/tk/grid.c
@@ -79,12 +79,33 @@ _mftk_grid_layout(struct mftk_widget *w)
}
static int
-_mftk_grid_event(struct mftk_widget *w, SDL_Event *e)
+_mftk_grid_event(struct mftk_widget *w, SDL_Event *e, int x, int y)
{
- struct mftk_grid *g = (struct mftk_grid *) w;
+ struct mftk_grid *g = (struct mftk_grid *) w;
+ SDL_Point p;
+ SDL_Rect rect;
+ int r;
+ int c;
+ struct mftk_widget *child;
switch (e->type) {
case SDL_MOUSEBUTTONUP:
+ p.x = e->button.x;
+ p.y = e->button.y;
+ for (r = 0; r < g->rows; ++r) {
+ for (c = 0; c < g->cols; ++c) {
+ child = g->children[r * g->cols + c];
+ rect.x = x + g->children_x[c];
+ rect.y = y + g->children_y[r];
+ rect.w = child->w;
+ rect.h = child->h;
+ if (SDL_PointInRect(&p, &rect)
+ == SDL_TRUE) {
+ return mftk_widget_event(child,
+ e, x, y);
+ }
+ }
+ }
break;
default:
break;
diff --git a/src/tk/label.c b/src/tk/label.c
index ec4400a..1fcfd84 100644
--- a/src/tk/label.c
+++ b/src/tk/label.c
@@ -37,7 +37,9 @@ _mftk_label_layout(struct mftk_widget *w __attribute__((__unused__)))
static int
_mftk_label_event(struct mftk_widget *w __attribute__((__unused__)),
- SDL_Event *e __attribute__((__unused__)))
+ SDL_Event *e __attribute__((__unused__)),
+ int x __attribute__((__unused__)),
+ int y __attribute__((__unused__)))
{
/* No events */
return 0;
diff --git a/src/tk/widget.c b/src/tk/widget.c
index 1bf9407..ea4835e 100644
--- a/src/tk/widget.c
+++ b/src/tk/widget.c
@@ -61,9 +61,9 @@ mftk_widget_layout(struct mftk_widget *w)
}
int
-mftk_widget_event(struct mftk_widget *w, SDL_Event *e)
+mftk_widget_event(struct mftk_widget *w, SDL_Event *e, int x, int y)
{
- return w->event(w, e);
+ return w->event(w, e, x, y);
}
int
diff --git a/src/tk/widget.h b/src/tk/widget.h
index ae81553..4966749 100644
--- a/src/tk/widget.h
+++ b/src/tk/widget.h
@@ -28,7 +28,7 @@ struct mftk_widget {
int vis;
int can_focus;
void (*layout)(struct mftk_widget *);
- int (*event)(struct mftk_widget *, SDL_Event *);
+ int (*event)(struct mftk_widget *, SDL_Event *, int, int);
int (*render)(struct mftk_widget *, SDL_Renderer *, int, int);
void (*destroy)(struct mftk_widget *);
};