From 9704508e265a1c7ae93bafd75a4d4e9d860ad6d2 Mon Sep 17 00:00:00 2001 From: HorlogeSkynet <sam.forestier@gmail.com> Date: Mon, 30 Jan 2017 23:35:55 +0100 Subject: [PATCH] =?UTF-8?q?Fix'=20glitch=20affichage=20menu=20Optimisation?= =?UTF-8?q?=20m=C3=A9moire=20Fin=20du=20mode=20verbeux=20pour=20les=20mode?= =?UTF-8?q?s=20de=20preview=20Fix'=20d'un=20futur=20bug=20Optimisation=20f?= =?UTF-8?q?onction=20d'attente=20Ajout=20des=20confirmations=20de=20fermet?= =?UTF-8?q?ure=20de=20programme=20et=20retour=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controleur/controleur.c | 27 +++--- Controleur/menu.c | 4 +- Controleur/waiting.c | 207 ++++++++++++++++++++++------------------ Vue/affichage.c | 2 +- 4 files changed, 131 insertions(+), 109 deletions(-) diff --git a/Controleur/controleur.c b/Controleur/controleur.c index 3cb7c3f..1e46ec5 100644 --- a/Controleur/controleur.c +++ b/Controleur/controleur.c @@ -117,7 +117,10 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m Menu menu; initialiserMenu(&menu); - updateAndDrawMenu(renderTexture, &menu, mode, (mode != MODE_GLOBAL ? false : true), true, NO_TOOL); + if(mode == MODE_PBP_AUTOMATIC || mode == MODE_PBP_MANUAL) + { + updateAndDrawMenu(renderTexture, &menu, mode, false, true, NO_TOOL); + } Point **ptsAffiches = affichageLogs(window, renderTexture, tabPoints, nbElements, &nbPointsAffiches, nbPointAgglosMin, tabPointeursCercles, agglos, nbAgglos, tabPointeursCerclesAgglos, &nbAgglosAffiches, allPoint, carte, mode, &menu); if(ptsAffiches == NULL) @@ -134,9 +137,15 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m updateAndDrawMenu(renderTexture, &menu, mode, true, true, NO_TOOL); + freeSprite(&renderSprite); + renderSprite = loadSpriteFromRenderTexture(renderTexture); + displayBackgroundSprite(window, renderSprite); + carre = waitingOnMapEvent(window, &event, renderTexture, renderSprite, carte, nbPointsAffiches, ptsAffiches, tabPointeursCercles, nbAgglos, tabPointeursCerclesAgglos, agglos, nbElements, tabPoints, tabDatesConverties, font, &action, mode, &menu, ¤tTool); detruireMenu(&menu); + + // Nous pouvons remettre ce sprite à `NULL` car il a été (normalement) correctement libéré dans la fonction d'attente ci-dessus ! renderSprite = NULL; free(ptsAffiches); ptsAffiches = NULL; @@ -179,6 +188,8 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m if(action == ACTION_ZOOM_ZONE) { + /* ZOOM ZONE (CLIC) */ + // On convertit les pixels retournés en coordonnées géographiques... conversionRec(&carre, &carte->pointHautGauche, &carte->pointBasDroite, &carte->pointCentral, carte->echelle); @@ -218,7 +229,6 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m case ACTION_ZOOM_NEXT: case ACTION_ZOOM_PREV: - // L'utilisateur a demandé d'afficher la vue précédente / suivante. Donc on commence par empiler la vue actuelle dans la pile des suivantes / précédentes. if(!empilerPileCartes((action == ACTION_ZOOM_NEXT ? &previous : &next), carte)) { @@ -254,17 +264,14 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m if(mode == MODE_GLOBAL) { mode = MODE_PREVIEW; - printf("Mode prévisualisation\n"); } else if(mode == MODE_PREVIEW) { mode = MODE_PREVIEW_SUGG; - printf("Mode prévisualisation suggéré\n"); } else if(mode == MODE_PREVIEW_SUGG) { mode = MODE_GLOBAL; - printf("Mode normal\n"); } break; @@ -288,14 +295,8 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m break; case ACTION_TOGGLEAGGLO: - if(allPoint) - { - allPoint = false; - } - else - { - allPoint = true; - } + afficherSablier(window, renderTexture, &renderSprite); + allPoint = !allPoint; break; default: diff --git a/Controleur/menu.c b/Controleur/menu.c index 12b9e26..4b336c3 100644 --- a/Controleur/menu.c +++ b/Controleur/menu.c @@ -119,8 +119,8 @@ void chargerMenuAffichageLog(Menu *const menu, const Mode mode, const bool displ ajouterEntreeMenu(menu, loadButtonMenu(TOOL_ZOOMNEXT, "VUE SUIVANTE ", "Vue/Ressources/Icones/next.png")); ajouterEntreeMenu(menu, loadButtonMenu(TOOL_ZOOMZONE, "ZOOMER ZONE ", (currentTool == TOOL_ZOOMZONE ? "Vue/Ressources/Icones/zoom-in_selected.png" : "Vue/Ressources/Icones/zoom-in.png"))); ajouterEntreeMenu(menu, loadButtonMenu(TOOL_CHANGEMAP, "CHANGER FOND ", "Vue/Ressources/Icones/layers.png")); - ajouterEntreeMenu(menu, loadButtonMenu(TOOL_SELECTPOINTS, "SELECTIONNE ZONE", (currentTool == TOOL_ZOOMZONE ? "Vue/Ressources/Icones/flag_selected.png" : "Vue/Ressources/Icones/flag.png"))); - ajouterEntreeMenu(menu, loadButtonMenu(TOOL_DESELECTPOINTS, "DESELECT. ZONE ", (currentTool == TOOL_ZOOMZONE ? "Vue/Ressources/Icones/flag_barre_selected.png" : "Vue/Ressources/Icones/flag_barre.png"))); + ajouterEntreeMenu(menu, loadButtonMenu(TOOL_SELECTPOINTS, "SELECTIONNE ZONE", (currentTool == TOOL_SELECTPOINTS ? "Vue/Ressources/Icones/flag_selected.png" : "Vue/Ressources/Icones/flag.png"))); + ajouterEntreeMenu(menu, loadButtonMenu(TOOL_DESELECTPOINTS, "DESELECT. ZONE ", (currentTool == TOOL_DESELECTPOINTS ? "Vue/Ressources/Icones/flag_barre_selected.png" : "Vue/Ressources/Icones/flag_barre.png"))); ajouterEntreeMenu(menu, loadButtonMenu(TOOL_PREVIEW, "PREVISUALISATION", (mode == MODE_GLOBAL ? "Vue/Ressources/Icones/hide_mode1.png" : (mode == MODE_PREVIEW ? "Vue/Ressources/Icones/hide_mode2.png" : "Vue/Ressources/Icones/hide_mode3.png")))); ajouterEntreeMenu(menu, loadButtonMenu(TOOL_SAVE, "SAUVEGARDER ", "Vue/Ressources/Icones/download.png")); ajouterEntreeMenu(menu, loadButtonMenu(TOOL_CENTERPOSITION, "RECENTRER ", "Vue/Ressources/Icones/target.png")); diff --git a/Controleur/waiting.c b/Controleur/waiting.c index f32d8e9..d58aee3 100644 --- a/Controleur/waiting.c +++ b/Controleur/waiting.c @@ -133,106 +133,126 @@ Rectangle waitingOnMapEvent(sfRenderWindow *const window, sfEvent *const event, break; } - else if(event->type == sfEvtMouseButtonPressed && event->mouseButton.x > MAPSIZE) + else if(event->type == sfEvtMouseButtonPressed && inWindow) { - // Dans quasiment tous les cas, il faudra sortir de la boucle englobante... - bool needToBreakTheWhile = true; - - switch(whichTool(event, menu)) + if(event->mouseButton.x > MAPSIZE) { - case TOOL_EXIT: - exit(EXIT_SUCCESS); + // Dans quasiment tous les cas, il faudra sortir de la boucle englobante... + bool needToBreakTheWhile = true; - case TOOL_BACKTOHOME: - *action = ACTION_QUIT; - break; - - case TOOL_CHANGEMAP: - *action = ACTION_CHANGE_MAP_TYPE; - break; - - case TOOL_CENTERPOSITION: - *action = ACTION_CENTERPOSITION; - break; - - case TOOL_ZOOMZONE: - needToBreakTheWhile = false; - *currentTool = (*currentTool == TOOL_ZOOMZONE) ? NO_TOOL : TOOL_ZOOMZONE; - break; - - case TOOL_ZOOMPREV: - *action = ACTION_ZOOM_PREV; - break; - - case TOOL_ZOOMNEXT: - *action = ACTION_ZOOM_NEXT; - break; - - case TOOL_SELECTPOINTS: - needToBreakTheWhile = false; - *currentTool = (*currentTool == TOOL_SELECTPOINTS) ? NO_TOOL : TOOL_SELECTPOINTS; - break; - case TOOL_DESELECTPOINTS: - needToBreakTheWhile = false; - *currentTool = (*currentTool == TOOL_DESELECTPOINTS) ? NO_TOOL : TOOL_DESELECTPOINTS; - break; - case TOOL_PREVIEW: - *action = ACTION_CHANGE_VISUALISATION; - break; - - case TOOL_SAVE: - needToBreakTheWhile = false; - if(mode == MODE_PREVIEW) - { - suppressionAndVerbosity(window, renderSprite, tabPoint, nbPoints, agglos, nbAgglos); - } - break; - - case TOOL_REPEAT: - *action = ACTION_REPEAT; - break; - - case TOOL_TOGGLEAGGLO: - *action = ACTION_TOGGLEAGGLO; - break; - - case NO_TOOL: - default: - needToBreakTheWhile = false; - break; - } - - if(needToBreakTheWhile) - { - break; - } - } - - else if(sfMouse_isButtonPressed(sfMouseLeft) && inWindow) - { - if(*currentTool == TOOL_ZOOMZONE && *action == ACTION_ZOOMABLE) - { - Rectangle carre = selectionRectangle(window, event, renderSprite, true); - - // Si l'utilisateur a réellement sélectionné une zone... - if(carre.positionHG.x != 0.0 && carre.positionHG.y != 0.0 && carre.positionBD.x != 0.0 && carre.positionBD.y != 0.0) + switch(whichTool(event, menu)) { - *action = ACTION_ZOOM_ZONE; - sfTexture_destroy(originalTexture); - return carre; + case TOOL_EXIT: + if(questionBox(window, renderSprite, "Êtes-vous vraiment sûr de vouloir quitter le logiciel ?")) + { + exit(EXIT_SUCCESS); + } + else + { + needToBreakTheWhile = false; + } + break; + + + case TOOL_BACKTOHOME: + if(questionBox(window, renderSprite, "Êtes-vous vraiment sûr de vouloir quitter cette vue ?")) + { + *action = ACTION_QUIT; + } + else + { + needToBreakTheWhile = false; + } + break; + + case TOOL_CHANGEMAP: + *action = ACTION_CHANGE_MAP_TYPE; + break; + + case TOOL_CENTERPOSITION: + *action = ACTION_CENTERPOSITION; + break; + + case TOOL_ZOOMZONE: + needToBreakTheWhile = false; + *currentTool = (*currentTool == TOOL_ZOOMZONE) ? NO_TOOL : TOOL_ZOOMZONE; + break; + + case TOOL_ZOOMPREV: + *action = ACTION_ZOOM_PREV; + break; + + case TOOL_ZOOMNEXT: + *action = ACTION_ZOOM_NEXT; + break; + + case TOOL_SELECTPOINTS: + needToBreakTheWhile = false; + *currentTool = (*currentTool == TOOL_SELECTPOINTS) ? NO_TOOL : TOOL_SELECTPOINTS; + break; + case TOOL_DESELECTPOINTS: + needToBreakTheWhile = false; + *currentTool = (*currentTool == TOOL_DESELECTPOINTS) ? NO_TOOL : TOOL_DESELECTPOINTS; + break; + case TOOL_PREVIEW: + *action = ACTION_CHANGE_VISUALISATION; + break; + + case TOOL_SAVE: + needToBreakTheWhile = false; + if(mode == MODE_PREVIEW) + { + suppressionAndVerbosity(window, renderSprite, tabPoint, nbPoints, agglos, nbAgglos); + } + break; + + case TOOL_REPEAT: + *action = ACTION_REPEAT; + break; + + case TOOL_TOGGLEAGGLO: + *action = ACTION_TOGGLEAGGLO; + break; + + case NO_TOOL: + default: + needToBreakTheWhile = false; + break; + } + + if(needToBreakTheWhile) + { + break; } } - else if(*currentTool == TOOL_SELECTPOINTS && mode != MODE_PREVIEW) + + else { - controleSelectionSuppression(window, event, renderSprite, ptsAffiches, nbPointsAffiches, pointAffiche, agglos, nbAgglos, aggloSelectionne, tabPointeursCercles, tabPointeursCerclesAgglos, true); - *action = ACTION_REFRESH; - break; - } - else if(*currentTool == TOOL_DESELECTPOINTS && mode != MODE_PREVIEW) - { - controleSelectionSuppression(window, event, renderSprite, ptsAffiches, nbPointsAffiches, pointAffiche, agglos, nbAgglos, aggloSelectionne, tabPointeursCercles, tabPointeursCerclesAgglos, false); - *action = ACTION_REFRESH; - break; + if(*currentTool == TOOL_ZOOMZONE && *action == ACTION_ZOOMABLE) + { + Rectangle carre = selectionRectangle(window, event, renderSprite, true); + + // Si l'utilisateur a réellement sélectionné une zone... + if(carre.positionHG.x != 0.0 && carre.positionHG.y != 0.0 && carre.positionBD.x != 0.0 && carre.positionBD.y != 0.0) + { + *action = ACTION_ZOOM_ZONE; + sfTexture_destroy(originalTexture); + sfSprite_destroy(renderSprite); + return carre; + } + } + else if(*currentTool == TOOL_SELECTPOINTS && mode != MODE_PREVIEW) + { + controleSelectionSuppression(window, event, renderSprite, ptsAffiches, nbPointsAffiches, pointAffiche, agglos, nbAgglos, aggloSelectionne, tabPointeursCercles, tabPointeursCerclesAgglos, true); + *action = ACTION_REFRESH; + break; + } + else if(*currentTool == TOOL_DESELECTPOINTS && mode != MODE_PREVIEW) + { + controleSelectionSuppression(window, event, renderSprite, ptsAffiches, nbPointsAffiches, pointAffiche, agglos, nbAgglos, aggloSelectionne, tabPointeursCercles, tabPointeursCerclesAgglos, false); + *action = ACTION_REFRESH; + break; + } } } @@ -263,6 +283,7 @@ Rectangle waitingOnMapEvent(sfRenderWindow *const window, sfEvent *const event, displayBackgroundSprite(window, renderSprite); sfTexture_destroy(originalTexture); + sfSprite_destroy(renderSprite); // On retourne un Rectangle nul, mais c'est la valeur de `action` qui importe le plus ici. return (Rectangle){{0.0, 0.0}, {0.0, 0.0}}; diff --git a/Vue/affichage.c b/Vue/affichage.c index abc96d5..cb04f77 100644 --- a/Vue/affichage.c +++ b/Vue/affichage.c @@ -169,7 +169,7 @@ void dessinerMenu(sfRenderTexture *const renderTexture, const Menu *const menu) Bouton* ajouterBoutonAccueil(const Tool outil, const char *const icone, const sfVector2f *const position) { - const sfVector2f scale = {WIDTH / 4266.666666667, HEIGHT / 4266.666666667}; + const sfVector2f scale = {WIDTH / 4266.7, HEIGHT / 4266.7}; Bouton *bouton = loadButtonMenu(outil, "", icone);