+function creating generic texture with parameters (font, fontSize, thickness of the borders and padding)

merge-requests/1/merge
Mathis RIBEMONT 4 years ago
parent 1b692a5f17
commit 81fd8a410d

@ -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;
}

@ -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);

@ -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;
}

@ -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

@ -1,6 +1,8 @@
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <stdio.h>
#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)
{

@ -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;

Loading…
Cancel
Save