diff options
-rw-r--r-- | src/widget.c | 44 | ||||
-rw-r--r-- | src/widget.h | 5 |
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_ */ |