Settings with label and qui button, no interactivity

master
Mathis RIBEMONT 3 years ago
parent 809fae5a0a
commit bb2cce8e3a

@ -61,7 +61,7 @@ int main(int argc, char *argv[]) {
switch (generalState) {
case GS_MainMenu:
mainMenu(renderer,window,&generalState, fontHandler, audioHandler);
playSFX(SFX_validate_sound, audioHandler);
playSFX(SFX_validate_sound, &audioHandler);
break;
case GS_GameCreationMenu:{
int windowW;

@ -17,7 +17,7 @@
* \enum InputType
* \brief Different types for input
*/
typedef enum {InputType_None, InputType_ClickGame, InputType_MoveGame, InputType_ActivateUI, InputType_Window_Resize, InputType_ButtonChanged} InputType;
typedef enum {InputType_None, InputType_ClickGame, InputType_MoveGame, InputType_ActivateUI, InputType_Window_Resize, InputType_Window_Close, InputType_ButtonChanged} InputType;
/**
* \enum UIAction
@ -94,6 +94,8 @@ InputElement createInputElementMoveBoard(const Coord start, const Coord end);
*/
InputElement createInputElementResizeWindow();
InputElement createInputElementCloseWindow();
InputElement createInputElementButtonClicked(P_Button* button, const ButtonEvent event);

@ -38,3 +38,8 @@ InputElement createInputElementButtonClicked(P_Button* button, const ButtonEvent
};
return i;
}
InputElement createInputElementCloseWindow(){
InputElement i = {.type = InputType_Window_Close};
return i;
}

@ -76,6 +76,9 @@ InputElement proccessInput(InputProcessor *inputProcessor)
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
return createInputElementResizeWindow(event.window.data1, event.window.data2);
}
if (event.window.event == SDL_WINDOWEVENT_CLOSE) {
return createInputElementCloseWindow();
}
break;
case SDL_TEXTINPUT:
addStringToInputTextValueAtCursor(inputProcessor->selectedTextInput, event.text.text);

@ -125,4 +125,3 @@ void clearTextLabel(SDL_Renderer* renderer, const TextLabel* label, SDL_Color co
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a);
SDL_RenderFillRect(renderer, &label->textZone);
}

