From f63ea0a321d1429bb2f60659d9a3bab7fc2a5f2d Mon Sep 17 00:00:00 2001 From: marouault Date: Mon, 24 Jan 2022 09:19:27 +0100 Subject: [PATCH] Added functions to textLabel --- Pontu/include/engine/TextLabel.h | 11 ++- Pontu/src/engine/TextLabel.c | 48 +++++++++++++ Pontu/test/testTextLabel.c | 118 +++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 Pontu/src/engine/TextLabel.c create mode 100644 Pontu/test/testTextLabel.c diff --git a/Pontu/include/engine/TextLabel.h b/Pontu/include/engine/TextLabel.h index 56f63ab..3f88b7a 100644 --- a/Pontu/include/engine/TextLabel.h +++ b/Pontu/include/engine/TextLabel.h @@ -2,11 +2,20 @@ #define TEXT_LABEL_INCLUDED #include +#include +#include "engine/FontLoader.h" typedef struct { char* text; SDL_Rect textZone; + SDL_Color color; + SDL_Texture* texture; }TextLabel; -#endif +TextLabel createTextLabel(const char text[], const SDL_Rect* rect, const SDL_Color* color); +void freeTextLabel(TextLabel* label); + +void drawTextLabel(SDL_Renderer* renderer, TextLabel* label, TTF_Font* fontHandler); + +#endif //TEXT_LABEL_INCLUDED diff --git a/Pontu/src/engine/TextLabel.c b/Pontu/src/engine/TextLabel.c new file mode 100644 index 0000000..c65abc8 --- /dev/null +++ b/Pontu/src/engine/TextLabel.c @@ -0,0 +1,48 @@ +#include "engine/TextLabel.h" + + + +TextLabel createTextLabel(const char text[], const SDL_Rect* rect, const SDL_Color* color) { + TextLabel label = { + .textZone = *rect, + .color = *color, + .texture = NULL + }; + + label.text = (char*) malloc(sizeof(char)*strlen(text)); + strcpy(label.text, text); + + return label; +} + +void freeTextLabel(TextLabel* label) { + free(label->text); + label->text = NULL; + + if (label->texture != NULL) { + SDL_DestroyTexture(label->texture); + } +} + +void drawTextLabel(SDL_Renderer* renderer, TextLabel* label, TTF_Font* font) { + if (label->texture == NULL) { + SDL_Surface* surface = TTF_RenderText_Solid(font, label->text, label->color); + + if(surface == NULL) + { + fprintf(stderr, "WARNING: Can't write on TextLabel\n"); + return; + } + label->texture = SDL_CreateTextureFromSurface(renderer, surface); + if(label->texture == NULL) + { + fprintf(stderr, "WARNING: Can't create texture from surface: %s\n", SDL_GetError()); + return; + } + + SDL_FreeSurface(surface); + } + + SDL_RenderCopy(renderer, label->texture, NULL, &label->textZone); +} + diff --git a/Pontu/test/testTextLabel.c b/Pontu/test/testTextLabel.c new file mode 100644 index 0000000..707ab8f --- /dev/null +++ b/Pontu/test/testTextLabel.c @@ -0,0 +1,118 @@ + + +#include "engine/TextLabel.h" +#include "engine/FontLoader.h" + + +void testTextLabel() { + SDL_Window *window = NULL; + SDL_Renderer *renderer = NULL; + SDL_Texture* picture; + int statut = EXIT_FAILURE; + char* path = "rsrc/img/Lenna.png"; + int i=0; + + if(0 != SDL_Init(SDL_INIT_VIDEO)) + { + fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError()); + goto Quit; + } + + //fenetre + window = SDL_CreateWindow("FenĂȘtre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640,480, SDL_WINDOW_SHOWN); + if(window == NULL) + { + fprintf(stderr, "Erreur SDL_CreateWindow: %s\n", SDL_GetError()); + goto Quit; + } + + //rendu + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if(renderer == NULL) + { + fprintf(stderr, "Erreur SDL_CreateRenderer: %s\n", SDL_GetError()); + goto Quit; + } + + //Fonts + if(TTF_Init() == -1) + { + fprintf(stderr, "Erreur: TTF_Init: %s\n", TTF_GetError()); + goto Quit; + } + + if(0 != SDL_SetRenderDrawColor(renderer, 0,0,0,0)) //choisi la couleur avec laquelle travailler + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + goto Quit; + } + + if(0 != SDL_RenderClear(renderer)) //efface le rendu en le repeignant avec la couleur choisi + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + goto Quit; + } + + if(0 != SDL_SetRenderDrawColor(renderer, 255,255,255,255)) //choisi la couleur avec laquelle travailler + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + goto Quit; + } + + + SDL_bool quit = SDL_FALSE; + SDL_Event event; + + + picture = createTextureFromPath(renderer, path); + FontHandler fontHandler = loadFonts(); + + // TextLabel + SDL_Rect size = {.x=10, .y=10, .w=90, .h=20}; + + SDL_Color color = { + 0,0,0,0 + }; + + TextLabel textLabel = createTextLabel("Salut", &size, &color); + + + + SDL_RenderPresent(renderer); + while(!quit) + { + while(SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + quit = SDL_TRUE; + break; + case SDL_MOUSEBUTTONUP: + break; + } + } + SDL_RenderClear(renderer); + + //SDL_RenderCopy(renderer, picture, NULL, NULL); + + drawTextLabel(renderer, &textLabel, fontHandler.fonts[FONT_retro]); + + SDL_RenderPresent(renderer); + SDL_Delay(500); + ++i; + + SDL_Delay(20); + } + +Quit: + freeFonts(fontHandler); + freeTextLabel(&textLabel); + if(renderer != NULL) + SDL_DestroyRenderer(renderer); + if(window != NULL) + SDL_DestroyWindow(window); + TTF_Quit(); + SDL_Quit(); +} +