From 81fd8a410d76db46bae2c1d3e61674e67b03052f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathis=20Rib=C3=A9mont?= Date: Sun, 23 Jan 2022 23:10:05 +0100 Subject: [PATCH] +function creating generic texture with parameters (font, fontSize, thickness of the borders and padding) --- Pontu/entryPoints/test.c | 5 +-- Pontu/include/engine/TextureLoader.h | 2 +- Pontu/src/engine/TextureLoader.c | 47 +++++++++++++--------------- Pontu/test/compile.sh | 2 +- Pontu/test/testButton.c | 41 +++++++++++++++--------- Pontu/test/testButtonTextureLoader.c | 7 ----- 6 files changed, 53 insertions(+), 51 deletions(-) diff --git a/Pontu/entryPoints/test.c b/Pontu/entryPoints/test.c index c8e871a..49b4f1e 100644 --- a/Pontu/entryPoints/test.c +++ b/Pontu/entryPoints/test.c @@ -2,6 +2,7 @@ // #include "../test/testFontLoader.c" // #include "../test/testAudioHandler.c" // #include "../test/testGenerateurTexture.c" +#include "../test/testButton.c" #include "../test/testTextInput.c" /* This file is meant to be modified (used only to called other tests functions) @@ -12,7 +13,7 @@ int main(/*int argc, char *argv[]*/) { //testAudioHandler(); //testFontLoader(); //testGenerateurTexture(); - testTextInput(); - + //testTextInput(); + testButtonTextureLoader(); return 0; } diff --git a/Pontu/include/engine/TextureLoader.h b/Pontu/include/engine/TextureLoader.h index 102e201..62e65e2 100644 --- a/Pontu/include/engine/TextureLoader.h +++ b/Pontu/include/engine/TextureLoader.h @@ -16,4 +16,4 @@ */ SDL_Texture* createTextureFromPath(SDL_Renderer* renderer, char* path); -SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int fontSize, SDL_Color border_color, SDL_Color background_color,int* sizex, int* sizey, SDL_Renderer renderer); +SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int fontSize, SDL_Color border_color, SDL_Color background_color,int thickness, int padding, int* sizex, int* sizey, SDL_Renderer* renderer); diff --git a/Pontu/src/engine/TextureLoader.c b/Pontu/src/engine/TextureLoader.c index f6ffdc5..ebb6282 100644 --- a/Pontu/src/engine/TextureLoader.c +++ b/Pontu/src/engine/TextureLoader.c @@ -23,12 +23,9 @@ SDL_Texture* createTextureFromPath(SDL_Renderer* renderer, char* path) return texture; } -SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int fontSize, SDL_Color border_color, SDL_Color background_color,int* sizex, int* sizey, SDL_Renderer renderer) +SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int size, SDL_Color border_color, SDL_Color background_color, int thickness, int padding,int* sizex, int* sizey, SDL_Renderer* renderer) { // https://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf.html#SEC38 - int thickness = 1; //thickness of the outline; - int statut = EXIT_FAILURE;7 - int padding = 1; if(renderer == NULL) { @@ -42,22 +39,18 @@ SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int fontSize return NULL; } - // load font.ttf at size 16 into font - TTF_Font *retroFont; - int size = fontSize*100/88; - retroFont=TTF_OpenFont("rsrc/font/retro/retro.TTF", size); - if(!retroFont) { - printf("TTF_OpenFont: %s\n", TTF_GetError()); - // handle error - } - SDL_Color White = {255, 255, 255}; - SDL_Surface* surfaceMessage = TTF_RenderText_Solid(retroFont, text, border_color); + if(font == NULL){ + fprintf(stderr, "Erreur: la police d'écriture ne peut pas être null à la création d'une texture.\n"); + return NULL; + } + + SDL_Surface* surfaceMessage = TTF_RenderText_Solid(font, text, border_color); // now you can convert it into a texture - SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surfaceMessage); + SDL_Texture* message = SDL_CreateTextureFromSurface(renderer, surfaceMessage); int minx,maxx,miny,maxy,advance; - if(TTF_GlyphMetrics(retroFont,string,&minx,&maxx,&miny,&maxy,&advance)==-1){ + if(TTF_GlyphMetrics(font,text,&minx,&maxx,&miny,&maxy,&advance)==-1){ printf("%s\n",TTF_GetError()); } /*else { @@ -69,32 +62,34 @@ SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int fontSize }*/ SDL_Rect Message_rect; //create a rect - Message_rect.x = padding+thickness; //controls the rect's x coordinate + Message_rect.x = padding+thickness+minx; //controls the rect's x coordinate Message_rect.y = padding+thickness; // controls the rect's y coordinte - Message_rect.w = strlen(string)*size*2/3; // controls the width of the rect + Message_rect.w = strlen(text)*size*2/3; // controls the width of the rect Message_rect.h = size; // controls the height of the rect //pour les contour d'abord SDL_Rect button_rect; button_rect.x = 0; button_rect.y = 0; - button_rect.w = Message_rect.w+2*(padding+thickness); + button_rect.w = Message_rect.w+2*(padding+thickness)+minx; button_rect.h = Message_rect.h+2*(padding+thickness); + SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,button_rect.w,button_rect.h); SDL_SetRenderDrawColor(renderer, border_color.r,border_color.g,border_color.b,0); - SDL_RenderFillRect(renderer, button_rect); + SDL_SetRenderTarget(renderer, texture); + SDL_RenderFillRect(renderer, &button_rect); *sizex = button_rect.w; *sizey = button_rect.h; //pour le background - SDL_Rect button_rect; - button_rect.x = 0; - button_rect.y = 0; - button_rect.w = Message_rect.w+2*padding; + button_rect.x = thickness; + button_rect.y = thickness; + button_rect.w = Message_rect.w+2*padding+minx; button_rect.h = Message_rect.h+2*padding; SDL_SetRenderDrawColor(renderer, background_color.r,background_color.g,background_color.b,0); - SDL_RenderFillRect(renderer, button_rect); + SDL_RenderFillRect(renderer, &button_rect); - SDL_RenderCopy(renderer, texture, NULL, &Message_rect); + SDL_SetRenderDrawColor(renderer, border_color.r,border_color.g,border_color.b,0); + SDL_RenderCopy(renderer, message, NULL, &Message_rect); return texture; } diff --git a/Pontu/test/compile.sh b/Pontu/test/compile.sh index 13bf23b..c0d4902 100755 --- a/Pontu/test/compile.sh +++ b/Pontu/test/compile.sh @@ -1,3 +1,3 @@ #!/bin/sh -gcc -g testButton.c ../src/engine/Button.c -I ../include $(sdl2-config --cflags --libs) +gcc -g testButton.c ../src/engine/Button.c ../src/engine/TextureLoader.c -I ../include $(sdl2-config --cflags --libs) #-g pour sortir les option de debbugage diff --git a/Pontu/test/testButton.c b/Pontu/test/testButton.c index 44d147b..3220e2f 100644 --- a/Pontu/test/testButton.c +++ b/Pontu/test/testButton.c @@ -1,6 +1,8 @@ #include +#include #include #include "engine/Button.h" +#include "engine/TextureLoader.h" //gcc test.c -I ../include $(sdl2-config --cflags --libs) @@ -9,12 +11,11 @@ void action(P_ButtonArg* arg){ changeButtonTexture(arg->buttonCaller,arg->texture); } -int main(int argc, char const *argv[]) { +int testButtonTextureLoader() { SDL_Window *window = NULL; SDL_Renderer *renderer = NULL; int statut = EXIT_FAILURE; - if(0 != SDL_Init(SDL_INIT_VIDEO)) { fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError()); @@ -48,12 +49,6 @@ int main(int argc, char const *argv[]) { 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_RenderPresent(renderer); SDL_bool quit = SDL_FALSE; @@ -71,22 +66,40 @@ int main(int argc, char const *argv[]) { SDL_SetRenderTarget(renderer, blueTexture); SDL_RenderFillRect(renderer, &buttonRect);*/ + if(TTF_Init()==-1) { + printf("TTF_Init: %s\n", TTF_GetError()); + exit(2); + } + + // load font.ttf at size 16 into font + TTF_Font *retroFont; + int fontSize = 100; + int size = fontSize*100/88; + retroFont=TTF_OpenFont("rsrc/font/retro/retro.TTF", size); + if(!retroFont) { + printf("TTF_OpenFont: %s\n", TTF_GetError()); + // handle error + } + int sizex,sizey; - SDL_Color background = { 85, 39, 163, 255}; - SDL_Color outline = { 134, 64, 255, 255}; - SDL_Texture* buttonTexture = createGenericButtonTexture("Bouton",NULL,100,outline,background,&sizex,&sizey,renderer); - SDL_Texture* blueTexture = createGenericButtonTexture("Bouton",NULL,100,background, outline,&sizex,&sizey,renderer); - P_Button button = createButton(buttonTexture,blueTexture ,5, 5, sizex, sizey, &action); + SDL_Color outline = { 85, 39, 163, 255}; + SDL_Color background = { 134, 64, 255, 255}; + SDL_Texture* buttonTexture = createGenericButtonTexture("Test",retroFont,fontSize,outline,background,3, 3,&sizex,&sizey,renderer); + SDL_Texture* blueTexture = createGenericButtonTexture("Test",retroFont,fontSize,background,outline,3, 3,&sizex,&sizey,renderer); + P_Button button = createButton(buttonTexture,blueTexture ,20, 20, sizex, sizey, &action); P_ButtonArg arg; arg.buttonCaller = &button; SDL_Texture* violetTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,20,20); SDL_SetRenderDrawColor(renderer, 150,75,200,255); SDL_SetRenderTarget(renderer, violetTexture); - SDL_RenderFillRect(renderer, &buttonRect); + //SDL_RenderFillRect(renderer, &buttonRect); + SDL_SetRenderDrawColor(renderer,0,0,0,0); SDL_SetRenderTarget(renderer, NULL); + + SDL_RenderClear(renderer); arg.texture = violetTexture; while(!quit) { diff --git a/Pontu/test/testButtonTextureLoader.c b/Pontu/test/testButtonTextureLoader.c index 112bf1b..41c8257 100644 --- a/Pontu/test/testButtonTextureLoader.c +++ b/Pontu/test/testButtonTextureLoader.c @@ -8,7 +8,6 @@ void testButtonTextureLoader() { SDL_Renderer *renderer = NULL; int statut = EXIT_FAILURE; - if(0 != SDL_Init(SDL_INIT_VIDEO)) { fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError()); @@ -42,12 +41,6 @@ void testButtonTextureLoader() { 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_RenderPresent(renderer); SDL_bool quit = SDL_FALSE;