@ -10,6 +10,12 @@
enum {NEWGAME, OPTION, QUIT};
struct optionArgs{
SDL_Window* parent;
AudioHandler* ah;
FontHandler* fh;
};
void quit(P_Button* buttonCaller) {
*((GeneralState*)(buttonCaller->arg)) = GS_Quit;
}
@ -18,6 +24,11 @@ void generalStateToNewGame(P_Button* buttonCaller) {
*((GeneralState*)(buttonCaller->arg)) = GS_GameCreationMenu;
}
void settingsViewAction(P_Button* buttonCaller){
struct optionArgs* argStruct = (struct optionArgs*)buttonCaller->arg;
printf("Menu d'option\n");
settingsView(argStruct->parent, argStruct->ah, argStruct->fh);
}
P_Button* createMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, unsigned int* nb, const SDL_Rect* windowSize, GeneralState* generalState)
{
P_Button* buttons = (P_Button*)malloc(sizeof(P_Button)*3);
@ -43,8 +54,8 @@ P_Button* createMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, u
buttons[NEWGAME].rect.x = (windowSize->w/2)-(buttons[NEWGAME].rect.w/2);
buttons[NEWGAME].arg = generalState;
buttons[OPTION] = createButton(NULL,NULL,20, buttons[NEWGAME].rect.y+buttons[NEWGAME].rect.h+20, 20, 20, NULL);
buttons[OPTION] = createButton(NULL,NULL,20, buttons[NEWGAME].rect.y+buttons[NEWGAME].rect.h+20, 20, 20, settingsViewAction);
SDL_Texture* optionButtonTexture = createGenericButtonTexture("Options",font,fontSize,darkBlue,lightBlue,5, 10,&(buttons[OPTION].rect.w),&(buttons[OPTION].rect.h),renderer);
SDL_Texture* optionButtonTextureHover = createGenericButtonTexture("Options",font,fontSize,lightBlue,darkBlue,5, 10,NULL,NULL,renderer);
@ -52,8 +63,8 @@ P_Button* createMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, u
buttons[OPTION].hoverTexture = optionButtonTextureHover;
buttons[OPTION].rect.x = (windowSize->w/2)-(buttons[OPTION].rect.w/2);
buttons[QUIT] = createButton(NULL,NULL,20, buttons[OPTION].rect.y+buttons[OPTION].rect.h+20, 20, 20, quit);
buttons[QUIT] = createButton(NULL,NULL,20, buttons[OPTION].rect.y+buttons[OPTION].rect.h+20, 20, 20, quit);
SDL_Texture* quitButtonTexture = createGenericButtonTexture("Quitter",font,fontSize,darkBlue,lightBlue,5, 10,&(buttons[QUIT].rect.w),&(buttons[QUIT].rect.h),renderer);
SDL_Texture* quitButtonTextureHover = createGenericButtonTexture("Quitter",font,fontSize,lightBlue,darkBlue,5, 10,NULL,NULL,renderer);
@ -66,6 +77,7 @@ P_Button* createMainMenu(SDL_Renderer* renderer,const FontHandler fontHandler, u
}
int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * generalState,FontHandler fontHandler, AudioHandler audioHandler){
// passer les handler par pointeur
int statut = EXIT_FAILURE;
@ -88,6 +100,10 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general
fprintf(stderr, "Le menu principale ne s'est pas instancié correctement\n");
return statut;
}
struct optionArgs optionArgs = {.parent = window, .ah = &audioHandler, .fh = &fontHandler};
buttons[OPTION].arg = &optionArgs;
SDL_Event event;
drawButtonOnRenderer(renderer,&(buttons[NEWGAME]));
@ -117,7 +133,7 @@ int mainMenu(SDL_Renderer * renderer,SDL_Window * window, GeneralState * general
switch (isButtonInteractWithCursor(&(buttons[i]),event.motion.x,event.motion.y)) {
case 1:
drawButtonOnRenderer(renderer,&(buttons[i]));
playSFX(SFX_menu_sound_effect, audioHandler);
playSFX(SFX_menu_sound_effect, &audioHandler);
drawSomething = true;
break;
case 2:

@ -1,111 +1,64 @@
#include "view/Settings.h"
#define NB_TEXT_LABEL 7
#define NB_TEXTURES 2
#define NB_BUTTONS 7
void onClick(P_Button* buttonCaller) {
printf("j'ai perdu %d\n",buttonCaller->rect.x);
}
#include "engine/InputProcessor.h"
#include "engine/InputElement.h"
#include "engine/arrayTextLabel.h"
#include <SDL2/SDL.h>
// Global functions
RetValues drawSettingsView(SDL_Renderer* renderer, AudioHandler* ah, const FontHandler* fh) {
RetValues retValues = { .arr_textLabel = NULL};
struct array_P_Button arr_buttons = array_P_Button_Create();
SDL_Point title_point = {150,25};
SDL_Point masterVolTitle_point = {150,75};
SDL_Color blue = {52,158,235,255};
SDL_Color black = {0,0,0,255};
int hMinus, wMinus, hPlus, wPlus, wBack, hBack;
TextLabel* arr_textLabel;
if (NULL == (arr_textLabel = (TextLabel*)malloc(NB_TEXT_LABEL*sizeof(TextLabel)))) {
fprintf(stderr, "Malloc error with TextLabel\n");
return retValues;
}
SDL_Texture** arr_textures;
if (NULL == (arr_textures = (SDL_Texture**)malloc(NB_TEXTURES*sizeof(SDL_Texture*)))) {
fprintf(stderr, "Malloc error with Textures\n");
return retValues;
}
char tmp_str[4];
array_P_Button_Reserve(&arr_buttons, NB_BUTTONS);
arr_textLabel[0] = createTextLabel("Parametres", &title_point, 2.0, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
enum nameTextLabel {TITRE, MUSIC_VOLUME, SFX_VOLUME, MASTER_VOLUME};
arr_textures[0] = createGenericButtonTexture("-",fh->fonts[FONT_retro],32,black,blue, 0, 5, &wMinus, &hMinus, renderer);
arr_textures[1] = createGenericButtonTexture("+",fh->fonts[FONT_retro],32,black,blue, 0, 5, &wPlus, &hPlus, renderer);
arr_textures[2] = createGenericButtonTexture("Retour", fh->fonts[FONT_retro],32,black,blue,0,20,&wBack,&hBack,renderer);
void createSettingsView(SDL_Window * window, SDL_Renderer* renderer, AudioHandler* ah, const FontHandler* fh, const InputProcessor * inputProcessor, struct array_TextLabel * arrayTextLabel, SDL_Texture * numberTexture) {
TTF_Font* font = fh->fonts[FONT_PublicPixel];
SDL_Color white = {.r = 255, .g = 255, .b = 255, .a = 255};
int windowWidth, windowHeight;
SDL_GetWindowSize(window, &windowWidth,&windowHeight);
SDL_Color lightBlue = {.r = 0,.g = 195,.b = 255,.a = 0}; //0, 195, 255
SDL_Color darkBlue = {.r = 0,.g = 123,.b = 161,.a = 0}; //0, 123, 161
/* Master volume */
// Title
arr_textLabel[1] = createTextLabel("Volume principal", &masterVolTitle_point, 1.25, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
// - button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[0], NULL, 0, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wMinus, hMinus, onClick));
//titre;
SDL_Point titre_point = {.x = windowWidth/2, .y = 30};
TextLabel titre = createTextLabel("Options", &titre_point, 4,&white, font, renderer, POSX_CENTER, POSY_CENTER);
array_TextLabel_AddElement(arrayTextLabel, titre);
// + button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[1], NULL, 270, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wPlus, hPlus, onClick));
// Current value
sprintf(tmp_str, "%d", ah->masterVol);
arr_textLabel[2] = createTextLabel(tmp_str, &((SDL_Point) {150, arr_buttons.elems[1].rect.y+arr_buttons.elems[1].rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
/* Music volume */
// Title
arr_textLabel[3] = createTextLabel("Volume musique", &((SDL_Point) {150, arr_buttons.elems[1].rect.y+arr_buttons.elems[1].rect.h+20}), 1.5, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
int padding_Label_Left = 20;
//Music volume label
SDL_Point musicVolumeLabelPoint = {.x = padding_Label_Left, .y = titre.textZone.h + 50 + titre.textZone.y};
TextLabel musicVolumeLabel = createTextLabel("Music Volume", &musicVolumeLabelPoint, 1.5,&white, font, renderer, POSX_LEFT, POSY_CENTER);
array_TextLabel_AddElement(arrayTextLabel, musicVolumeLabel);
// - button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[0], NULL, 0, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wMinus, hMinus, onClick));
// + button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[1], NULL, 270, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wPlus, hPlus, onClick));
//SFX volume label
SDL_Point sfxVolumeLabelPoint = {.x = padding_Label_Left, .y = musicVolumeLabel.textZone.h + 50 + musicVolumeLabel.textZone.y};
TextLabel sfxVolumeLabel = createTextLabel("Effect Volume", &sfxVolumeLabelPoint, 1.5,&white, font, renderer, POSX_LEFT, POSY_CENTER);
array_TextLabel_AddElement(arrayTextLabel, sfxVolumeLabel);
// Current value
sprintf(tmp_str, "%d", ah->volMusic);
arr_textLabel[4] = createTextLabel(tmp_str, &((SDL_Point) {150, arr_buttons.elems[3].rect.y+arr_buttons.elems[3].rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
/* SFX Volume */
// Title
arr_textLabel[5] = createTextLabel("Volume sons", &((SDL_Point) {150, arr_buttons.elems[3].rect.y+arr_buttons.elems[3].rect.h + 20}), 1.5, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
//SFX volume label
SDL_Point masterVolumeLabelPoint = {.x = padding_Label_Left, .y = sfxVolumeLabel.textZone.h + 50 + sfxVolumeLabel.textZone.y};
TextLabel masterVolumeLabel = createTextLabel("Master Volume", &masterVolumeLabelPoint, 1.5,&white, font, renderer, POSX_LEFT, POSY_CENTER);
array_TextLabel_AddElement(arrayTextLabel, masterVolumeLabel);
// - button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[0], NULL, 0, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wMinus, hMinus, onClick));
// + button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[1], NULL, 270, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wPlus, hPlus, onClick));
// Current value
sprintf(tmp_str, "%d", ah->volSFX);
arr_textLabel[6] = createTextLabel(tmp_str, &((SDL_Point) {150, arr_buttons.elems[5].rect.y+arr_buttons.elems[5].rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
/* Return button */
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[2], NULL, 150 - wBack/2, arr_buttons.elems[5].rect.y+arr_buttons.elems[5].rect.h + 20, wBack, hBack, onClick));
retValues.arr_buttons = arr_buttons;
retValues.arr_textLabel = arr_textLabel;
return retValues;
//quit button
P_Button quitButton = createButton(NULL,NULL,0, 0, 20, 20, NULL);
quitButton.texture = createGenericButtonTexture("Quitter",font,50,darkBlue,lightBlue,5, 10,&(quitButton.rect.w),&(quitButton.rect.h),renderer);
quitButton.hoverTexture = createGenericButtonTexture("Quitter",font,50,lightBlue,darkBlue,5, 10,NULL,NULL,renderer);
quitButton.rect.y = windowHeight - quitButton.rect.h - 50;
quitButton.rect.x = windowWidth/2 - quitButton.rect.w/2;
array_P_Button_AddElement(&inputProcessor->tabButton,quitButton);
}
void settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) {
SDL_Window* window;
SDL_Renderer* renderer;
SDL_Color white = {255,255,255,255};
SDL_Color blue = {52,158,235,255};
SDL_Rect title_area = {0,0,300,50};
RetValues retValues;
struct array_P_Button array_buttons;
bool stayInLoop = true;
SDL_Event event;
if (0 != SDL_CreateWindowAndRenderer(300,600,SDL_WINDOW_SHOWN, &window, &renderer)) {
if (0 != SDL_CreateWindowAndRenderer(500,600,SDL_WINDOW_SHOWN, &window, &renderer)) {
fprintf(stderr,"Error when trying to create window or renderer: %s\n", SDL_GetError());
return;
}
@ -114,28 +67,34 @@ void settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) {
fprintf(stderr,"Warning: Can't set window as modal: %s\n",SDL_GetError());
}
SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a);
SDL_Color bg = {55, 120, 175, 255};
SDL_SetRenderDrawColor(renderer, bg.r,bg.g,bg.b,bg.a);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a);
SDL_RenderFillRect(renderer,&title_area);
retValues = drawSettingsView(renderer,ah,fh);
InputProcessor inputProcessor = createInputProcessor();
struct array_TextLabel arrayTextLabel = array_TextLabel_Create();
SDL_Texture * numberTexture[11];
createSettingsView(window, renderer, ah, fh, &inputProcessor, &arrayTextLabel, numberTexture);
for (size_t i = 0; i < retValues.arr_buttons.size; i++) {
drawButtonOnRenderer(renderer, &(retValues.arr_buttons.elems[i]));
}
for (size_t i = 0; i < NB_TEXT_LABEL; i++) {
drawTextLabel(renderer, &retValues.arr_textLabel[i]);
}
//Title position and drawing
drawTextLabel(renderer,&arrayTextLabel.elems[TITRE]);
drawTextLabel(renderer,&arrayTextLabel.elems[MUSIC_VOLUME]);
drawTextLabel(renderer,&arrayTextLabel.elems[SFX_VOLUME]);
drawTextLabel(renderer,&arrayTextLabel.elems[MASTER_VOLUME]);
drawButtonOnRenderer(renderer,&inputProcessor.tabButton.elems[0]);
while (stayInLoop) {
SDL_Event event;
bool etat = true;
while (etat) {
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_WINDOWEVENT:
switch (event.window.event) {
case SDL_WINDOWEVENT_CLOSE:
stayInLoop = false;
etat = false;
printf("Quit\n");
fflush(stdout);
break;
@ -143,20 +102,6 @@ void settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) {
break;
}
break;
case SDL_MOUSEBUTTONUP:
printf("MOUSEBUTTONUP\n");
for (int i = 0; i < NB_BUTTONS; i++) {
printf("%d\n",i);
if (isButtonInteractWithCursor(&(retValues.arr_buttons.elems[i]),event.button.x,event.button.y)) {
printf("isHover\n");
retValues.arr_buttons.elems[i].onClick(&(retValues.arr_buttons.elems[i]));
fflush(stdout);
break;
}
}
break;
default:
break;
}
}
@ -164,5 +109,8 @@ void settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) {
SDL_RenderPresent(renderer);
SDL_Delay(20);
}
}
quit:
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
}

@ -0,0 +1,168 @@
#include "view/Settings.h"
#define NB_TEXT_LABEL 7
#define NB_TEXTURES 2
#define NB_BUTTONS 7
void onClick(P_Button* buttonCaller) {
printf("j'ai perdu %d\n",buttonCaller->rect.x);
}
// Global functions
RetValues drawSettingsView(SDL_Renderer* renderer, AudioHandler* ah, const FontHandler* fh) {
RetValues retValues = { .arr_textLabel = NULL};
struct array_P_Button arr_buttons = array_P_Button_Create();
SDL_Point title_point = {150,25};
SDL_Point masterVolTitle_point = {150,75};
SDL_Color blue = {52,158,235,255};
SDL_Color black = {0,0,0,255};
int hMinus, wMinus, hPlus, wPlus, wBack, hBack;
TextLabel* arr_textLabel;
if (NULL == (arr_textLabel = (TextLabel*)malloc(NB_TEXT_LABEL*sizeof(TextLabel)))) {
fprintf(stderr, "Malloc error with TextLabel\n");
return retValues;
}
SDL_Texture** arr_textures;
if (NULL == (arr_textures = (SDL_Texture**)malloc(NB_TEXTURES*sizeof(SDL_Texture*)))) {
fprintf(stderr, "Malloc error with Textures\n");
return retValues;
}
char tmp_str[4];
array_P_Button_Reserve(&arr_buttons, NB_BUTTONS);
arr_textLabel[0] = createTextLabel("Parametres", &title_point, 2.0, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
arr_textures[0] = createGenericButtonTexture("-",fh->fonts[FONT_retro],32,black,blue, 0, 5, &wMinus, &hMinus, renderer);
arr_textures[1] = createGenericButtonTexture("+",fh->fonts[FONT_retro],32,black,blue, 0, 5, &wPlus, &hPlus, renderer);
arr_textures[2] = createGenericButtonTexture("Retour", fh->fonts[FONT_retro],32,black,blue,0,20,&wBack,&hBack,renderer);
/* Master volume */
// Title
arr_textLabel[1] = createTextLabel("Volume principal", &masterVolTitle_point, 1.25, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
// - button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[0], NULL, 0, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wMinus, hMinus, onClick));
// + button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[1], NULL, 270, arr_textLabel[1].textZone.y+arr_textLabel[1].textZone.h+20, wPlus, hPlus, onClick));
// Current value
sprintf(tmp_str, "%d", ah->masterVol);
arr_textLabel[2] = createTextLabel(tmp_str, &((SDL_Point) {150, arr_buttons.elems[1].rect.y+arr_buttons.elems[1].rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
/* Music volume */
// Title
arr_textLabel[3] = createTextLabel("Volume musique", &((SDL_Point) {150, arr_buttons.elems[1].rect.y+arr_buttons.elems[1].rect.h+20}), 1.5, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
// - button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[0], NULL, 0, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wMinus, hMinus, onClick));
// + button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[1], NULL, 270, arr_textLabel[3].textZone.y+arr_textLabel[3].textZone.h+20, wPlus, hPlus, onClick));
// Current value
sprintf(tmp_str, "%d", ah->volMusic);
arr_textLabel[4] = createTextLabel(tmp_str, &((SDL_Point) {150, arr_buttons.elems[3].rect.y+arr_buttons.elems[3].rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
/* SFX Volume */
// Title
arr_textLabel[5] = createTextLabel("Volume sons", &((SDL_Point) {150, arr_buttons.elems[3].rect.y+arr_buttons.elems[3].rect.h + 20}), 1.5, &black,
fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
// - button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[0], NULL, 0, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wMinus, hMinus, onClick));
// + button
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[1], NULL, 270, arr_textLabel[5].textZone.y+arr_textLabel[5].textZone.h+20, wPlus, hPlus, onClick));
// Current value
sprintf(tmp_str, "%d", ah->volSFX);
arr_textLabel[6] = createTextLabel(tmp_str, &((SDL_Point) {150, arr_buttons.elems[5].rect.y+arr_buttons.elems[5].rect.h/2}), 1.5, &black, fh->fonts[FONT_retro], renderer, POSX_CENTER, POSY_CENTER);
/* Return button */
array_P_Button_AddElement(&arr_buttons, createButton(arr_textures[2], NULL, 150 - wBack/2, arr_buttons.elems[5].rect.y+arr_buttons.elems[5].rect.h + 20, wBack, hBack, onClick));
retValues.arr_buttons = arr_buttons;
retValues.arr_textLabel = arr_textLabel;
return retValues;
}
void settingsView(SDL_Window* parent, AudioHandler* ah, const FontHandler* fh) {
SDL_Window* window;
SDL_Renderer* renderer;
SDL_Color white = {255,255,255,255};
SDL_Color blue = {52,158,235,255};
SDL_Rect title_area = {0,0,300,50};
RetValues retValues;
struct array_P_Button array_buttons;
bool stayInLoop = true;
SDL_Event event;
if (0 != SDL_CreateWindowAndRenderer(300,600,SDL_WINDOW_SHOWN, &window, &renderer)) {
fprintf(stderr,"Error when trying to create window or renderer: %s\n", SDL_GetError());
return;
}
if (0!=SDL_SetWindowModalFor(window, parent)) {
fprintf(stderr,"Warning: Can't set window as modal: %s\n",SDL_GetError());
}
SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a);
SDL_RenderFillRect(renderer,&title_area);
retValues = drawSettingsView(renderer,ah,fh);
for (size_t i = 0; i < retValues.arr_buttons.size; i++) {
drawButtonOnRenderer(renderer, &(retValues.arr_buttons.elems[i]));
}
for (size_t i = 0; i < NB_TEXT_LABEL; i++) {
drawTextLabel(renderer, &retValues.arr_textLabel[i]);
}
while (stayInLoop) {
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_WINDOWEVENT:
switch (event.window.event) {
case SDL_WINDOWEVENT_CLOSE:
stayInLoop = false;
printf("Quit\n");
fflush(stdout);
break;
default:
break;
}
break;
case SDL_MOUSEBUTTONUP:
printf("MOUSEBUTTONUP\n");
for (int i = 0; i < NB_BUTTONS; i++) {
printf("%d\n",i);
if (isButtonInteractWithCursor(&(retValues.arr_buttons.elems[i]),event.button.x,event.button.y)) {
printf("isHover\n");
retValues.arr_buttons.elems[i].onClick(&(retValues.arr_buttons.elems[i]));
fflush(stdout);
break;
}
}
break;
default:
break;
}
}
SDL_RenderPresent(renderer);
SDL_Delay(20);
}
}
Loading…
Cancel
Save