summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-03 16:57:07 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-03 18:16:14 (EDT)
commit69e7e111fb65cd3473e1aa3386d4607d95f34785 (patch)
tree772c74bb59c376fca9e0390d1162af992fbbd1bb /src
parent5df07dbf538d951275a23206fac3c0b9b0a2b27b (diff)
downloadmazefight-69e7e111fb65cd3473e1aa3386d4607d95f34785.zip
mazefight-69e7e111fb65cd3473e1aa3386d4607d95f34785.tar.gz
mazefight-69e7e111fb65cd3473e1aa3386d4607d95f34785.tar.bz2
widget: Add button
Diffstat (limited to 'src')
-rw-r--r--src/widget.c44
-rw-r--r--src/widget.h5
2 files changed, 49 insertions, 0 deletions
diff --git a/src/widget.c b/src/widget.c
index 0b6929c..25c5517 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -75,3 +75,47 @@ mf_widget_text(TTF_Font *font, const char *text, SDL_Color *color,
return texture;
}
+
+SDL_Texture *
+mf_widget_button(TTF_Font *font, const char *text, SDL_Color *text_color,
+ SDL_Color *fill_color, int padding, SDL_Renderer *renderer,
+ SDL_Rect *rect)
+{
+ SDL_Texture *text_texture;
+ SDL_Rect text_rect;
+ SDL_Texture *texture;
+ SDL_Texture *target;
+
+ text_texture = mf_widget_text(font, text, text_color, renderer,
+ &text_rect);
+ if (text_texture == NULL) {
+ return NULL;
+ }
+ text_rect.x += padding;
+ text_rect.y += padding;
+ rect->x = 0;
+ rect->y = 0;
+ rect->w = text_rect.w + padding * 2;
+ rect->h = TTF_FontLineSkip(font) + padding * 2;
+
+ texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
+ SDL_TEXTUREACCESS_TARGET, rect->w, rect->h);
+ if (texture == NULL) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
+ "Couldn't create texture: %s",
+ SDL_GetError());
+ SDL_DestroyTexture(text_texture);
+ return NULL;
+ }
+ target = SDL_GetRenderTarget(renderer);
+ SDL_SetRenderTarget(renderer, texture);
+
+ SDL_SetRenderDrawColor(renderer,
+ fill_color->r, fill_color->g,
+ fill_color->b, fill_color->a);
+ SDL_RenderClear(renderer);
+ SDL_RenderCopy(renderer, text_texture, NULL, &text_rect);
+
+ SDL_SetRenderTarget(renderer, target);
+ return texture;
+}
diff --git a/src/widget.h b/src/widget.h
index 04a6767..be7f79f 100644
--- a/src/widget.h
+++ b/src/widget.h
@@ -26,4 +26,9 @@ SDL_Texture *
mf_widget_text(TTF_Font *font, const char *text, SDL_Color *color,
SDL_Renderer *renderer, SDL_Rect *rect);
+SDL_Texture *
+mf_widget_button(TTF_Font *font, const char *text, SDL_Color *text_color,
+ SDL_Color *fill_color, int padding, SDL_Renderer *renderer,
+ SDL_Rect *rect);
+
#endif /* MF_WIDGET_H_ */