diff --git a/Pontu/CMakeLists.txt b/Pontu/CMakeLists.txt index c2dafbb..70ee688 100644 --- a/Pontu/CMakeLists.txt +++ b/Pontu/CMakeLists.txt @@ -13,7 +13,7 @@ add_executable(Test ${MY_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/entryPoints/test.c list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package(SDL2 REQUIRED) -#find_package(SDL2_ttf REQUIRED) +find_package(SDL2_ttf REQUIRED) #find_package(SDL2_net REQUIRED) find_package(SDL2_image REQUIRED) find_package(SDL2_mixer REQUIRED) @@ -40,3 +40,5 @@ target_link_libraries(${PROJECT_NAME} SDL2::Image) target_link_libraries(Test SDL2::Image) target_link_libraries(${PROJECT_NAME} SDL2::Mixer) target_link_libraries(Test SDL2::Mixer) +target_link_libraries(${PROJECT_NAME} SDL2::TTF) +target_link_libraries(Test SDL2::TTF) diff --git a/Pontu/entryPoints/test.c b/Pontu/entryPoints/test.c index 54da9a5..1428c0c 100644 --- a/Pontu/entryPoints/test.c +++ b/Pontu/entryPoints/test.c @@ -1,14 +1,15 @@ //#include "../test/testTextureLoader.c" #include "../test/testAudio.c" +#include "../test/testGenerateurTexture.c" /* This file is meant to be modified (used only to called other tests functions) */ -int main(int argc, char *argv[]) { +int main(/*int argc, char *argv[]*/) { //testTextureLoader(); - testAudio(); + //testAudio(); + testGenerateurTexture(); return 0; } - diff --git a/Pontu/include/engine/TextureLoader.h b/Pontu/include/engine/TextureLoader.h index 9ad7b20..8a06dbb 100644 --- a/Pontu/include/engine/TextureLoader.h +++ b/Pontu/include/engine/TextureLoader.h @@ -1,5 +1,6 @@ #include #include +#include /* * \brief Create a texture with an image @@ -8,3 +9,5 @@ * \return Return texture created on success. Else return NULL and print the error on STDERR. */ SDL_Texture* createTextureFromPath(SDL_Renderer* renderer, char* path); + +SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int* sizex, int* sizey, SDL_bool forHover); diff --git a/Pontu/rsrc/font/retro/about.gif b/Pontu/rsrc/font/retro/about.gif new file mode 100644 index 0000000..26f443e Binary files /dev/null and b/Pontu/rsrc/font/retro/about.gif differ diff --git a/Pontu/rsrc/font/retro/retro.TTF b/Pontu/rsrc/font/retro/retro.TTF new file mode 100644 index 0000000..9c2323b Binary files /dev/null and b/Pontu/rsrc/font/retro/retro.TTF differ diff --git a/Pontu/src/engine/TextureLoader.c b/Pontu/src/engine/TextureLoader.c index 4fea826..dc1a27e 100644 --- a/Pontu/src/engine/TextureLoader.c +++ b/Pontu/src/engine/TextureLoader.c @@ -1,5 +1,8 @@ #include "engine/TextureLoader.h" #include +#include +#include + SDL_Texture* createTextureFromPath(SDL_Renderer* renderer, char* path) { SDL_Texture* texture = NULL; @@ -19,3 +22,30 @@ SDL_Texture* createTextureFromPath(SDL_Renderer* renderer, char* path) } return texture; } + +SDL_Texture* createGenericButtonTexture(char* text, TTF_Font* font, int* sizex, int* sizey, SDL_bool forHover) +{ + // https://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf.html#SEC38 + + SDL_Color background = { 85, 39, 163, 255}; + SDL_Color outline = { 134, 64, 255, 255}; + int thickness = 1; //thickness of the outline; + + SDL_Window *window = NULL; + SDL_Renderer *renderer = NULL; + int statut = EXIT_FAILURE; + + //rendu + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if(renderer == NULL) + { + fprintf(stderr, "Erreur SDL_CreateRenderer: %s\n", SDL_GetError()); + exit(1); + } + + if(0 != SDL_SetRenderDrawColor(renderer, 0,0,0,0)) //choisi la couleur avec laquelle travailler + { + fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError()); + exit(1); + } +} diff --git a/Pontu/test/testButton.c b/Pontu/test/testButton.c index 3feb247..a45e17e 100644 --- a/Pontu/test/testButton.c +++ b/Pontu/test/testButton.c @@ -81,7 +81,6 @@ int main(int argc, char const *argv[]) { SDL_SetRenderTarget(renderer, NULL); arg.texture = violetTexture; - button.hoverTexture = blueTexture; while(!quit) { while(SDL_PollEvent(&event)) diff --git a/Pontu/test/testGenerateurTexture.c b/Pontu/test/testGenerateurTexture.c new file mode 100644 index 0000000..7abff02 --- /dev/null +++ b/Pontu/test/testGenerateurTexture.c @@ -0,0 +1,111 @@ +#include "engine/TextureLoader.h" + +int testGenerateurTexture(){ + 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()); + 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; + } + + 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_RenderPresent(renderer); + + + + if(TTF_Init()==-1) { + printf("TTF_Init: %s\n", TTF_GetError()); + exit(2); + } + + // load font.ttf at size 16 into font + TTF_Font *retroFont; + retroFont=TTF_OpenFont("rsrc/font/retro/retro.TTF", 72); + if(!retroFont) { + printf("TTF_OpenFont: %s\n", TTF_GetError()); + // handle error + } + SDL_Color White = {255, 255, 255}; + SDL_Surface* surfaceMessage = TTF_RenderText_Solid(retroFont, "put your text here", White); + + // now you can convert it into a texture + SDL_Texture* Message = SDL_CreateTextureFromSurface(renderer, surfaceMessage); + + SDL_Rect Message_rect; //create a rect + Message_rect.x = 0; //controls the rect's x coordinate + Message_rect.y = 0; // controls the rect's y coordinte + Message_rect.w = 500; // controls the width of the rect + Message_rect.h = 100; // controls the height of the rect + SDL_RenderCopy(renderer, Message, NULL, &Message_rect); + + SDL_RenderPresent(renderer); + + int minx,maxx,maxy,advance; + if(TTF_GlyphMetrics(retroFont,'put your text here',&minx,&maxx,NULL,NULL,&advance)==-1) + printf("%s\n",TTF_GetError()); + else { + printf("minx : %d\n",minx); + printf("maxx : %d\n",maxx); + printf("advance : %d\n",advance); + printf("Largeur : %d\n",maxx-minx); + } + + SDL_bool quit = SDL_FALSE; + SDL_Event event; + while(!quit) + { + while(SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + quit = SDL_TRUE; + break; + } + } + } + +Quit: + if(renderer != NULL) + SDL_DestroyRenderer(renderer); + if(window != NULL) + SDL_DestroyWindow(window); + SDL_Quit(); + TTF_Quit(); + return statut; +} diff --git a/Pontu/test/testTextureLoader.c b/Pontu/test/testTextureLoader.c index 06596a3..f222f6b 100644 --- a/Pontu/test/testTextureLoader.c +++ b/Pontu/test/testTextureLoader.c @@ -17,6 +17,11 @@ int testTextureLoader(void) { goto Quit; } + if(TTF_Init()==-1) { + printf("TTF_Init: %s\n", TTF_GetError()); + exit(2); + } + //fenetre window = SDL_CreateWindow("FenĂȘtre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640,480, SDL_WINDOW_SHOWN); if(window == NULL) @@ -55,7 +60,7 @@ int testTextureLoader(void) { SDL_bool quit = SDL_FALSE; SDL_Event event; - + picture = createTextureFromPath(renderer, path); while(!quit) { @@ -82,5 +87,6 @@ Quit: if(window != NULL) SDL_DestroyWindow(window); SDL_Quit(); + TTF_Quit(); return statut; }