diff options
Diffstat (limited to 'src/tk/grid.c')
-rw-r--r-- | src/tk/grid.c | 25 |
1 files changed, 23 insertions, 2 deletions
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; |