#include #include #include #include #include #include static void saffron_text_free(SaffronWidget* self) { free(((SaffronText*)self)->text); } static void saffron_text_draw(SaffronWidget* widget, SDL_Renderer* renderer) { SaffronText* text = (SaffronText*)widget; if (!text->text || !text->font) return; SaffronTheme* theme = ((SaffronWidget*)text)->theme; if (!theme) return; SaffronColor text_color = theme->primary; SDL_Color color = {text_color.r, text_color.g, text_color.b, text_color.a}; SDL_Surface* surface = TTF_RenderText_Blended(text->font, text->text, 0, color); if (!surface) return; SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_FRect dest = {widget->x, widget->y, (float)widget->w, (float)widget->h}; SDL_RenderTexture(renderer, texture, NULL, &dest); SDL_DestroyTexture(texture); SDL_DestroySurface(surface); } SaffronText* saffron_text_new(const char* text, TTF_Font* font) { SaffronText* text_widget = malloc(sizeof(SaffronText)); if (!text_widget) return NULL; saffron_widget_init((SaffronWidget*)text_widget); ((SaffronWidget*)text_widget)->type = SAFFRON_WIDGET_TEXT; ((SaffronWidget*)text_widget)->draw = saffron_text_draw; ((SaffronWidget*)text_widget)->free = saffron_text_free; int w, h; if (!TTF_GetStringSize(font, text, 0, &w, &h)) { w = 0; h = 0; } ((SaffronWidget*)text_widget)->w = w; ((SaffronWidget*)text_widget)->h = h; text_widget->text = malloc(strlen(text) + 1); if (text_widget->text) { strcpy(text_widget->text, text); } text_widget->font = font; return text_widget; }