From 69e7e111fb65cd3473e1aa3386d4607d95f34785 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Tue, 03 Aug 2021 16:57:07 -0400 Subject: widget: Add button --- (limited to 'src') 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_ */ -- cgit v0.9.1