diff --git a/boutons.c b/boutons.c index 1126978c..a37fe537 100644 --- a/boutons.c +++ b/boutons.c @@ -19,7 +19,7 @@ #include "boutons.h" #include "operatio.h" -// On d‚clare m‚chamment le prototype de Erreur pour ‚viter de faire un +// On déclare méchamment le prototype de Erreur pour éviter de faire un // fichier "main.h": void Erreur(int Code); @@ -67,10 +67,10 @@ void Message_Non_disponible(void) Fermer_fenetre(); - // Puisque cette fonction peut ˆtre appel‚e par plusieurs boutons et qu'on - // ne sait pas lequel c'est, on les d‚senclenche tous. De toutes fa‡ons, ‡a - // ne sert … rien d'essayer d'optimiser ‡a puisque l'utilisateur ne devrait - // pas souvent l'appeler, et en plus y'en a pas beaucoup … d‚senclencher. ;) + // Puisque cette fonction peut être appelée par plusieurs boutons et qu'on + // ne sait pas lequel c'est, on les désenclenche tous. De toutes façons, ça + // ne sert à rien d'essayer d'optimiser ça puisque l'utilisateur ne devrait + // pas souvent l'appeler, et en plus y'en a pas beaucoup à désenclencher. ;) Desenclencher_bouton(BOUTON_GRADRECT); Desenclencher_bouton(BOUTON_TEXTE); @@ -124,14 +124,14 @@ void Bouton_Message_initial(void) Print_dans_fenetre( 7,128,"file before using this program",CM_Fonce,CM_Clair); Print_dans_fenetre( 7,136,"for the first time.",CM_Fonce,CM_Clair); - if ((*ALPHA_BETA)=='à') + if ((*ALPHA_BETA)=='Ó') { Print_char_transparent_dans_fenetre(43,119,'M',CM_Noir); Print_char_transparent_dans_fenetre(53,121,'U',CM_Noir); Print_char_transparent_dans_fenetre(63,119,'S',CM_Noir); Print_char_transparent_dans_fenetre(74,120,'T',CM_Noir); } - + SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(260*Menu_Facteur_X))>>1,(Hauteur_ecran-(172*Menu_Facteur_Y))>>1,260,172); Fenetre_Definir_bouton_normal(90,151,80,14,"OK",0,1,0x001C); // 1 Afficher_curseur(); @@ -164,7 +164,7 @@ void Changer_la_forme_du_pinceau(byte Forme) Pinceau_Forme=FORME_PINCEAU_POINT; break; // Note: Il existe un Pinceau_Forme_avant_lasso, mais comme le lasso aura - // ‚t‚ automatiquement d‚sactiv‚ avant d'arriver ici, y'a pas de problŠme. + // été automatiquement désactivé avant d'arriver ici, y'a pas de problème. } } @@ -291,12 +291,12 @@ void Bouton_Choix_backcolor(void) } -//---------------------- Cacher ou r‚afficher le menu ------------------------ +//---------------------- Cacher ou réafficher le menu ------------------------ void Pixel_dans_barre_d_outil_cachee(word X,word Y,byte Couleur) { - // C'est fait exprŠs que ce soit vide... - // C'est parce que y'a rien du tout … afficher vu que la barre d'outil est - // cach‚e... C'est simple non? + // C'est fait exprès que ce soit vide... + // C'est parce que y'a rien du tout à afficher vu que la barre d'outil est + // cachée... C'est simple non? } @@ -321,8 +321,8 @@ void Bouton_Cacher_menu(void) } } - // On repositionne le d‚calage de l'image pour qu'il n'y ait pas d'in- - // -coh‚rences lorsqu'on sortira du mode Loupe. + // On repositionne le décalage de l'image pour qu'il n'y ait pas d'in- + // -cohérences lorsqu'on sortira du mode Loupe. if (Principal_Decalage_Y+Hauteur_ecran>Principal_Hauteur_image) { if (Hauteur_ecran>Principal_Hauteur_image) @@ -377,7 +377,7 @@ byte Bouton_Quitter_Routine_locale(void) if (!Principal_Image_modifiee) return 1; - // On commence par afficher la fenˆtre de QUIT + // On commence par afficher la fenêtre de QUIT Ouvrir_fenetre(160,84,"Quit ?"); Fenetre_Definir_bouton_normal(20,20,120,14,"Stay",0,1,0x0001); // 1 Fenetre_Definir_bouton_normal(20,40,120,14,"Save & quit",1,1,0x001F); // 2 @@ -413,14 +413,14 @@ byte Bouton_Quitter_Routine_locale(void) Afficher_curseur(); if (!Erreur_fichier) - // L'ayant sauv‚e avec succŠs, + // L'ayant sauvée avec succès, return 1; // On peut quitter else // Il y a eu une erreur lors de la sauvegarde, return 0; // On ne peut donc pas quitter } else - // L'utilisateur ne veut pas ‚craser l'ancien fichier, + // L'utilisateur ne veut pas écraser l'ancien fichier, return 0; // On doit donc rester case 3 : return 1; // Quitter } @@ -437,7 +437,7 @@ void Bouton_Quit(void) if (Brouillon_Image_modifiee) { Bouton_Page(); // On passe sur le brouillon - // Si l'utilisateur pr‚sente les derniers symptomes de l'abandon + // Si l'utilisateur présente les derniers symptomes de l'abandon if (Bouton_Quitter_Routine_locale()) Sortir_du_programme=1; } @@ -455,7 +455,7 @@ void Bouton_Quit(void) } -//---------------------------- Effacer l'‚cran ------------------------------- +//---------------------------- Effacer l'écran ------------------------------- void Bouton_Clear(void) { Effacer_curseur(); @@ -506,13 +506,13 @@ void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte Cancel) { Fenetre_Definir_bouton_normal(91,129,78,14,"OK" ,0,1,0x001C); // 4 Fenetre_Definir_bouton_normal( 7,129,78,14,"Cancel",0,1,0x0001); // 5 - // On enregistre la table dans un backup au cas o— on ferait Cancel + // On enregistre la table dans un backup au cas où on ferait Cancel memcpy(Backup_table,Table,256); } else Fenetre_Definir_bouton_normal(49,129,78,14,"OK" ,0,1,0x001C); // 4 - // On affiche l'‚tat actuel de la table + // On affiche l'état actuel de la table for (Indice=0; Indice<=255; Indice++) Stencil_Tagger_couleur(Indice, (Table[Indice])?CM_Noir:CM_Clair); @@ -558,7 +558,7 @@ void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte Cancel) if (!Mouse_K) switch (Touche) { - case 0x0029 : // R‚cup‚ration d'une couleur derriŠre le menu + case 0x0029 : // Récupération d'une couleur derrière le menu case 0x0033 : Recuperer_couleur_derriere_fenetre(&Couleur,&Click); if (Click) @@ -618,7 +618,7 @@ void Bouton_Mask_Menu(void) } -//------------------------------- ParamŠtres --------------------------------- +//------------------------------- Paramètres --------------------------------- void Settings_Afficher_config(struct S_Config * Conf) #define YES "YES" @@ -629,12 +629,12 @@ void Settings_Afficher_config(struct S_Config * Conf) Effacer_curseur(); - // Jauge = Jauge de sensibilit‚ Y + // Jauge = Jauge de sensibilité Y Jauge->Position=Conf->Indice_Sensibilite_souris_Y-1; Fenetre_Dessiner_jauge(Jauge); Jauge=Jauge->Next; - // Jauge = Jauge de sensibilit‚ X + // Jauge = Jauge de sensibilité X Jauge->Position=Conf->Indice_Sensibilite_souris_X-1; Fenetre_Dessiner_jauge(Jauge); @@ -713,14 +713,14 @@ void Bouton_Settings(void) Ouvrir_fenetre(307,182,"Settings"); - // On commence par dessiner tous les cƒdres + // On commence par dessiner tous les câdres Fenetre_Afficher_cadre( 5, 16,157,30); Fenetre_Afficher_cadre( 5, 47,157,17); Fenetre_Afficher_cadre(163, 16,139,60); Fenetre_Afficher_cadre(253, 77, 49,82); Fenetre_Afficher_cadre( 5, 77,247,82); // |_ Misc. Fenetre_Afficher_cadre( 5, 65,157,14); // | - // On d‚coupe le cƒdre bizarre des "Miscellaneous" + // On découpe le câdre bizarre des "Miscellaneous" Pixel_dans_fenetre(6,77,CM_Blanc); Pixel_dans_fenetre(5,78,CM_Fonce); Block(Fenetre_Pos_X+(7*Menu_Facteur_X),Fenetre_Pos_Y+(77*Menu_Facteur_Y), @@ -753,7 +753,7 @@ void Bouton_Settings(void) Fenetre_Definir_bouton_normal( 9, 96,107,14,"Clear pal: ",0,1,0xFFFF); // 7 // Bouton Show/Hide Picture limits Fenetre_Definir_bouton_normal( 9,111,107,14,"Max prev.: ",0,1,0xFFFF); // 8 - // Bouton Effectuer des backups … chaque sauvegarde + // Bouton Effectuer des backups à chaque sauvegarde Fenetre_Definir_bouton_normal( 9,126,107,14,"Backup : ",0,1,0xFFFF); // 9 // Bouton Choix du curseur Fenetre_Definir_bouton_normal( 9,141,107,14,"Cursor: ",0,1,0xFFFF); // 10 @@ -764,9 +764,9 @@ void Bouton_Settings(void) Fenetre_Definir_bouton_normal(117, 96,131,14,"AdjBrushPick: ",0,1,0xFFFF); // 12 // Bouton Separate colors Fenetre_Definir_bouton_normal(117,111,131,14,"Separate col: ",0,1,0xFFFF); // 13 - // Bouton Passer dans la r‚solution appropri‚e aprŠs un chargement + // Bouton Passer dans la résolution appropriée après un chargement Fenetre_Definir_bouton_normal(117,126,131,14,"Auto-set res: ",0,1,0xFFFF); // 14 - // Bouton Adapter la palette aprŠs un chargement (<=> Shift+BkSpc) + // Bouton Adapter la palette après un chargement (<=> Shift+BkSpc) Fenetre_Definir_bouton_normal(117,141,131,14,"Coords: ",0,1,0xFFFF); // 15 // Bouton Reload @@ -778,13 +778,15 @@ void Bouton_Settings(void) // Bouton Close Fenetre_Definir_bouton_normal(250,163, 51,14,"Close" ,0,1,0x0001); // 19 - // Jauges de sensibilit‚ de la souris (X puis Y) + // Jauges de sensibilité de la souris (X puis Y) Fenetre_Definir_bouton_scroller(265,99,56,255,1,0); // 20 Fenetre_Definir_bouton_scroller(279,99,56,255,1,0); // 21 // Zone de saisie du nb de pages de Undo Fenetre_Definir_bouton_saisie(140,50,2); // 22 + SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(307*Menu_Facteur_X))>>1,(Hauteur_ecran-(182*Menu_Facteur_Y))>>1,307,182); + Afficher_curseur(); Settings_Afficher_config(&Config_choisie); @@ -838,7 +840,7 @@ void Bouton_Settings(void) case 14 : // Auto-set resolution Config_choisie.Auto_set_res=!Config_choisie.Auto_set_res; break; - case 15 : // Coordonn‚es + case 15 : // Coordonnées Config_choisie.Coords_rel=!Config_choisie.Coords_rel; break; case 16 : // Reload @@ -894,7 +896,7 @@ void Bouton_Settings(void) Config=Config_choisie; // Prise en compte de la nouvelle config - // Gestion de la sensibilit‚ + // Gestion de la sensibilité Sensibilite_X=(Config.Indice_Sensibilite_souris_X/Menu_Facteur_X); Sensibilite_Y=(Config.Indice_Sensibilite_souris_Y/Menu_Facteur_Y); Sensibilite_X>>=Mouse_Facteur_de_correction_X; @@ -913,11 +915,11 @@ void Bouton_Settings(void) Fermer_fenetre(); Desenclencher_bouton(BOUTON_PARAMETRES); - // Raffichage du menu pour que les inscriptions qui y figurent soient retrac‚es avec la nouvelle fonte + // Raffichage du menu pour que les inscriptions qui y figurent soient retracées avec la nouvelle fonte Afficher_menu(); Afficher_curseur(); - // On v‚rifie qu'on peut bien allouer le nombre de pages Undo. + // On vérifie qu'on peut bien allouer le nombre de pages Undo. Nouveau_nombre_de_backups(Config.Nb_pages_Undo); } @@ -933,10 +935,10 @@ void Bouton_Page(void) Effacer_curseur(); - // On d‚grossit le travail avec les infos des listes de pages + // On dégrossit le travail avec les infos des listes de pages Interchanger_image_principale_et_brouillon(); - // On fait le reste du travail "… la main": + // On fait le reste du travail "à la main": Short_temporaire=Brouillon_Decalage_X; Brouillon_Decalage_X=Principal_Decalage_X; Principal_Decalage_X=Short_temporaire; @@ -991,7 +993,7 @@ void Bouton_Page(void) Brouillon_Loupe_Decalage_Y=Loupe_Decalage_Y; Loupe_Decalage_Y=Short_temporaire; - // Swap du bool‚en "Image modifi‚e" + // Swap du booléen "Image modifiée" Octet_temporaire =Brouillon_Image_modifiee; Brouillon_Image_modifiee=Principal_Image_modifiee; Principal_Image_modifiee=Octet_temporaire; @@ -1013,7 +1015,7 @@ void Bouton_Page(void) Brouillon_File_list_Decalage=Principal_File_list_Decalage; Principal_File_list_Decalage=Mot_temporaire; - // A la fin, on affiche l'‚cran + // A la fin, on affiche l'écran for (Octet_temporaire=0; FACTEUR_ZOOM[Octet_temporaire]!=Loupe_Facteur; Octet_temporaire++); Changer_facteur_loupe(Octet_temporaire); @@ -1039,31 +1041,31 @@ void Copier_image_seule(void) // Copie des dimensions de l'image /* - C'est inutile, le "Backuper et redimensionner brouillon" a d‚j… modifi‚ + C'est inutile, le "Backuper et redimensionner brouillon" a déjà modifié ces valeurs pour qu'elles soient correctes. */ Brouillon_Largeur_image=Principal_Largeur_image; Brouillon_Hauteur_image=Principal_Hauteur_image; - // Copie des d‚calages de la fenˆtre principale (non zoom‚e) de l'image + // Copie des décalages de la fenêtre principale (non zoomée) de l'image Brouillon_Decalage_X=Principal_Decalage_X; Brouillon_Decalage_Y=Principal_Decalage_Y; - // Copie du bool‚en "Mode loupe" de l'image + // Copie du booléen "Mode loupe" de l'image Brouillon_Loupe_Mode=Loupe_Mode; // Copie du facteur de zoom du brouillon Brouillon_Loupe_Facteur=Loupe_Facteur; - // Copie des dimensions de la fenˆtre de zoom + // Copie des dimensions de la fenêtre de zoom Brouillon_Loupe_Largeur=Loupe_Largeur; Brouillon_Loupe_Hauteur=Loupe_Hauteur; - // Copie des d‚calages de la fenˆtre de zoom + // Copie des décalages de la fenêtre de zoom Brouillon_Loupe_Decalage_X=Loupe_Decalage_X; Brouillon_Loupe_Decalage_Y=Loupe_Decalage_Y; - // Copie des donn‚es du split du zoom + // Copie des données du split du zoom Brouillon_Split=Principal_Split; Brouillon_X_Zoom=Principal_X_Zoom; Brouillon_Proportion_split=Principal_Proportion_split; @@ -1190,6 +1192,9 @@ void Cocher_bouton_mode(short Pos_X, short Pos_Y, byte Etat) } Block(Fenetre_Pos_X+Menu_Facteur_X*Pos_X,Fenetre_Pos_Y+Menu_Facteur_Y*Pos_Y, Menu_Facteur_X*9,Menu_Facteur_Y*3,Couleur); + + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X+Menu_Facteur_X*Pos_X,Fenetre_Pos_Y+Menu_Facteur_Y*Pos_Y, + Menu_Facteur_X*9,Menu_Facteur_Y*3); } @@ -1336,7 +1341,7 @@ void Bouton_Resol(void) Fenetre_Definir_bouton_scroller(271,69,97,NB_MODES_VIDEO,12,Debut_liste); // 6 - // Les 12 petits boutons indiquant l'‚tat des modes + // Les 12 petits boutons indiquant l'état des modes for (Temp=0; Temp<12; Temp++) Fenetre_Definir_bouton_normal(17,70+(Temp<<3),13,7,"",0,1,0xFFFF);// 7..18 @@ -1359,6 +1364,8 @@ void Bouton_Resol(void) Afficher_liste_modes(Debut_liste,Position_curseur); + SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(299*Menu_Facteur_X))>>1,(Hauteur_ecran-(190*Menu_Facteur_Y))>>1,299,190); + Afficher_curseur(); do @@ -1413,7 +1420,7 @@ void Bouton_Resol(void) // Si l'utilisateur s'est servi du bouton droit de la souris: if (Mouse_K==2) { - // On affecte ‚galement les dimensions de l'image: + // On affecte également les dimensions de l'image: Largeur_choisie=Mode_video[Mode_choisi].Largeur; Num2str(Largeur_choisie,Chaine,4); Fenetre_Contenu_bouton_saisie(Bouton_saisie_Width,Chaine); @@ -1433,7 +1440,7 @@ void Bouton_Resol(void) Afficher_liste_modes(Debut_liste,Position_curseur); break; - default: // Boutons de tag des ‚tats des modes + default: // Boutons de tag des états des modes Temp=Debut_liste+Bouton_clicke-7; if (Temp) // On n'a pas le droit de cocher le mode 0 (320x200) { @@ -1450,7 +1457,7 @@ void Bouton_Resol(void) } } - // Gestion des touches de d‚placement dans la liste + // Gestion des touches de déplacement dans la liste switch (Touche) { case 0x0048 : // Haut @@ -1523,7 +1530,7 @@ void Bouton_Resol(void) Initialiser_mode_video(Mode_choisi); else { - Erreur(0); // On signale … l'utilisateur que c'est un mode invalide + Erreur(0); // On signale à l'utilisateur que c'est un mode invalide Initialiser_mode_video(Resolution_actuelle); } @@ -1550,7 +1557,7 @@ void Bouton_Safety_resol(void) } -//------------------ Gestion des boutons de dessin … la main ----------------- +//------------------ Gestion des boutons de dessin à la main ----------------- void Bouton_Dessin(void) { @@ -1625,18 +1632,18 @@ void Bouton_Ellipse_pleine(void) } -// -- Gestion du menu des d‚grad‚s ------------------------------------------ +// -- Gestion du menu des dégradés ------------------------------------------ void Degrade_Dessiner_bouton_de_technique(short Pos_X,short Pos_Y,int Technique) { short Ligne; - // On commence par afficher les 2 c“t‚s qui constituent le d‚grad‚ de base: - // C“t‚ gauche (noir) + // On commence par afficher les 2 côtés qui constituent le dégradé de base: + // Côté gauche (noir) Block(Fenetre_Pos_X+((Pos_X+2)*Menu_Facteur_X), Fenetre_Pos_Y+((Pos_Y+2)*Menu_Facteur_Y), Menu_Facteur_X*6, Menu_Facteur_Y*10,CM_Noir); - // C“t‚ droit (blanc) + // Côté droit (blanc) Block(Fenetre_Pos_X+((Pos_X+8)*Menu_Facteur_X), Fenetre_Pos_Y+((Pos_Y+2)*Menu_Facteur_Y), Menu_Facteur_X*5, @@ -1644,8 +1651,8 @@ void Degrade_Dessiner_bouton_de_technique(short Pos_X,short Pos_Y,int Technique) switch(Technique) { - case 1 : // D‚grad‚ de trames simples - // Au centre, on place 10 lignes tram‚es simplement + case 1 : // Dégradé de trames simples + // Au centre, on place 10 lignes tramées simplement for (Ligne=2;Ligne<2+10;Ligne++) if (Ligne&1) { @@ -1661,8 +1668,8 @@ void Degrade_Dessiner_bouton_de_technique(short Pos_X,short Pos_Y,int Technique) Pixel_dans_fenetre(Pos_X+ 9,Pos_Y+Ligne,CM_Noir); } break; - case 2 : // D‚grad‚ de trames ‚tendues - // Au centre, on place 10 lignes tram‚es de fa‡on compliqu‚e + case 2 : // Dégradé de trames étendues + // Au centre, on place 10 lignes tramées de façon compliquée for (Ligne=2;Ligne<2+10;Ligne++) if (Ligne&1) { @@ -1678,6 +1685,9 @@ void Degrade_Dessiner_bouton_de_technique(short Pos_X,short Pos_Y,int Technique) Pixel_dans_fenetre(Pos_X+ 6,Pos_Y+Ligne,CM_Blanc); } } + + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X+((Pos_X+2)*Menu_Facteur_X),Fenetre_Pos_Y+((Pos_Y+2)*Menu_Facteur_Y), + Menu_Facteur_X*10,Menu_Facteur_Y*10); } void Degrade_Charger_infos_du_tableau(int Indice) @@ -1694,20 +1704,20 @@ void Degrade_Charger_infos_du_tableau(int Indice) switch(Degrade_Tableau[Indice].Technique) { - case 0 : // Degrad‚ de base + case 0 : // Degradé de base Traiter_degrade=Degrade_de_base; break; - case 1 : // D‚grad‚ de trames simples + case 1 : // Dégradé de trames simples Traiter_degrade=Degrade_de_trames_simples; break; - case 2 : // D‚grad‚ de trames ‚tendues + case 2 : // Dégradé de trames étendues Traiter_degrade=Degrade_de_trames_etendues; } } void Degrade_Dessiner_preview(short Debut_X,short Debut_Y,short Largeur,short Hauteur,int Indice) { - short Pos_X; // Variables de balayage du block en bas de l'‚cran. + short Pos_X; // Variables de balayage du block en bas de l'écran. short Pos_Y; short Fin_X; short Fin_Y; @@ -1751,15 +1761,15 @@ void Bouton_Degrades(void) Ouvrir_fenetre(237,133,"Gradation menu"); Fenetre_Definir_bouton_palette(48,21); // 1 - // D‚finition du scrolleur <=> indice du d‚grad‚ dans le tableau + // Définition du scrolleur <=> indice du dégradé dans le tableau Fenetre_Definir_bouton_scroller(218,22,75,16,1,Degrade_Courant); // 2 - // D‚finition du scrolleur de m‚lange du d‚grad‚ + // Définition du scrolleur de mélange du dégradé Fenetre_Definir_bouton_scroller(31,22,84,256,1,Degrade_Tableau[Degrade_Courant].Melange); // 3 Scroller_de_melange=Fenetre_Liste_boutons_scroller; - // D‚finition du bouton de sens + // Définition du bouton de sens Fenetre_Definir_bouton_normal(8,22,15,14, (Degrade_Tableau[Degrade_Courant].Inverse)?"\033":"\032",0,1,0x000F); // 4 - // D‚finition du bouton de technique + // Définition du bouton de technique Fenetre_Definir_bouton_normal(8,92,15,14,"",0,1,0x010F); // 5 Degrade_Dessiner_bouton_de_technique(8,92,Degrade_Tableau[Degrade_Courant].Technique); @@ -1774,7 +1784,7 @@ void Bouton_Degrades(void) Num2str(Degrade_Courant+1,Chaine,2); Print_dans_fenetre(215,100,Chaine,CM_Noir,CM_Clair); - // On affiche le cadre autour de la pr‚view + // On affiche le cadre autour de la préview Fenetre_Afficher_cadre_creux(7,111,110,16); // On affiche la preview Degrade_Dessiner_preview(8,112,108,14,Degrade_Courant); @@ -1804,11 +1814,11 @@ void Bouton_Degrades(void) { // On vient de clicker - // On met … jour l'intervalle du d‚grad‚ + // On met à jour l'intervalle du dégradé Premiere_couleur=Derniere_couleur=Degrade_Tableau[Degrade_Courant].Debut=Degrade_Tableau[Degrade_Courant].Fin=Couleur_temporaire; // On tagge le bloc Tagger_intervalle_palette(Degrade_Tableau[Degrade_Courant].Debut,Degrade_Tableau[Degrade_Courant].Fin); - // Trac‚ de la preview: + // Tracé de la preview: Degrade_Dessiner_preview(8,112,108,14,Degrade_Courant); } else @@ -1816,7 +1826,7 @@ void Bouton_Degrades(void) // On maintient le click, on va donc tester si le curseur bouge if (Couleur_temporaire!=Derniere_couleur) { - // On commence par ordonner la 1Šre et derniŠre couleur du bloc + // On commence par ordonner la 1ère et dernière couleur du bloc if (Premiere_couleurPosition=Degrade_Tableau[Degrade_Courant].Melange; Fenetre_Dessiner_jauge(Scroller_de_melange); @@ -1866,9 +1876,9 @@ void Bouton_Degrades(void) Afficher_curseur(); break; - case 3 : // Nouveau m‚lange de d‚grad‚ + case 3 : // Nouveau mélange de dégradé Effacer_curseur(); - // Nouvel m‚lange dans Fenetre_Attribut2 + // Nouvel mélange dans Fenetre_Attribut2 Degrade_Tableau[Degrade_Courant].Melange=Fenetre_Attribut2; // On affiche la nouvelle preview Degrade_Dessiner_preview(8,112,108,14,Degrade_Courant); @@ -1896,7 +1906,7 @@ void Bouton_Degrades(void) if (!Mouse_K) switch (Touche) { - case 0x0029 : // R‚cup‚ration d'une couleur derriŠre le menu + case 0x0029 : // Récupération d'une couleur derrière le menu case 0x0033 : Recuperer_couleur_derriere_fenetre(&Couleur,&Click); if (Click) @@ -1904,11 +1914,11 @@ void Bouton_Degrades(void) Effacer_curseur(); Couleur_temporaire=Couleur; - // On met … jour l'intervalle du d‚grad‚ + // On met à jour l'intervalle du dégradé Premiere_couleur=Derniere_couleur=Degrade_Tableau[Degrade_Courant].Debut=Degrade_Tableau[Degrade_Courant].Fin=Couleur_temporaire; // On tagge le bloc Tagger_intervalle_palette(Degrade_Tableau[Degrade_Courant].Debut,Degrade_Tableau[Degrade_Courant].Fin); - // Trac‚ de la preview: + // Tracé de la preview: Degrade_Dessiner_preview(8,112,108,14,Degrade_Courant); Afficher_curseur(); @@ -1931,7 +1941,7 @@ void Bouton_Degrades(void) } -// -- Gestion des boutons de cercle (ellipse) d‚grad‚(e) -------------------- +// -- Gestion des boutons de cercle (ellipse) dégradé(e) -------------------- void Bouton_Cercle_degrade(void) { @@ -2073,42 +2083,42 @@ void Bouton_Brosse_monochrome(void) void Print_repertoire_courant(void) // -// Affiche Principal_Repertoire_courant sur 37 caractŠres +// Affiche Principal_Repertoire_courant sur 37 caractères // { - char Nom_temporaire[TAILLE_MAXI_PATH+1]; // Nom tronqu‚ - int Longueur; // Longueur du r‚pertoire courant - int Indice; // Indice de parcours de la chaine complŠte + char Nom_temporaire[TAILLE_MAXI_PATH+1]; // Nom tronqué + int Longueur; // Longueur du répertoire courant + int Indice; // Indice de parcours de la chaine complète Block(Fenetre_Pos_X+(Menu_Facteur_X*7),Fenetre_Pos_Y+(Menu_Facteur_Y*43),Menu_Facteur_X*37*8,Menu_Facteur_Y<<3,CM_Clair); Longueur=strlen(Principal_Repertoire_courant); if (Longueur>TAILLE_MAXI_PATH) - { // Doh! il va falloir tronquer le r‚pertoire (bouh !) + { // Doh! il va falloir tronquer le répertoire (bouh !) - // On commence par copier bˆtement les 3 premiers caractŠres (e.g. "C:\") + // On commence par copier bêtement les 3 premiers caractères (e.g. "C:\") for (Indice=0;Indice<3;Indice++) Nom_temporaire[Indice]=Principal_Repertoire_courant[Indice]; // On y rajoute 3 petits points: strcpy(Nom_temporaire+3,"..."); - // Ensuite, on cherche un endroit … partir duquel on pourrait loger tout + // Ensuite, on cherche un endroit à partir duquel on pourrait loger tout // le reste de la chaine (Ouaaaaaah!!! Vachement fort le mec!!) for (Indice++;IndicePosition!=Principal_File_list_Position) { - // Si c'est le cas, il faut mettre … jour la jauge + // Si c'est le cas, il faut mettre à jour la jauge Scroller_de_fichiers->Position=Principal_File_list_Position; Fenetre_Dessiner_jauge(Scroller_de_fichiers); } - // On r‚cup‚re le nom du schmilblick … "acc‚der" + // On récupére le nom du schmilblick à "accéder" Determiner_element_de_la_liste(Principal_File_list_Position,Principal_File_list_Decalage,Principal_Nom_fichier); if (strcmp(Ancien_nom_de_fichier,Principal_Nom_fichier)) Nouvelle_preview=1; @@ -2286,19 +2296,19 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) short Bouton_clicke; struct Fenetre_Bouton_scroller * Scroller_de_fichiers; short Temp; - unsigned Bidon=0; // Sert … appeler _dos_setdrive + unsigned Bidon=0; // Sert à appeler _dos_setdrive word Drives_Debut_Y; byte Charger_ou_sauver_l_image=0; char Nom_drive[3]=" "; - byte On_a_clicke_sur_OK=0;// Indique si on a click‚ sur Load ou Save ou sur - //un bouton enclenchant Load ou Save juste aprŠs. - struct Composantes * Palette_initiale; // | Donn‚es concernant l'image qui - byte Image_modifiee_initiale; // | sont m‚moris‚es pour pouvoir - short Largeur_image_initiale; // |- ˆtre restaur‚es en sortant, + byte On_a_clicke_sur_OK=0;// Indique si on a clické sur Load ou Save ou sur + //un bouton enclenchant Load ou Save juste après. + struct Composantes * Palette_initiale; // | Données concernant l'image qui + byte Image_modifiee_initiale; // | sont mémorisées pour pouvoir + short Largeur_image_initiale; // |- être restaurées en sortant, short Hauteur_image_initiale; // | parce que la preview elle les byte Back_color_initiale; // | fout en l'air (c'te conne). - char Nom_fichier_initial[13]; // Sert … laisser le nom courant du fichier en cas de sauvegarde - char Repertoire_precedent[13]; // R‚pertoire d'o— l'on vient aprŠs un CHDIR + char Nom_fichier_initial[13]; // Sert à laisser le nom courant du fichier en cas de sauvegarde + char Repertoire_precedent[13]; // Répertoire d'où l'on vient après un CHDIR char Commentaire_initial[TAILLE_COMMENTAIRE+1]; char Fichier_recherche[13]=""; char * Fichier_le_plus_ressemblant; @@ -2348,13 +2358,13 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) Fenetre_Definir_bouton_normal(125,139,51,14,"Cancel",0,1,0x0001); // 2 Fenetre_Definir_bouton_normal(125, 89,51,14,"Delete",0,1,0x0053); // 3 - // Cƒdre autour des formats + // Câdre autour des formats Fenetre_Afficher_cadre( 7, 51,103, 35); - // Cƒdre autour des infos sur le fichier de dessin + // Câdre autour des infos sur le fichier de dessin Fenetre_Afficher_cadre(116, 51,187, 35); - // Cƒdre autour de la preview + // Câdre autour de la preview Fenetre_Afficher_cadre_creux(179,88,124,84); - // Cƒdre autour du fileselector + // Câdre autour du fileselector Fenetre_Afficher_cadre_creux( 7,88,100,84); Fenetre_Definir_bouton_special(9,90,96,80); // 4 @@ -2380,7 +2390,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) Print_Format(); - // D‚finition des boutons repr‚sentant les lecteurs + // Définition des boutons représentant les lecteurs Drives_Debut_Y=(Nb_drives<=13)? 23 : 18; for (Temp=0; Temp On charge/sauve une image // Image=0 => On charge/sauve une brosse { - // Donn‚es initiales du fichier (au cas o— on voudrait annuler) + // Données initiales du fichier (au cas où on voudrait annuler) char Repertoire_fichier_initial[256]; char Nom_fichier_initial[13]; byte Format_fichier_initial; @@ -2992,7 +3002,7 @@ void Load_picture(byte Image) if (Image) { // Si c'est une image qu'on charge, on efface l'ancien commentaire - // C'est loin d'ˆtre indispensable, m'enfin bon... + // C'est loin d'être indispensable, m'enfin bon... if (Format_Backup_done[Principal_Format_fichier-1]) Principal_Commentaire[0]='\0'; @@ -3043,7 +3053,7 @@ void Load_picture(byte Image) Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE); if (Config.Auto_discontinuous) { - // On se place en mode Dessin discontinu … la main + // On se place en mode Dessin discontinu à la main while (Operation_en_cours!=OPERATION_DESSIN_DISCONTINU) Enclencher_bouton(BOUTON_DESSIN,A_DROITE); } @@ -3119,7 +3129,7 @@ void Load_picture(byte Image) void Bouton_Load(void) { - // On sauve l'‚tat actuel des paramŠtres de l'image pour pouvoir les + // On sauve l'état actuel des paramètres de l'image pour pouvoir les // restituer en cas d'erreur n'affectant pas l'image Upload_infos_page_principal(Principal_Backups->Pages); @@ -3132,7 +3142,7 @@ void Bouton_Reload(void) byte Ancienne_forme_curseur; int Nouveau_mode; - // On sauve l'‚tat actuel des paramŠtres de l'image pour pouvoir les + // On sauve l'état actuel des paramètres de l'image pour pouvoir les // restituer en cas d'erreur n'affectant pas l'image Upload_infos_page_principal(Principal_Backups->Pages); @@ -3216,10 +3226,10 @@ void Backup_du_fichier_sauvegarde(void) Erreur_fichier=0; // On fait un backup si le nom du fichier n'est pas celui qu'on a choisi - // pour nommer les backups (c'est ‚vident!). + // pour nommer les backups (c'est évident!). if (strcmp(Nouveau_nom_du_fichier,Nom_du_fichier)) { - // S'il y avait d‚j… un fichier Backup, on l'efface + // S'il y avait déjà un fichier Backup, on l'efface if ((Fichier_existe(Nouveau_nom_du_fichier)) && (remove(Nouveau_nom_du_fichier)!=0)) Erreur_fichier=1; @@ -3235,7 +3245,7 @@ void Save_picture(byte Image) // Image=1 => On charge/sauve une image // Image=0 => On charge/sauve une brosse { - // Donn‚es initiales du fichier (au cas o— on voudrait annuler) + // Données initiales du fichier (au cas où on voudrait annuler) char Repertoire_fichier_initial[256]; char Nom_fichier_initial[13]; byte Format_fichier_initial; @@ -3405,7 +3415,7 @@ void Bouton_Brosse(void) void Bouton_desenclencher_Brosse(void) { - // On fait de notre mieux pour restaurer l'ancienne op‚ration: + // On fait de notre mieux pour restaurer l'ancienne opération: Demarrer_pile_operation(Operation_avant_interruption); } @@ -3444,7 +3454,7 @@ void Bouton_Lasso(void) void Bouton_desenclencher_Lasso(void) { - // On fait de notre mieux pour restaurer l'ancienne op‚ration: + // On fait de notre mieux pour restaurer l'ancienne opération: Demarrer_pile_operation(Operation_avant_interruption); Pinceau_Forme=Pinceau_Forme_avant_lasso; } @@ -3481,7 +3491,7 @@ void Bouton_desenclencher_Pipette(void) ( (!Loupe_Mode) || (Mouse_X=Principal_X_Zoom) ) ) Print_dans_menu("X: Y: ",0); - // On fait de notre mieux pour restaurer l'ancienne op‚ration: + // On fait de notre mieux pour restaurer l'ancienne opération: if (Operation_en_cours==OPERATION_PIPETTE) { Demarrer_pile_operation(Operation_avant_interruption); @@ -3536,27 +3546,27 @@ void Bouton_Loupe(void) Demarrer_pile_operation(OPERATION_LOUPE); } else - { /* Ceci est de la duplication de code de presque toute l'op‚ration de */ - /* la loupe... Il serait peut-ˆtre plus propre de faire une proc‚dure */ + { /* Ceci est de la duplication de code de presque toute l'opération de */ + /* la loupe... Il serait peut-être plus propre de faire une procédure */ /* qui s'en charge... */ // On passe en mode loupe Loupe_Mode=1; - // La fonction d'affichage dans la partie image est d‚sormais un affichage - // sp‚cial loupe. + // La fonction d'affichage dans la partie image est désormais un affichage + // spécial loupe. Pixel_Preview=Pixel_Preview_Loupe; // On calcule l'origine de la loupe Loupe_Decalage_X=Mouse_X-(Loupe_Largeur>>1); Loupe_Decalage_Y=Mouse_Y-(Loupe_Hauteur>>1); - // Calcul du coin haut_gauche de la fenˆtre devant ˆtre zoom‚e DANS L'ECRAN + // Calcul du coin haut_gauche de la fenêtre devant être zoomée DANS L'ECRAN if (Loupe_Decalage_X+Loupe_Largeur>=Limite_Droite-Principal_Decalage_X) Loupe_Decalage_X=Limite_Droite-Loupe_Largeur-Principal_Decalage_X+1; if (Loupe_Decalage_Y+Loupe_Hauteur>=Limite_Bas-Principal_Decalage_Y) Loupe_Decalage_Y=Limite_Bas-Loupe_Hauteur-Principal_Decalage_Y+1; - // Calcul des coordonn‚es absolues de ce coin DANS L'IMAGE + // Calcul des coordonnées absolues de ce coin DANS L'IMAGE Loupe_Decalage_X+=Principal_Decalage_X; Loupe_Decalage_Y+=Principal_Decalage_Y; @@ -3565,12 +3575,12 @@ void Bouton_Loupe(void) if (Loupe_Decalage_Y<0) Loupe_Decalage_Y=0; - // On calcule les bornes visibles dans l'‚cran + // On calcule les bornes visibles dans l'écran Recadrer_ecran_par_rapport_au_zoom(); Calculer_limites(); Afficher_ecran(); - // Repositionner le curseur en fonction des coordonn‚es visibles + // Repositionner le curseur en fonction des coordonnées visibles Calculer_coordonnees_pinceau(); } } @@ -3636,12 +3646,12 @@ void Bouton_desenclencher_Loupe(void) Loupe_Mode=0; /* - // --> Recalculer le d‚calage de l'‚cran lorsqu'on sort de la loupe <-- - // Centrage "brut" de l‚cran par rapport … la loupe + // --> Recalculer le décalage de l'écran lorsqu'on sort de la loupe <-- + // Centrage "brut" de lécran par rapport à la loupe Principal_Decalage_X=Loupe_Decalage_X-((Largeur_ecran-Loupe_Largeur)>>1); Principal_Decalage_Y=Loupe_Decalage_Y-((Menu_Ordonnee-Loupe_Hauteur)>>1); */ - // Correction en cas de d‚bordement de l'image + // Correction en cas de débordement de l'image if (Ancien_Principal_Decalage_X+Largeur_ecran>Principal_Largeur_image) Principal_Decalage_X=Principal_Largeur_image-Largeur_ecran; else @@ -3656,16 +3666,16 @@ void Bouton_desenclencher_Loupe(void) if (Principal_Decalage_Y<0) Principal_Decalage_Y=0; - // La fonction d'affichage dans l'image est d‚sormais un affichage normal. + // La fonction d'affichage dans l'image est désormais un affichage normal. Pixel_Preview=Pixel_Preview_Normal; - // Calculer les bornes visibles dans l'‚cran + // Calculer les bornes visibles dans l'écran Calculer_limites(); Afficher_ecran(); // <=> Display_screen(); - // Repositionner le curseur en fonction des coordonn‚es visibles + // Repositionner le curseur en fonction des coordonnées visibles Calculer_coordonnees_pinceau(); } - else // On fait de notre mieux pour restaurer l'ancienne op‚ration: + else // On fait de notre mieux pour restaurer l'ancienne opération: Demarrer_pile_operation(Operation_avant_interruption); } @@ -3849,15 +3859,15 @@ void Bouton_Brush_FX(void) Fenetre_Definir_bouton_normal(236,141, 67,14,"Cancel" ,0,1,0x0001); // 1 Fenetre_Definir_bouton_normal( 19, 46, 27,14,"X\035" ,1,1,0x002D); // 2 Fenetre_Definir_bouton_normal( 19, 61, 27,14,"Y\022" ,1,1,0x0015); // 3 - Fenetre_Definir_bouton_normal( 58, 46, 37,14,"90ø" ,0,1,0xFFFF); // 4 - Fenetre_Definir_bouton_normal( 96, 46, 37,14,"180ø" ,0,1,0xFFFF); // 5 + Fenetre_Definir_bouton_normal( 58, 46, 37,14,"90°" ,0,1,0xFFFF); // 4 + Fenetre_Definir_bouton_normal( 96, 46, 37,14,"180°" ,0,1,0xFFFF); // 5 Fenetre_Definir_bouton_normal( 58, 61, 75,14,"any angle" ,0,1,0xFFFF); // 6 Fenetre_Definir_bouton_normal(145, 46, 67,14,"Stretch" ,2,1,0x0014); // 7 Fenetre_Definir_bouton_normal(145, 61, 67,14,"Distort" ,1,1,0x0020); // 8 Fenetre_Definir_bouton_normal(155, 99,131,14,"Recolorize" ,1,1,0x0013); // 9 Fenetre_Definir_bouton_normal(155,117,131,14,"Get brush colors",1,1,0x0022); // 10 - // Boutons repr‚sentant les coins du brush handle: (HG,HD,C,BG,BD) + // Boutons représentant les coins du brush handle: (HG,HD,C,BG,BD) Fenetre_Definir_bouton_normal( 75, 90,11,11,"",0,1,0x0047); // 11 Fenetre_Definir_bouton_normal(103, 90,11,11,"",0,1,0x0049); // 12 Fenetre_Definir_bouton_normal( 89,104,11,11,"",0,1,0x004C); // 13 @@ -3879,7 +3889,7 @@ void Bouton_Brush_FX(void) Print_dans_fenetre( 20,102,"Brush",CM_Fonce,CM_Clair); Print_dans_fenetre( 16,110,"handle",CM_Fonce,CM_Clair); - // Dessin des pointill‚s pour le "brush handle" + // Dessin des pointillés pour le "brush handle" for (Indice=0; Indice<13; Indice+=2) { Pixel_dans_fenetre( 88+Indice, 92,CM_Fonce); @@ -3903,7 +3913,9 @@ void Bouton_Brush_FX(void) // Coin BD Block(Fenetre_Pos_X+(Menu_Facteur_X*105),Fenetre_Pos_Y+(Menu_Facteur_Y*126),Menu_Facteur_X*7,Menu_Facteur_Y,CM_Noir); Block(Fenetre_Pos_X+(Menu_Facteur_X*111),Fenetre_Pos_Y+(Menu_Facteur_Y*120),Menu_Facteur_X,Menu_Facteur_Y*7,CM_Noir); - + + SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(310*Menu_Facteur_X))>>1,(Hauteur_ecran-(162*Menu_Facteur_Y))>>1,310,162); + Afficher_curseur(); do @@ -3915,7 +3927,7 @@ void Bouton_Brush_FX(void) Fermer_fenetre(); Desenclencher_bouton(BOUTON_EFFETS_BROSSE); - // Gestion du bouton click‚ + // Gestion du bouton clické switch (Bouton_clicke) { case 2 : // Flip X @@ -3924,10 +3936,10 @@ void Bouton_Brush_FX(void) case 3 : // Flip Y Flip_Y_LOWLEVEL(); break; - case 4 : // 90ø Rotation + case 4 : // 90° Rotation Rotate_90_deg(); break; - case 5 : // 180ø Rotation + case 5 : // 180° Rotation if (Brosse_Hauteur&1) { // Brosse de hauteur impaire Flip_X_LOWLEVEL(); @@ -4097,7 +4109,7 @@ void Bouton_Smooth_Menu(void) if (Bouton_clicke==2) // OK { memcpy(Smooth_Matrice,Matrice_choisie,sizeof(Smooth_Matrice)); - Smooth_Mode=0; // On le met … 0 car la fonctø suivante va le passer … 1 + Smooth_Mode=0; // On le met à 0 car la fonct° suivante va le passer à 1 Bouton_Smooth_Mode(); } @@ -4167,9 +4179,9 @@ void Bouton_Colorize_Mode(void) void Bouton_Colorize_Afficher_la_selection(int Numero) { - short Pos_Y=0; // Ligne o— afficher les flŠches de s‚lection + short Pos_Y=0; // Ligne où afficher les flèches de sélection - // On commence par effacer les anciennes s‚lections: + // On commence par effacer les anciennes sélections: // Partie gauche Print_dans_fenetre(4,37," ",CM_Noir,CM_Clair); Print_dans_fenetre(4,57," ",CM_Noir,CM_Clair); @@ -4179,16 +4191,16 @@ void Bouton_Colorize_Afficher_la_selection(int Numero) Print_dans_fenetre(129,57," ",CM_Noir,CM_Clair); Print_dans_fenetre(129,74," ",CM_Noir,CM_Clair); - // Ensuite, on affiche la flŠche l… o— il le faut: + // Ensuite, on affiche la flèche là où il le faut: switch(Numero) { - case 0 : // M‚thode interpol‚e + case 0 : // Méthode interpolée Pos_Y=37; break; - case 1 : // M‚thode additive + case 1 : // Méthode additive Pos_Y=57; break; - case 2 : // M‚thode soustractive + case 2 : // Méthode soustractive Pos_Y=74; } Print_dans_fenetre(4,Pos_Y,"\020",CM_Noir,CM_Clair); @@ -4231,7 +4243,7 @@ void Bouton_Colorize_Menu(void) switch(Bouton_clicke) { - case 1: // Zone de saisie de l'opacit‚ + case 1: // Zone de saisie de l'opacité Effacer_curseur(); Num2str(Opacite_choisie,Chaine,3); Readline(89,23,Chaine,3,1); @@ -4245,9 +4257,9 @@ void Bouton_Colorize_Menu(void) } Afficher_curseur(); break; - case 2: // M‚thode interpol‚e - case 3: // M‚thode additive - case 4: // M‚thode soustractive + case 2: // Méthode interpolée + case 3: // Méthode additive + case 4: // Méthode soustractive Mode_choisi=Bouton_clicke-2; Effacer_curseur(); Bouton_Colorize_Afficher_la_selection(Mode_choisi); @@ -4263,7 +4275,7 @@ void Bouton_Colorize_Menu(void) Colorize_Opacite =Opacite_choisie; Colorize_Mode_en_cours=Mode_choisi; Calculer_les_tables_de_Colorize(); - Colorize_Mode=0; // On le met … 0 car la fonctø suivante va le passer … 1 + Colorize_Mode=0; // On le met à 0 car la fonct° suivante va le passer à 1 Bouton_Colorize_Mode(); } @@ -4320,13 +4332,13 @@ void Bouton_Tiling_Menu(void) { Bouton_clicke=Fenetre_Bouton_clicke(); - if (Bouton_clicke==3) // Zone de saisie du d‚calage X + if (Bouton_clicke==3) // Zone de saisie du décalage X { Effacer_curseur(); Num2str(Offset_X_choisi,Chaine,4); Readline(93,23,Chaine,4,1); Offset_X_choisi=atoi(Chaine); - // On corrige le d‚calage en X + // On corrige le décalage en X if (Offset_X_choisi>=Brosse_Largeur) { Offset_X_choisi=Brosse_Largeur-1; @@ -4336,13 +4348,13 @@ void Bouton_Tiling_Menu(void) Afficher_curseur(); } else - if (Bouton_clicke==4) // Zone de saisie du d‚calage Y + if (Bouton_clicke==4) // Zone de saisie du décalage Y { Effacer_curseur(); Num2str(Offset_Y_choisi,Chaine,4); Readline(93,37,Chaine,4,1); Offset_Y_choisi=atoi(Chaine); - // On corrige le d‚calage en Y + // On corrige le décalage en Y if (Offset_Y_choisi>=Brosse_Hauteur) { Offset_Y_choisi=Brosse_Hauteur-1; @@ -4368,7 +4380,7 @@ void Bouton_Tiling_Menu(void) } -//---------------------------- Courbes de B‚zier ---------------------------- +//---------------------------- Courbes de Bézier ---------------------------- void Bouton_Courbes(void) { @@ -4460,7 +4472,7 @@ void Bouton_Spray_Menu(void) Fenetre_Definir_bouton_normal(194, 62,19,14,"+1" ,0,1,0x004E); // 6 Fenetre_Definir_bouton_normal(194, 79,19,14,"-1" ,0,1,0x004A); // 7 Fenetre_Definir_bouton_normal(194, 96,19,14,"x2" ,0,1,0x0037); // 8 - Fenetre_Definir_bouton_normal(194,113,19,14,"ö2" ,0,1,0x00E0); // 9 + Fenetre_Definir_bouton_normal(194,113,19,14,"÷2" ,0,1,0x00E0); // 9 Fenetre_Definir_bouton_normal( 8, 37,43,14,"Clear" ,1,1,0x002E); // 10 @@ -4491,11 +4503,11 @@ void Bouton_Spray_Menu(void) Fenetre_Afficher_cadre(173,56,45,86); Fenetre_Afficher_cadre(137,19,81,33); - // On tagge toutes les couleurs utilis‚es + // On tagge toutes les couleurs utilisées for (Indice=0; Indice<256; Indice++) if (Spray_Multi_flow[Indice]) Stencil_Tagger_couleur(Indice,CM_Noir); - // Et enfin, on tagge la couleur s‚lectionn‚e + // Et enfin, on tagge la couleur sélectionnée Stencil_Tagger_couleur(Couleur_selectionnee,CM_Blanc); Spray_Rafficher_infos(Couleur_selectionnee,0); @@ -4538,7 +4550,7 @@ void Bouton_Spray_Menu(void) Effacer_curseur(); Stencil_Tagger_couleur(Couleur_selectionnee,(Spray_Multi_flow[Couleur_selectionnee])?CM_Noir:CM_Clair); - // Mettre la couleur s‚lectionn‚e … jour suivant le click + // Mettre la couleur sélectionnée à jour suivant le click Couleur_selectionnee=Lit_pixel(Mouse_X,Mouse_Y); if (Mouse_K==2) Spray_Multi_flow[Couleur_selectionnee]=0; @@ -4546,7 +4558,7 @@ void Bouton_Spray_Menu(void) if (Spray_Multi_flow[Couleur_selectionnee]==0) Spray_Multi_flow[Couleur_selectionnee]=Spray_Init; - // Tagger la couleur s‚lectionn‚e en blanc + // Tagger la couleur sélectionnée en blanc Stencil_Tagger_couleur(Couleur_selectionnee,CM_Blanc); Spray_Rafficher_infos(Couleur_selectionnee,1); Afficher_curseur(); @@ -4600,7 +4612,7 @@ void Bouton_Spray_Menu(void) Afficher_curseur(); break; - case 9 : // ö2 + case 9 : // ÷2 for (Indice=0; Indice<256; Indice++) { if (Spray_Multi_flow[Indice]>1) @@ -4613,11 +4625,11 @@ void Bouton_Spray_Menu(void) case 10 : // Clear memset(Spray_Multi_flow,0,256); - // On raffiche les infos de la couleur s‚lectionn‚e + // On raffiche les infos de la couleur sélectionnée Spray_Rafficher_infos(Couleur_selectionnee,1); // On efface les anciens TAGs Fenetre_Effacer_tags(); - // Tagger la couleur s‚lectionn‚e en blanc + // Tagger la couleur sélectionnée en blanc Stencil_Tagger_couleur(Couleur_selectionnee,CM_Blanc); break; @@ -4691,7 +4703,7 @@ void Bouton_Spray_Menu(void) if (!Mouse_K) switch (Touche) { - case 0x0029 : // R‚cup‚ration d'une couleur derriŠre le menu + case 0x0029 : // Récupération d'une couleur derrière le menu case 0x0033 : Recuperer_couleur_derriere_fenetre(&Couleur,&Click); if (Click) @@ -4699,7 +4711,7 @@ void Bouton_Spray_Menu(void) Effacer_curseur(); Stencil_Tagger_couleur(Couleur_selectionnee,(Spray_Multi_flow[Couleur_selectionnee])?CM_Noir:CM_Clair); - // Mettre la couleur s‚lectionn‚e … jour suivant le click + // Mettre la couleur sélectionnée à jour suivant le click Couleur_selectionnee=Couleur; if (Click==2) Spray_Multi_flow[Couleur_selectionnee]=0; @@ -4707,7 +4719,7 @@ void Bouton_Spray_Menu(void) if (Spray_Multi_flow[Couleur_selectionnee]==0) Spray_Multi_flow[Couleur_selectionnee]=Spray_Init; - // Tagger la couleur s‚lectionn‚e en blanc + // Tagger la couleur sélectionnée en blanc Stencil_Tagger_couleur(Couleur_selectionnee,CM_Blanc); Spray_Rafficher_infos(Couleur_selectionnee,1); Afficher_curseur(); @@ -4719,9 +4731,9 @@ void Bouton_Spray_Menu(void) Fermer_fenetre(); /* - // Tant que l'on aura pas r‚solu le problŠme du d‚senclenchement du mode - // de dessin pr‚cedent, il faudra laisser ‡a en remarque et donc passer en - // spray mˆme si on a click‚ sur Cancel (idem pour OK (un peu plus bas)). + // Tant que l'on aura pas résolu le problème du désenclenchement du mode + // de dessin précedent, il faudra laisser ça en remarque et donc passer en + // spray même si on a clické sur Cancel (idem pour OK (un peu plus bas)). if (Bouton_clicke==1) // Cancel { if (Operation_en_cours!=OPERATION_SPRAY) @@ -4758,9 +4770,9 @@ void Dessiner_trame_zoomee(short Orig_X, short Orig_Y) short Debut_Y=Fenetre_Pos_Y+(Menu_Facteur_Y*78); Taille_X=Menu_Facteur_X*5; // |_ Taille d'une case - Taille_Y=Menu_Facteur_Y*5; // | de la trame zoom‚e + Taille_Y=Menu_Facteur_Y*5; // | de la trame zoomée - // On efface de contenu pr‚c‚dent + // On efface de contenu précédent Block(Orig_X,Orig_Y, Menu_Facteur_X*Fenetre_Liste_boutons_special->Largeur, Menu_Facteur_Y*Fenetre_Liste_boutons_special->Hauteur,CM_Clair); @@ -4782,7 +4794,7 @@ void Dessiner_trame_zoomee(short Orig_X, short Orig_Y) } // Dessiner la preview de la trame - Taille_X=Menu_Facteur_X*51; // |_ Taille de la fenˆtre + Taille_X=Menu_Facteur_X*51; // |_ Taille de la fenêtre Taille_Y=Menu_Facteur_Y*71; // | de la preview for (Pos_Y=0; Pos_Y plus grande - short Preview_Fin_Y; // | rapidit‚. + short Preview_Fin_Y; // | rapidité. memcpy(Old_Trame,Trame,256); @@ -4949,10 +4961,10 @@ void Bouton_Trame_Menu(void) Temp=CM_Blanc; else Temp=CM_Noir; - // Affichage du pixel dans la fenˆtre zoom‚e + // Affichage du pixel dans la fenêtre zoomée Block(Orig_X+(Old_Pos_X*Pos_X), Orig_Y+(Old_Pos_Y*Pos_Y), Pos_X-Menu_Facteur_X, Pos_Y-Menu_Facteur_Y, Temp); - // Mise … jour de la preview + // Mise à jour de la preview for (Pos_Y=Preview_Debut_Y+Old_Pos_Y; Pos_Y>1); break; - case 8 : // R‚duire hauteur + case 8 : // Réduire hauteur if (Trame_Hauteur>1) { Effacer_curseur(); @@ -5028,7 +5040,7 @@ void Bouton_Trame_Menu(void) } break; - case 10 : // R‚duire largeur + case 10 : // Réduire largeur if (Trame_Largeur>1) { Effacer_curseur(); @@ -5054,7 +5066,7 @@ void Bouton_Trame_Menu(void) } break; - case 12 : // Toggle octets ins‚r‚s + case 12 : // Toggle octets insérés Effacer_curseur(); Octet_insere=!Octet_insere; Block(Fenetre_Pos_X+(Menu_Facteur_X*(Bouton_Octet_insere->Pos_X+2)), @@ -5115,7 +5127,7 @@ void Bouton_Trame_Menu(void) Afficher_curseur(); break; - default : // Boutons de trames pr‚d‚finies + default : // Boutons de trames prédéfinies Effacer_curseur(); Copier_trame_predefinie(Bouton_clicke-17); Dessiner_trame_zoomee(Orig_X,Orig_Y); @@ -5481,7 +5493,7 @@ void Bouton_Effets(void) /* BOUTON_GRADRECT --BOUTON_SPHERES (Ellipses d‚grad‚es … am‚liorer) +-BOUTON_SPHERES (Ellipses dégradées à améliorer) BOUTON_TEXTE -BOUTON_AJUSTER (Effets sur l'image) -BOUTON_EFFETS_BROSSE (Distort, Rot. any angle) diff --git a/divers.c b/divers.c index caec9a87..fe32027b 100644 --- a/divers.c +++ b/divers.c @@ -74,11 +74,11 @@ void Attendre_fin_de_click(void) { do { - SDL_PumpEvents(); - puts("Attente fin clic..."); + SDL_PumpEvents(); } - while(SDL_GetMouseState(NULL, NULL)&(SDL_BUTTON(1) | SDL_BUTTON(2) | SDL_BUTTON(3))); //On attend tant que l'un des trois boutons est enfoncé + while(SDL_GetMouseState(NULL, NULL)&SDL_BUTTON(1)); //On attend tant que le bouton est enfoncé (TODO: vérif clic droit aussi ?) Mouse_K=0; + INPUT_Nouveau_Mouse_K=0; } void Effacer_image_courante_Stencil(byte Couleur, byte * Pochoir) @@ -126,9 +126,8 @@ void Get_input(void) { case SDL_MOUSEMOTION: //Mouvement de la souris - INPUT_Nouveau_Mouse_X = event.motion.x; - INPUT_Nouveau_Mouse_Y = event.motion.y; - puts("Get_input: Mouse_Facteur_De_Correction_X et Mouse_Facteur_De_Correction_Y non gérés!"); + INPUT_Nouveau_Mouse_X = event.motion.x*Mouse_Facteur_de_correction_X; + INPUT_Nouveau_Mouse_Y = event.motion.y*Mouse_Facteur_de_correction_Y; break; case SDL_MOUSEBUTTONDOWN: //Clic sur un des boutons de la souris @@ -424,17 +423,17 @@ void Initialiser_chrono(dword Delai) void Wait_VBL(void) { - puts("Wait_VBL non implémenté!\n"); + puts("Wait_VBL non implémenté!"); } void Passer_en_mode_texte(byte Nb_lignes) { - puts("Passer_en_mode_texte non implémenté!\n"); + puts("Passer_en_mode_texte non implémenté!"); } void Pixel_dans_brosse (word X,word Y,byte Couleur) { - puts("Pixel_dans_brosse non implémenté!\n"); + puts("Pixel_dans_brosse non implémenté!"); } byte Lit_pixel_dans_brosse (word X,word Y) @@ -515,15 +514,22 @@ void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,short Brosse_Hauteur,word Largeur_image) { - int i,j; - for(i=0;i entrelacé + signed char Refresh; // <0 => entrelacÚ word Mode_VESA_de_base; void * Pointeur; byte Etat; // 0:Cool 1:OK ; 2:Bof ; 3:Naze ; si on rajoute +128 => incompatible @@ -81,16 +81,16 @@ GLOBAL struct S_Mode_video Mode_video[NB_MODES_VIDEO]; GLOBAL struct { - byte Granularite; // Facteur de gestion de la granularité - byte Code_fenetres; // Utilisation des fenˆtres: 0=AA 1=BB 2=AB 3=BA + byte Granularite; // Facteur de gestion de la granularitÚ + byte Code_fenetres; // Utilisation des fenêtres: 0=AA 1=BB 2=AB 3=BA byte * WinFuncPtr; byte * Adresse_physique_LFB; // Si = 0 => Pas de LFB - dword Taille_LFB; // Taille de la mémoire LFB + dword Taille_LFB; // Taille de la mÚmoire LFB } VESA_Mode_Infos[4]; - // Palette par défaut + // Palette par dÚfaut GLOBAL T_Palette Palette_defaut; @@ -103,10 +103,10 @@ GLOBAL byte CM_Blanc; GLOBAL byte CM_Trans; GLOBAL struct Composantes Coul_menu_pref[4]; - // Etat des entrées + // Etat des entrÚes GLOBAL word Mouse_X; // Abscisse de la souris -GLOBAL word Mouse_Y; // Ordonnée de la souris +GLOBAL word Mouse_Y; // OrdonnÚe de la souris GLOBAL byte Mouse_K; // Etat des boutons de la souris GLOBAL word Touche; GLOBAL Uint8* Etat_Du_Clavier; // Scancode de la touche en cours et etat des touches de ctrl @@ -117,20 +117,20 @@ GLOBAL byte Mouse_Facteur_de_correction_Y; GLOBAL byte Autoriser_changement_de_couleur_pendant_operation; - // Données sur le curseur + // DonnÚes sur le curseur GLOBAL byte Forme_curseur; -GLOBAL byte Forme_curseur_avant_fenetre; // Forme du curseur avant l'ouverture d'une fenˆtre +GLOBAL byte Forme_curseur_avant_fenetre; // Forme du curseur avant l'ouverture d'une fenêtre GLOBAL byte Forcer_affichage_curseur; // Forcer l'affichage du curseur au prochain Get_input(); GLOBAL byte Cacher_curseur; -GLOBAL byte Curseur_dans_menu; // Booléen "Le curseur se trouve dans le menu" -GLOBAL byte Curseur_dans_menu_precedent; // Booléen "Le curseur se trouvait précédemment dans le menu" -GLOBAL word Curseur_Decalage_X[NB_SPRITES_CURSEUR]; // Coordonnées X du point sensible de curseurs en sprite -GLOBAL word Curseur_Decalage_Y[NB_SPRITES_CURSEUR]; // Coordonnées Y du point sensible de curseurs en sprite +GLOBAL byte Curseur_dans_menu; // BoolÚen "Le curseur se trouve dans le menu" +GLOBAL byte Curseur_dans_menu_precedent; // BoolÚen "Le curseur se trouvait prÚcÚdemment dans le menu" +GLOBAL word Curseur_Decalage_X[NB_SPRITES_CURSEUR]; // CoordonnÚes X du point sensible de curseurs en sprite +GLOBAL word Curseur_Decalage_Y[NB_SPRITES_CURSEUR]; // CoordonnÚes Y du point sensible de curseurs en sprite GLOBAL byte SPRITE_CURSEUR[NB_SPRITES_CURSEUR][HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Dessins des sprites de curseur GLOBAL byte FOND_CURSEUR[HAUTEUR_SPRITE_CURSEUR][LARGEUR_SPRITE_CURSEUR]; // Contenu du dessous du curseur - // Données sur le pinceau + // DonnÚes sur le pinceau GLOBAL byte Pinceau_Forme; GLOBAL byte Pinceau_Forme_avant_fill; @@ -153,120 +153,121 @@ GLOBAL short Pinceau_Decalage_Y; // Commandes graphiques -GLOBAL fonction_afficheur Pixel; // Affiche un point … l'écran +GLOBAL fonction_afficheur Pixel; // Affiche un point à l'écran GLOBAL fonction_afficheur Pixel_dans_menu;// Affiche un point dans le menu (ou pas si le menu est invisible) -GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l'écran +GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l'Úcran GLOBAL fonction_effaceur Clear_screen; // Efface rapidement tout l'écran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_display Display_screen; // Affiche rapidement tout l'écran (en faisant attention de ne pas effacer le menu) -GLOBAL fonction_block Block; // Affiche rapidement un bloc … l'écran -GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image … l'écran en mode normal (pas en mode loupe) -GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image … l'écran en mode loupe -GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image … l'écran en fonction de l'état du mode loupe +GLOBAL fonction_block Block; // Affiche rapidement un bloc à l'écran +GLOBAL fonction_block Block_Fast; // Affiche rapidement un bloc à l'écran sans rafraichir +GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image à l'Úcran en mode normal (pas en mode loupe) +GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image à l'Úcran en mode loupe +GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image à l'Úcran en fonction de l'Útat du mode loupe GLOBAL fonction_Ligne_XOR Ligne_horizontale_XOR;// Affiche une ligne horizontale en XOR (pour placer la loupe) GLOBAL fonction_Ligne_XOR Ligne_verticale_XOR; // Affiche une ligne verticale en XOR (pour placer la loupe) GLOBAL fonction_display_brush_Color Display_brush_Color; // Affiche une partie de la brosse en couleur GLOBAL fonction_display_brush_Mono Display_brush_Mono; // Affiche une partie de la brosse en monochrome -GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichée … l'écran -GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'écran avec les nouvelles couleurs du menu +GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichÚe à l'Úcran +GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'Úcran avec les nouvelles couleurs du menu GLOBAL fonction_procsline Afficher_ligne; // Afficher une ligne GLOBAL fonction_procsline Lire_ligne; // Afficher ou lire une ligne -GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomée … l'écran (en faisant attention de ne pas effacer le menu) +GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomÚe à l'Úcran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_display_brush_Color_zoom Display_brush_Color_zoom; GLOBAL fonction_display_brush_Mono_zoom Display_brush_Mono_zoom; GLOBAL fonction_display_brush_Color_zoom Clear_brush_zoom; - // Données sur les dimensions de l'écran + // DonnÚes sur les dimensions de l'Úcran -GLOBAL int Resolution_actuelle; // Résolution graphique courante -GLOBAL short Ecran_original_X; // |_ Dimensions de l'écran d'origine de -GLOBAL short Ecran_original_Y; // | l'image qui vient d'ˆtre chargée. -GLOBAL short Largeur_ecran; // Largeur de l'écran -GLOBAL short Hauteur_ecran; // Hauteur de l'écran +GLOBAL int Resolution_actuelle; // RÚsolution graphique courante +GLOBAL short Ecran_original_X; // |_ Dimensions de l'Úcran d'origine de +GLOBAL short Ecran_original_Y; // | l'image qui vient d'être chargÚe. +GLOBAL short Largeur_ecran; // Largeur de l'Úcran +GLOBAL short Hauteur_ecran; // Hauteur de l'Úcran GLOBAL short Limite_Haut; // | GLOBAL short Limite_Bas; // |_ Limites dans lesquelles -GLOBAL short Limite_Gauche; // | on peut écrire +GLOBAL short Limite_Gauche; // | on peut Úcrire GLOBAL short Limite_Droite; // | GLOBAL short Limite_visible_Bas; // |_ Derniers points visibles -GLOBAL short Limite_visible_Droite; // | "… l'image" +GLOBAL short Limite_visible_Droite; // | "à l'image" GLOBAL short Limite_Haut_Zoom; // | GLOBAL short Limite_Bas_Zoom; // |_ Limites dans lesquelles on peut -GLOBAL short Limite_Gauche_Zoom; // | écrire dans la partie zoomée +GLOBAL short Limite_Gauche_Zoom; // | Úcrire dans la partie zoomÚe GLOBAL short Limite_Droite_Zoom; // | -GLOBAL short Limite_visible_Bas_Zoom; // |_ Derniers points visibles "… -GLOBAL short Limite_visible_Droite_Zoom; // | l'image" dans la partie zoomée +GLOBAL short Limite_visible_Bas_Zoom; // |_ Derniers points visibles "à +GLOBAL short Limite_visible_Droite_Zoom; // | l'image" dans la partie zoomÚe GLOBAL byte * Buffer_de_ligne_horizontale; // Buffer d'affichage de lignes - // Données sur l'image actuelle: + // DonnÚes sur l'image actuelle: GLOBAL byte * Principal_Ecran; // Ecran virtuel courant -GLOBAL T_Palette Principal_Palette; // Palette de l'écran en cours +GLOBAL T_Palette Principal_Palette; // Palette de l'Úcran en cours -GLOBAL byte Principal_Image_modifiee; // L'image courante a été modifiée -GLOBAL short Principal_Largeur_image; // Largeur de l'image dans laquelle l'utilisateur désire travailler -GLOBAL short Principal_Hauteur_image; // Hauteur de l'image dans laquelle l'utilisateur désire travailler -GLOBAL short Principal_Decalage_X; // Décalage en X de l'écran par rapport au début de l'image -GLOBAL short Principal_Decalage_Y; // Décalage en Y de l'écran par rapport au début de l'image +GLOBAL byte Principal_Image_modifiee; // L'image courante a ÚtÚ modifiÚe +GLOBAL short Principal_Largeur_image; // Largeur de l'image dans laquelle l'utilisateur dÚsire travailler +GLOBAL short Principal_Hauteur_image; // Hauteur de l'image dans laquelle l'utilisateur dÚsire travailler +GLOBAL short Principal_Decalage_X; // DÚcalage en X de l'Úcran par rapport au dÚbut de l'image +GLOBAL short Principal_Decalage_Y; // DÚcalage en Y de l'Úcran par rapport au dÚbut de l'image GLOBAL short Ancien_Principal_Decalage_X; GLOBAL short Ancien_Principal_Decalage_Y; GLOBAL char Principal_Repertoire_fichier[256]; // |_ Nom complet = GLOBAL char Principal_Nom_fichier[13]; // | Repertoire_fichier+"\"+Nom_fichier -GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et écrire le fichier +GLOBAL byte Principal_Format_fichier; // Format auquel il faut lire et Úcrire le fichier GLOBAL byte Principal_Format; // Format du fileselect -GLOBAL short Principal_File_list_Position; // Début de la partie affichée dans la liste de fichiers -GLOBAL short Principal_File_list_Decalage; // Décalage de la barre de sélection dans le fileselector -GLOBAL char Principal_Repertoire_courant[256]; // Répertoire actuel sur disque +GLOBAL short Principal_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers +GLOBAL short Principal_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector +GLOBAL char Principal_Repertoire_courant[256]; // RÚpertoire actuel sur disque GLOBAL char Principal_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image GLOBAL short Principal_Split; // Position en X du bord gauche du split de la loupe GLOBAL short Principal_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe -GLOBAL float Principal_Proportion_split; // Proportion de la zone non-zoomée par rapport … l'écran +GLOBAL float Principal_Proportion_split; // Proportion de la zone non-zoomÚe par rapport à l'Úcran - // Données sur le brouillon: + // DonnÚes sur le brouillon: GLOBAL byte * Brouillon_Ecran; // Ecran virtuel brouillon -GLOBAL T_Palette Brouillon_Palette; // Palette de l'écran de brouillon +GLOBAL T_Palette Brouillon_Palette; // Palette de l'Úcran de brouillon -GLOBAL byte Brouillon_Image_modifiee; // Le brouillon a été modifié -GLOBAL short Brouillon_Largeur_image; // Largeur du brouillon dans laquelle l'utilisateur désire travailler -GLOBAL short Brouillon_Hauteur_image; // Hauteur du brouillon dans laquelle l'utilisateur désire travailler -GLOBAL short Brouillon_Decalage_X; // Décalage en X du brouillon par rapport au début de l'image -GLOBAL short Brouillon_Decalage_Y; // Décalage en Y du brouillon par rapport au début de l'image +GLOBAL byte Brouillon_Image_modifiee; // Le brouillon a ÚtÚ modifiÚ +GLOBAL short Brouillon_Largeur_image; // Largeur du brouillon dans laquelle l'utilisateur dÚsire travailler +GLOBAL short Brouillon_Hauteur_image; // Hauteur du brouillon dans laquelle l'utilisateur dÚsire travailler +GLOBAL short Brouillon_Decalage_X; // DÚcalage en X du brouillon par rapport au dÚbut de l'image +GLOBAL short Brouillon_Decalage_Y; // DÚcalage en Y du brouillon par rapport au dÚbut de l'image GLOBAL short Ancien_Brouillon_Decalage_X; GLOBAL short Ancien_Brouillon_Decalage_Y; GLOBAL char Brouillon_Repertoire_fichier[256]; // |_ Nom complet = GLOBAL char Brouillon_Nom_fichier[13]; // | Repertoire_fichier+"\"+Nom_fichier -GLOBAL byte Brouillon_Format_fichier; // Format auquel il faut lire et écrire le fichier +GLOBAL byte Brouillon_Format_fichier; // Format auquel il faut lire et Úcrire le fichier GLOBAL byte Brouillon_Format; // Format du fileselect -GLOBAL short Brouillon_File_list_Position; // Début de la partie affichée dans la liste de fichiers -GLOBAL short Brouillon_File_list_Decalage; // Décalage de la barre de sélection dans le fileselector -GLOBAL char Brouillon_Repertoire_courant[256]; // Répertoire actuel sur disque +GLOBAL short Brouillon_File_list_Position; // DÚbut de la partie affichÚe dans la liste de fichiers +GLOBAL short Brouillon_File_list_Decalage; // DÚcalage de la barre de sÚlection dans le fileselector +GLOBAL char Brouillon_Repertoire_courant[256]; // RÚpertoire actuel sur disque GLOBAL char Brouillon_Commentaire[TAILLE_COMMENTAIRE+1]; // Commentaire de l'image GLOBAL short Brouillon_Split; // Position en X du bord gauche du split de la loupe GLOBAL short Brouillon_X_Zoom; // (Menu_Facteur_X) + Position en X du bord droit du split de la loupe -GLOBAL float Brouillon_Proportion_split; // Proportion de la zone non-zoomée par rapport … l'écran +GLOBAL float Brouillon_Proportion_split; // Proportion de la zone non-zoomÚe par rapport à l'Úcran GLOBAL byte Brouillon_Loupe_Mode; // On est en mode loupe dans le brouillon GLOBAL word Brouillon_Loupe_Facteur; // Facteur de zoom dans le brouillon -GLOBAL word Brouillon_Loupe_Hauteur; // Largeur de la fenˆtre de zoom dans le brouillon -GLOBAL word Brouillon_Loupe_Largeur; // Hauteur de la fenˆtre de zoom dans le brouillon -GLOBAL short Brouillon_Loupe_Decalage_X;// Decalage horizontal de la fenˆtre de zoom dans le brouillon -GLOBAL short Brouillon_Loupe_Decalage_Y;// Decalage vertical de la fenˆtre de zoom dans le brouillon +GLOBAL word Brouillon_Loupe_Hauteur; // Largeur de la fenêtre de zoom dans le brouillon +GLOBAL word Brouillon_Loupe_Largeur; // Hauteur de la fenêtre de zoom dans le brouillon +GLOBAL short Brouillon_Loupe_Decalage_X;// Decalage horizontal de la fenêtre de zoom dans le brouillon +GLOBAL short Brouillon_Loupe_Decalage_Y;// Decalage vertical de la fenêtre de zoom dans le brouillon -GLOBAL byte Masque_copie_couleurs[256]; // Tableau des couleurs … copier vers le brouillon +GLOBAL byte Masque_copie_couleurs[256]; // Tableau des couleurs à copier vers le brouillon // Sauvegarde de l'image: -GLOBAL byte * Ecran_backup; // Sauvegarde de l'écran virtuel courant +GLOBAL byte * Ecran_backup; // Sauvegarde de l'Úcran virtuel courant GLOBAL S_Liste_de_pages * Principal_Backups; // Liste des pages de backup de la page principale GLOBAL S_Liste_de_pages * Brouillon_Backups; // Liste des pages de backup de la page de brouillon - // Données sur la brosse: + // DonnÚes sur la brosse: GLOBAL byte * Brosse; // Sprite de la brosse GLOBAL word Brosse_Decalage_X; // Centre horizontal de la brosse @@ -277,7 +278,7 @@ GLOBAL word Brosse_Hauteur; // Hauteur de la brosse GLOBAL char Brosse_Repertoire_fichier[256]; // | GLOBAL char Brosse_Nom_fichier[13]; // | GLOBAL byte Brosse_Format_fichier; // | Infos sur le -GLOBAL byte Brosse_Format; // |_ sélecteur de +GLOBAL byte Brosse_Format; // |_ sÚlecteur de GLOBAL short Brosse_File_list_Position; // | fichiers de la GLOBAL short Brosse_File_list_Decalage; // | brosse. GLOBAL char Brosse_Repertoire_courant[256]; // | @@ -287,28 +288,28 @@ GLOBAL byte Brosse_Centre_rotation_defini; // | Infos sur le GLOBAL short Brosse_Centre_rotation_X; // |- centre de rotation GLOBAL short Brosse_Centre_rotation_Y; // | de la brosse - // Données sur le menu + // DonnÚes sur le menu -GLOBAL byte Menu_visible; // Le menu est actif … l'écran -GLOBAL word Menu_Ordonnee; // Ordonnée o— commence le menu -GLOBAL word Menu_Ordonnee_Texte; // Ordonnée o— commence le texte dans le menu +GLOBAL byte Menu_visible; // Le menu est actif à l'Úcran +GLOBAL word Menu_Ordonnee; // OrdonnÚe où commence le menu +GLOBAL word Menu_Ordonnee_Texte; // OrdonnÚe où commence le texte dans le menu GLOBAL word Menu_Facteur_X; // Facteur de grossissement du menu en X GLOBAL word Menu_Facteur_Y; // Facteur de grossissement du menu en Y GLOBAL word Menu_Taille_couleur; // Taille d'une couleur de la palette du menu - // Données sur la fenˆtre de menu + // DonnÚes sur la fenêtre de menu GLOBAL byte Une_fenetre_est_ouverte; -GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenˆtre dans l'écran -GLOBAL word Fenetre_Pos_Y; // Position du bord haut de la fenˆtre dans l'écran -GLOBAL word Fenetre_Largeur; // Largeur de la fenˆtre -GLOBAL word Fenetre_Hauteur; // Hauteur de la fenˆtre +GLOBAL word Fenetre_Pos_X; // Position du bord gauche de la fenêtre dans l'Úcran +GLOBAL word Fenetre_Pos_Y; // Position du bord haut de la fenêtre dans l'Úcran +GLOBAL word Fenetre_Largeur; // Largeur de la fenêtre +GLOBAL word Fenetre_Hauteur; // Hauteur de la fenêtre -GLOBAL byte Menu_visible_avant_fenetre; // Le menu était visible avant d'ouvir une fenˆtre -GLOBAL word Menu_Ordonnee_avant_fenetre; // Ordonnée du menu avant d'ouvrir une fenˆtre -GLOBAL byte Cacher_pinceau_avant_fenetre;// Le pinceau étatit déj… caché avant l'ouverture de la fenetre? +GLOBAL byte Menu_visible_avant_fenetre; // Le menu Útait visible avant d'ouvir une fenêtre +GLOBAL word Menu_Ordonnee_avant_fenetre; // OrdonnÚe du menu avant d'ouvrir une fenêtre +GLOBAL byte Cacher_pinceau_avant_fenetre;// Le pinceau Útatit dÚjà cachÚ avant l'ouverture de la fenetre? GLOBAL word Nb_boutons_fenetre; GLOBAL struct Fenetre_Bouton_normal * Fenetre_Liste_boutons_normal; @@ -321,44 +322,44 @@ GLOBAL int Fenetre_Attribut2; -// Définition des boutons //////////////////////////////////////////////////// +// DÚfinition des boutons //////////////////////////////////////////////////// GLOBAL struct { // Informations sur l'aspect du bouton (graphisme): - word Decalage_X; // Décalage par rapport … la gauche du menu - word Decalage_Y; // Décalage par rapport au haut du menu + word Decalage_X; // DÚcalage par rapport à la gauche du menu + word Decalage_Y; // DÚcalage par rapport au haut du menu word Largeur; // Largeur du bouton word Hauteur; // Hauteur du bouton - byte Enfonce; // Le bouton est enfoncé + byte Enfonce; // Le bouton est enfoncÚ byte Forme; // Forme du bouton // Information sur les clicks de la souris: - fonction_action Gauche; // Action déclenchée par un click gauche sur le bouton - fonction_action Droite; // Action déclenchée par un click droit sur le bouton - word Raccourci_gauche; // Raccourci clavier équivalent … un click gauche sur le bouton - word Raccourci_droite; // Raccourci clavier équivalent … un click droit sur le bouton + fonction_action Gauche; // Action dÚclenchÚe par un click gauche sur le bouton + fonction_action Droite; // Action dÚclenchÚe par un click droit sur le bouton + word Raccourci_gauche; // Raccourci clavier Úquivalent à un click gauche sur le bouton + word Raccourci_droite; // Raccourci clavier Úquivalent à un click droit sur le bouton - // Informations sur le désenclenchement du bouton géré par le moteur: - fonction_action Desenclencher; // Action appelée lors du désenclenchement du bouton + // Informations sur le dÚsenclenchement du bouton gÚrÚ par le moteur: + fonction_action Desenclencher; // Action appelÚe lors du dÚsenclenchement du bouton byte Famille; // Ensemble de boutons auquel celui-ci appartient } Bouton[NB_BOUTONS]; -// Informations sur les différents modes de dessin +// Informations sur les diffÚrents modes de dessin GLOBAL fonction_effet Fonction_effet; GLOBAL byte * FX_Feedback_Ecran; -GLOBAL byte Exclude_color[256]; // Couleurs … exclure pour Meilleure_couleur +GLOBAL byte Exclude_color[256]; // Couleurs à exclure pour Meilleure_couleur // Mode smear: -GLOBAL byte Smear_Mode; // Le mode smear est enclenché -GLOBAL byte Smear_Debut; // On vient juste de commencer une opération en Smear +GLOBAL byte Smear_Mode; // Le mode smear est enclenchÚ +GLOBAL byte Smear_Debut; // On vient juste de commencer une opÚration en Smear GLOBAL byte * Smear_Brosse; // Sprite de la brosse de Smear GLOBAL word Smear_Brosse_Largeur; // Largeur de la brosse de Smear GLOBAL word Smear_Brosse_Hauteur; // Hauteur de la brosse de Smear @@ -367,59 +368,59 @@ GLOBAL short Smear_Min_X,Smear_Max_X,Smear_Min_Y,Smear_Max_Y; // Bornes de la Br // Mode shade: GLOBAL struct T_Shade Shade_Liste[8]; // Listes de shade -GLOBAL byte Shade_Actuel; // Numéro du shade en cours +GLOBAL byte Shade_Actuel; // NumÚro du shade en cours GLOBAL byte * Shade_Table; // Table de conversion de shade en cours GLOBAL byte Shade_Table_gauche[256]; // Table de conversion de shade pour un clic gauche GLOBAL byte Shade_Table_droite[256]; // Table de conversion de shade pour un clic droit -GLOBAL byte Shade_Mode; // Le mode shade est enclenché +GLOBAL byte Shade_Mode; // Le mode shade est enclenchÚ -GLOBAL byte Quick_shade_Mode; // Le mode quick-shade est enclenché +GLOBAL byte Quick_shade_Mode; // Le mode quick-shade est enclenchÚ GLOBAL byte Quick_shade_Step; // Pas du mode quick-shade GLOBAL byte Quick_shade_Loop; // Normal / Loop / No sat. // Mode stencil: -GLOBAL byte Stencil_Mode; // Le mode stencil est enclenché -GLOBAL byte Stencil[256]; // Tableau des couleurs protégées +GLOBAL byte Stencil_Mode; // Le mode stencil est enclenchÚ +GLOBAL byte Stencil[256]; // Tableau des couleurs protÚgÚes // Mode grille: -GLOBAL byte Snap_Mode; // Le mode grille est enclenché +GLOBAL byte Snap_Mode; // Le mode grille est enclenchÚ GLOBAL short Snap_Largeur; // Largeur entre 2 points de la grille GLOBAL short Snap_Hauteur; // Hauteur entre 2 points de la grille -GLOBAL short Snap_Decalage_X; // Position en X du point le + … gauche +GLOBAL short Snap_Decalage_X; // Position en X du point le + à gauche GLOBAL short Snap_Decalage_Y; // Position en Y du point le + en haut // Mode trame: -GLOBAL byte Trame_Mode; // Le mode Trame est enclenché +GLOBAL byte Trame_Mode; // Le mode Trame est enclenchÚ GLOBAL byte Trame[16][16]; // Sprite de la trame -GLOBAL word TRAME_PREDEFINIE[12][16]; // Trames préséfinies (compactées sur 16*16 bits) +GLOBAL word TRAME_PREDEFINIE[12][16]; // Trames prÚsÚfinies (compactÚes sur 16*16 bits) GLOBAL short Trame_Largeur; // Largeur de la trame GLOBAL short Trame_Hauteur; // Hauteur de la trame // Mode colorize: -GLOBAL byte Colorize_Mode; // Le mode Colorize est enclenché -GLOBAL byte Colorize_Opacite; // Intensité du Colorize +GLOBAL byte Colorize_Mode; // Le mode Colorize est enclenchÚ +GLOBAL byte Colorize_Opacite; // IntensitÚ du Colorize GLOBAL byte Colorize_Mode_en_cours; // Le type de Colorize en cours (0-2) GLOBAL word Table_de_multiplication_par_Facteur_A[64]; GLOBAL word Table_de_multiplication_par_Facteur_B[64]; // Mode smooth: -GLOBAL byte Smooth_Mode; // Le mode Smooth est enclenché +GLOBAL byte Smooth_Mode; // Le mode Smooth est enclenchÚ GLOBAL byte Smooth_Matrice[3][3]; // La matrice du Smooth actuel // Mode Tiling: -GLOBAL byte Tiling_Mode; // Le mode Tiling est enclenché -GLOBAL short Tiling_Decalage_X; // Décalage du tiling en X -GLOBAL short Tiling_Decalage_Y; // Décalage du tiling en Y +GLOBAL byte Tiling_Mode; // Le mode Tiling est enclenchÚ +GLOBAL short Tiling_Decalage_X; // DÚcalage du tiling en X +GLOBAL short Tiling_Decalage_Y; // DÚcalage du tiling en Y // Mode Mask -GLOBAL byte Mask_Mode; // Le mode Masque est enclenché +GLOBAL byte Mask_Mode; // Le mode Masque est enclenchÚ GLOBAL byte Mask[256]; // Tableau des couleurs constituant le masque // Mode loupe: @@ -439,7 +440,7 @@ GLOBAL word TABLE_ZOOM[NB_FACTEURS_DE_ZOOM][512]; extern word FACTEUR_ZOOM[NB_FACTEURS_DE_ZOOM]; #endif - // Données sur les ellipses et les cercles: + // DonnÚes sur les ellipses et les cercles: GLOBAL dword Table_des_carres[1025]; GLOBAL long Ellipse_Curseur_X; @@ -452,36 +453,36 @@ GLOBAL long Cercle_Curseur_X; GLOBAL long Cercle_Curseur_Y; GLOBAL long Cercle_Limite; - // Données sur les dégradés: + // DonnÚes sur les dÚgradÚs: -GLOBAL short Degrade_Borne_Inferieure; // Plus petite couleur englobée par le dégradé -GLOBAL short Degrade_Borne_Superieure; // Plus grande couleur englobée par le dégradé -GLOBAL int Degrade_Inverse; // Booléen "Le dégradé est en réalité inversé" +GLOBAL short Degrade_Borne_Inferieure; // Plus petite couleur englobÚe par le dÚgradÚ +GLOBAL short Degrade_Borne_Superieure; // Plus grande couleur englobÚe par le dÚgradÚ +GLOBAL int Degrade_Inverse; // BoolÚen "Le dÚgradÚ est en rÚalitÚ inversÚ" GLOBAL long Degrade_Intervalle_bornes; // = Abs(Degrade_Borne_Inferieure-Degrade_Borne_Superieure)+1 -GLOBAL long Degrade_Intervalle_total; // Valeur maximum des indices passés … la fonction de dégradé (!!! >0 !!!) -GLOBAL long Degrade_Melange_aleatoire; // Facteur de mélange (1-256+) du dégradé -GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du dégradé, varie selon la méthode choisie par l'utilisateur. +GLOBAL long Degrade_Intervalle_total; // Valeur maximum des indices passÚs à la fonction de dÚgradÚ (!!! >0 !!!) +GLOBAL long Degrade_Melange_aleatoire; // Facteur de mÚlange (1-256+) du dÚgradÚ +GLOBAL fonction_degrade Traiter_degrade; // Fonction de traitement du dÚgradÚ, varie selon la mÚthode choisie par l'utilisateur. GLOBAL fonction_afficheur Traiter_pixel_de_degrade; // Redirection de l'affichage -GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // Données de tous les dégradés -GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dégradé courant +GLOBAL struct T_Degrade_Tableau Degrade_Tableau[16]; // DonnÚes de tous les dÚgradÚs +GLOBAL int Degrade_Courant; // Indice du tableau correspondant au dÚgradÚ courant - // Données sur le Spray: + // DonnÚes sur le Spray: GLOBAL byte Spray_Mode; // Mode Mono(1) ou Multicolore(0) -GLOBAL short Spray_Size; // DiamŠtre du spray en pixels -GLOBAL byte Spray_Delay; // Délai en VBLs entre 2 "pschiitt" -GLOBAL byte Spray_Mono_flow; // Nombre de pixels qui sortent en mˆme temps en mono +GLOBAL short Spray_Size; // Diamètre du spray en pixels +GLOBAL byte Spray_Delay; // DÚlai en VBLs entre 2 "pschiitt" +GLOBAL byte Spray_Mono_flow; // Nombre de pixels qui sortent en même temps en mono GLOBAL byte Spray_Multi_flow[256]; // Idem pour chaque couleur - // Données diverses sur le programme: + // DonnÚes diverses sur le programme: GLOBAL byte Sortir_du_programme; -GLOBAL char Repertoire_du_programme[256]; // Répertoire dans lequel se trouve le programme -GLOBAL char Repertoire_initial[256]; // Répertoire … partir duquel … été lancé le programme +GLOBAL char Repertoire_du_programme[256]; // RÚpertoire dans lequel se trouve le programme +GLOBAL char Repertoire_initial[256]; // RÚpertoire à partir duquel à ÚtÚ lancÚ le programme GLOBAL byte Fore_color; GLOBAL byte Back_color; GLOBAL byte Mode_de_dessin_en_cours; @@ -489,7 +490,7 @@ GLOBAL byte Courbe_en_cours; GLOBAL byte Ligne_en_cours; GLOBAL byte Couleur_debut_palette; GLOBAL byte Un_fichier_a_ete_passe_en_parametre; -GLOBAL byte Une_resolution_a_ete_passee_en_parametre; // utilisée uniquement si la variable précédente est … 1 +GLOBAL byte Une_resolution_a_ete_passee_en_parametre; // utilisÚe uniquement si la variable prÚcÚdente est à 1 // Variables concernant l'OBJ DIVERS @@ -512,13 +513,13 @@ GLOBAL word MODE_X_Largeur_de_ligne; GLOBAL dword MODE_X_Valeur_initiale_de_esi; GLOBAL dword MODE_X_Valeur_initiale_de_edi; // Partie concernant le VESA: -GLOBAL byte Granularite; // Facteur de gestion de la granularité de la carte +GLOBAL byte Granularite; // Facteur de gestion de la granularitÚ de la carte GLOBAL byte VESA_Erreur; GLOBAL byte * VESA_WinFuncPtr; // Handler software de changement de banque GLOBAL word * VESA_Liste_des_modes; GLOBAL dword VESA_Decalage_synchro; GLOBAL word VESA_Largeur_ecran_en_dword; -GLOBAL byte VESA_Banque_en_cours; // Variable normalement locale … VIDEO.ASM +GLOBAL byte VESA_Banque_en_cours; // Variable normalement locale à VIDEO.ASM GLOBAL byte VESA_Derniere_banque_Fenetre_A_utilisee; GLOBAL byte VESA_Derniere_banque_Fenetre_B_utilisee; GLOBAL fonction_action VESA_Change_banque_lecture; @@ -529,7 +530,7 @@ GLOBAL byte VESA_Version_Decimale; GLOBAL char VESA_Constructeur[TAILLE_NOM_CONSTRUCTEUR+1]; GLOBAL word VESA_Taille_memoire; - // Les différents sprites: + // Les diffÚrents sprites: GLOBAL byte BLOCK_MENU[HAUTEUR_MENU][LARGEUR_MENU]; GLOBAL byte SPRITE_MENU[NB_SPRITES_MENU][HAUTEUR_SPRITE_MENU][LARGEUR_SPRITE_MENU]; @@ -542,19 +543,19 @@ GLOBAL byte Fonte_fun [256*8*8]; GLOBAL byte Fonte_help [315][6][8]; GLOBAL byte * Fonte; - // Les données de l'aide: + // Les donnÚes de l'aide: GLOBAL struct Section_d_aide Table_d_aide[NB_SECTIONS_AIDE]; GLOBAL byte Section_d_aide_en_cours; // Indice de la table d'aide en cours de consultation -GLOBAL word Position_d_aide_en_cours; // Numéro de la ligne d'aide en cours de consultation +GLOBAL word Position_d_aide_en_cours; // NumÚro de la ligne d'aide en cours de consultation - // Données sur les opérations + // DonnÚes sur les opÚrations -GLOBAL word Operation_avant_interruption; // Nø de l'opération en cours avant l'utilisation d'une interruption -GLOBAL word Operation_en_cours; // Nø de l'opération en cours -GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiée +GLOBAL word Operation_avant_interruption; // N° de l'opÚration en cours avant l'utilisation d'une interruption +GLOBAL word Operation_en_cours; // N° de l'opÚration en cours +GLOBAL word Operation_Pile[TAILLE_PILE_OPERATIONS]; // Pile simplifiÚe GLOBAL byte Operation_Taille_pile; // Taille effective de la pile (0=vide) -GLOBAL byte Operation_dans_loupe; // Indique si l'opération a commencé dans la partie Zoomée ou non +GLOBAL byte Operation_dans_loupe; // Indique si l'opÚration a commencÚ dans la partie ZoomÚe ou non GLOBAL short Pipette_Couleur; GLOBAL short Pipette_X; @@ -564,12 +565,12 @@ GLOBAL short Pipette_Y; #ifdef VARIABLES_GLOBALES byte CURSEUR_D_OPERATION[NB_OPERATIONS]= { - FORME_CURSEUR_CIBLE , // Dessin … la main continu - FORME_CURSEUR_CIBLE , // Dessin … la main discontinu - FORME_CURSEUR_CIBLE , // Dessin … la main point par point + FORME_CURSEUR_CIBLE , // Dessin à la main continu + FORME_CURSEUR_CIBLE , // Dessin à la main discontinu + FORME_CURSEUR_CIBLE , // Dessin à la main point par point FORME_CURSEUR_CIBLE , // Lignes - FORME_CURSEUR_CIBLE , // Lignes reliées - FORME_CURSEUR_CIBLE , // Lignes centrées + FORME_CURSEUR_CIBLE , // Lignes reliÚes + FORME_CURSEUR_CIBLE , // Lignes centrÚes FORME_CURSEUR_CIBLE_XOR , // Rectangle vide FORME_CURSEUR_CIBLE_XOR , // Rectangle plein FORME_CURSEUR_CIBLE , // Cercles vides @@ -580,18 +581,18 @@ GLOBAL short Pipette_Y; FORME_CURSEUR_CIBLE , // Remplacer FORME_CURSEUR_CIBLE_XOR , // Prise de brosse rectangulaire FORME_CURSEUR_CIBLE , // Prise d'une brosse multiforme - FORME_CURSEUR_CIBLE_PIPETTE , // Récupération d'une couleur - FORME_CURSEUR_RECTANGLE_XOR , // Positionnement de la fenˆtre de loupe - FORME_CURSEUR_CIBLE , // Courbe … 3 points - FORME_CURSEUR_CIBLE , // Courbe … 4 points + FORME_CURSEUR_CIBLE_PIPETTE , // RÚcupÚration d'une couleur + FORME_CURSEUR_RECTANGLE_XOR , // Positionnement de la fenêtre de loupe + FORME_CURSEUR_CIBLE , // Courbe à 3 points + FORME_CURSEUR_CIBLE , // Courbe à 4 points FORME_CURSEUR_CIBLE , // Spray FORME_CURSEUR_CIBLE , // Polygone FORME_CURSEUR_CIBLE , // Polyforme FORME_CURSEUR_CIBLE , // Polyfill FORME_CURSEUR_CIBLE , // Polyforme rempli FORME_CURSEUR_MULTIDIRECTIONNEL, // Scroll - FORME_CURSEUR_CIBLE , // Cercles dégradés - FORME_CURSEUR_CIBLE , // Ellipses dégradées + FORME_CURSEUR_CIBLE , // Cercles dÚgradÚs + FORME_CURSEUR_CIBLE , // Ellipses dÚgradÚes FORME_CURSEUR_ROTATE_XOR , // Faire tourner brosse FORME_CURSEUR_CIBLE_XOR , // Etirer brosse FORME_CURSEUR_CIBLE // Deformer brosse @@ -601,12 +602,12 @@ GLOBAL short Pipette_Y; #endif - // Procédures … appeler: Opération,Mouse_K,Etat de la pile + // ProcÚdures à appeler: OpÚration,Mouse_K,Etat de la pile GLOBAL struct { - byte Effacer_curseur; // Booléen "il faut effacer le curseur pour l'opéra." - fonction_action Action; // Action appelée + byte Effacer_curseur; // BoolÚen "il faut effacer le curseur pour l'opÚra." + fonction_action Action; // Action appelÚe } Operation[NB_OPERATIONS][3][TAILLE_PILE_OPERATIONS]; @@ -620,11 +621,11 @@ GLOBAL byte SPRITE_DRIVE[NB_SPRITES_DRIVES][HAUTEUR_SPRITE_DRIVE][LARGEUR_SPRITE // -- Section des informations sur les formats de fichiers ------------------ - // Comptage du nb d'éléments dans la liste: + // Comptage du nb d'ÚlÚments dans la liste: GLOBAL short Liste_Nb_elements; GLOBAL short Liste_Nb_fichiers; GLOBAL short Liste_Nb_repertoires; - // Tˆte de la liste chaŒnée: + // Tête de la liste chaînÚe: GLOBAL struct Element_de_liste_de_fileselect * Liste_du_fileselect; // ------------------- Inititialisation des formats connus ------------------- @@ -650,7 +651,7 @@ void Rien_du_tout(void); "PAL" // PAL }; - // Fonction … appeler pour vérifier la signature du fichier + // Fonction à appeler pour vÚrifier la signature du fichier fonction_action Format_Test[NB_FORMATS_LOAD]= { Test_PKM, // PKM @@ -667,7 +668,7 @@ void Rien_du_tout(void); Test_PAL // PAL }; - // Fonction … appeler pour charger l'image + // Fonction à appeler pour charger l'image fonction_action Format_Load[NB_FORMATS_LOAD]= { Load_PKM, // PKM @@ -684,7 +685,7 @@ void Rien_du_tout(void); Load_PAL // PAL }; - // Fonction … appeler pour sauvegarder l'image + // Fonction à appeler pour sauvegarder l'image fonction_action Format_Save[NB_FORMATS_SAVE]= { Save_PKM, // PKM @@ -701,7 +702,7 @@ void Rien_du_tout(void); Save_PAL // PAL }; - // indique si l'on doit considérer que l'image n'est plus modifiée + // indique si l'on doit considÚrer que l'image n'est plus modifiÚe byte Format_Backup_done[NB_FORMATS_CONNUS]= { 1, // PKM @@ -743,9 +744,9 @@ void Rien_du_tout(void); extern byte Format_Commentaire[NB_FORMATS_CONNUS]; #endif -GLOBAL signed char Erreur_fichier; // 0: opération I/O OK - // 1: Erreur dŠs le début de l'opération - // 2: Erreur durant l'opération => données modifiées +GLOBAL signed char Erreur_fichier; // 0: opÚration I/O OK + // 1: Erreur dès le dÚbut de l'opÚration + // 2: Erreur durant l'opÚration => donnÚes modifiÚes //-1: Interruption du chargement d'une preview GLOBAL int Ligne_INI; @@ -754,7 +755,7 @@ GLOBAL fonction_afficheur Pixel_de_chargement; GLOBAL fonction_lecteur Lit_pixel_de_sauvegarde; /******************** - * Spécifique à SDL * + * SpÚcifique Ó SDL * ********************/ GLOBAL SDL_Surface * Ecran_SDL; #endif diff --git a/graph.c b/graph.c index 2be3f348..2a3a59a5 100644 --- a/graph.c +++ b/graph.c @@ -230,6 +230,7 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) } } } + SDL_UpdateRect(Ecran_SDL,(LARGEUR_MENU+1)*Menu_Facteur_X,Menu_Ordonnee_avant_fenetre,Largeur,Hauteur); } @@ -880,7 +881,8 @@ void Initialiser_mode_video(int Numero) Lit_pixel= Lit_Pixel_SDL; Clear_screen= Effacer_Tout_l_Ecran_SDL; Display_screen= Afficher_partie_de_l_ecran_SDL; - Block= Block_SDL; + Block = Block_SDL; + Block_Fast = Block_SDL_Fast; Pixel_Preview_Normal= Pixel_Preview_Normal_SDL; Pixel_Preview_Loupe=Pixel_Preview_Loupe_SDL; Ligne_horizontale_XOR=Ligne_horizontale_XOR_SDL; @@ -999,14 +1001,14 @@ void Afficher_pixel(word X,word Y,byte Couleur) void Pixel_dans_barre_d_outil(word X,word Y,byte Couleur) { - Block(X*Menu_Facteur_X,(Y*Menu_Facteur_Y)+Menu_Ordonnee,Menu_Facteur_X,Menu_Facteur_Y,Couleur); + Block_Fast(X*Menu_Facteur_X,(Y*Menu_Facteur_Y)+Menu_Ordonnee,Menu_Facteur_X,Menu_Facteur_Y,Couleur); } // Affichage d'un pixel dans la fenêtre (la fenêtre doŒt être visible) void Pixel_dans_fenetre(word X,word Y,byte Couleur) { - Block((X*Menu_Facteur_X)+Fenetre_Pos_X,(Y*Menu_Facteur_Y)+Fenetre_Pos_Y,Menu_Facteur_X,Menu_Facteur_Y,Couleur); + Block_Fast((X*Menu_Facteur_X)+Fenetre_Pos_X,(Y*Menu_Facteur_Y)+Fenetre_Pos_Y,Menu_Facteur_X,Menu_Facteur_Y,Couleur); } @@ -1264,7 +1266,6 @@ void Afficher_menu(void) for (Pos_Y=0;Pos_Y @@ -14,1847 +14,1847 @@ #include #include "linux.h" #include "boutons.h" -#include "operatio.h" +#include "operatio.h" #include "shade.h" // On déclare méchamment le prototype de Erreur pour éviter de faire un // fichier "main.h": void Erreur(int Code); - -//---------- Annuler les effets des modes de dessin (sauf la grille) --------- - - // Variables mémorisants les anciens effets - -byte Shade_Mode_avant_annulation; -byte Quick_shade_Mode_avant_annulation; -byte Stencil_Mode_avant_annulation; -byte Trame_Mode_avant_annulation; -byte Colorize_Mode_avant_annulation; -byte Smooth_Mode_avant_annulation; -byte Tiling_Mode_avant_annulation; -fonction_effet Fonction_effet_avant_annulation; - -void Annuler_les_effets(void) -{ - Shade_Mode_avant_annulation=Shade_Mode; - Shade_Mode=0; - - Quick_shade_Mode_avant_annulation=Quick_shade_Mode; - Quick_shade_Mode=0; - - Stencil_Mode_avant_annulation=Stencil_Mode; - Stencil_Mode=0; - - Trame_Mode_avant_annulation=Trame_Mode; - Trame_Mode=0; - - Colorize_Mode_avant_annulation=Colorize_Mode; - Colorize_Mode=0; - - Smooth_Mode_avant_annulation=Smooth_Mode; - Smooth_Mode=0; - - Tiling_Mode_avant_annulation=Tiling_Mode; - Tiling_Mode=0; - - Fonction_effet_avant_annulation=Fonction_effet; - Fonction_effet=Aucun_effet; -} - - -//----------------- Restaurer les effets des modes de dessin ----------------- -void Restaurer_les_effets(void) -{ - Shade_Mode =Shade_Mode_avant_annulation; - Quick_shade_Mode=Quick_shade_Mode_avant_annulation; - Stencil_Mode =Stencil_Mode_avant_annulation; - Trame_Mode =Trame_Mode_avant_annulation; - Colorize_Mode =Colorize_Mode_avant_annulation; - Smooth_Mode =Smooth_Mode_avant_annulation; - Tiling_Mode =Tiling_Mode_avant_annulation; - Fonction_effet =Fonction_effet_avant_annulation; -} - - -char * TITRE_BOUTON[NB_BOUTONS]= -{ - "Paintbrush choice ", - "Adjust picture / Effects", - "Freehand draw. / Toggle ", - "Splines / Toggle ", - "Lines / Toggle ", - "Spray / Menu ", - "Floodfill / Replace col.", - "Polylines / Polyforms ", - "Polyfill / Filled Pforms", - "Empty rectangles ", - "Filled rectangles ", - "Empty circles / ellipses", - "Filled circles / ellips.", - "Grad. rectangles ", - "Gradation menu ", - "Grad. spheres / ellipses", - "Brush grab. / Restore ", - "Lasso / Restore brush ", - "Brush effects ", - "Drawing modes (effects) ", - "Text ", - "Magnify mode / Menu ", - "Pipette / Invert colors ", - "Screen size / Safe. res.", - "Go / Copy to other page ", - "Save as / Save ", - "Load / Re-load ", - "Settings ", - "Clear / with backcolor ", - "Help / Statistics ", - "Undo / Redo ", - "Kill current page ", - "Quit ", - "Palette editor ", - "Scroll pal. left / Fast ", - "Scroll pal. right / Fast", - "Color #" , - "Hide tool bar " -}; - - - -int Numero_bouton_sous_souris(void) -{ - int Numero; - short Pos_X; - short Pos_Y; - - Pos_X=(Mouse_X )/Menu_Facteur_X; - Pos_Y=(Mouse_Y-Menu_Ordonnee)/Menu_Facteur_Y; - - for (Numero=0;Numero=Bouton[Numero].Decalage_X) && - (Pos_Y>=Bouton[Numero].Decalage_Y) && - (Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Largeur) && - (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Hauteur)) - return Numero; - break; - - case FORME_BOUTON_TRIANGLE_HAUT_GAUCHE: - if ((Pos_X>=Bouton[Numero].Decalage_X) && - (Pos_Y>=Bouton[Numero].Decalage_Y) && - (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X<=Bouton[Numero].Largeur)) - return Numero; - break; - - case FORME_BOUTON_TRIANGLE_BAS_DROITE: - if ((Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Largeur) && - (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Hauteur) && - (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X>=Bouton[Numero].Largeur)) - return Numero; - break; - } - } - return -1; -} - - -void Tracer_cadre_de_bouton_du_menu(byte Numero,byte Enfonce) -{ - byte Couleur_Haut_gauche; - byte Couleur_Bas_droite; - byte Couleur_Diagonale; - word Debut_X; - word Debut_Y; - word Fin_X; - word Fin_Y; - word Pos_X; - word Pos_Y; - - Debut_X=Bouton[Numero].Decalage_X; - Debut_Y=Bouton[Numero].Decalage_Y; - Fin_X =Debut_X+Bouton[Numero].Largeur; - Fin_Y =Debut_Y+Bouton[Numero].Hauteur; - - if (!Enfonce) - { - Couleur_Haut_gauche=CM_Blanc; - Couleur_Bas_droite=CM_Fonce; - Couleur_Diagonale=CM_Clair; - } - else - { - Couleur_Haut_gauche=CM_Fonce; - Couleur_Bas_droite=CM_Noir; - Couleur_Diagonale=CM_Fonce; - } - - switch(Bouton[Numero].Forme) - { - case FORME_BOUTON_SANS_CADRE : - break; - case FORME_BOUTON_RECTANGLE : - // On colorie le point haut droit - Pixel_dans_menu(Fin_X,Debut_Y,Couleur_Diagonale); - BLOCK_MENU[Debut_Y][Fin_X]=Couleur_Diagonale; - // On colorie le point bas gauche - Pixel_dans_menu(Debut_X,Fin_Y,Couleur_Diagonale); - BLOCK_MENU[Fin_Y][Debut_X]=Couleur_Diagonale; - // On colorie la partie haute - for (Pos_X=Debut_X;Pos_X<=Fin_X-1;Pos_X++) - { - Pixel_dans_menu(Pos_X,Debut_Y,Couleur_Haut_gauche); - BLOCK_MENU[Debut_Y][Pos_X]=Couleur_Haut_gauche; - } - for (Pos_Y=Debut_Y+1;Pos_Y<=Fin_Y-1;Pos_Y++) - { - // On colorie la partie gauche - Pixel_dans_menu(Debut_X,Pos_Y,Couleur_Haut_gauche); - BLOCK_MENU[Pos_Y][Debut_X]=Couleur_Haut_gauche; - // On colorie la partie droite - Pixel_dans_menu(Fin_X,Pos_Y,Couleur_Bas_droite); - BLOCK_MENU[Pos_Y][Fin_X]=Couleur_Bas_droite; - } - // On colorie la partie basse - for (Pos_X=Debut_X+1;Pos_X<=Fin_X;Pos_X++) - { - Pixel_dans_menu(Pos_X,Fin_Y,Couleur_Bas_droite); - BLOCK_MENU[Fin_Y][Pos_X]=Couleur_Bas_droite; - } - break; - case FORME_BOUTON_TRIANGLE_HAUT_GAUCHE: - // On colorie le point haut droit - Pixel_dans_menu(Fin_X,Debut_Y,Couleur_Diagonale); - BLOCK_MENU[Debut_Y][Fin_X]=Couleur_Diagonale; - // On colorie le point bas gauche - Pixel_dans_menu(Debut_X,Fin_Y,Couleur_Diagonale); - BLOCK_MENU[Fin_Y][Debut_X]=Couleur_Diagonale; - // On colorie le coin haut gauche - for (Pos_X=0;Pos_XSPECIAL_CLICK_RIGHT) - switch(Indice_Touche) - { - case SPECIAL_SCROLL_UP : // Scroll up - if (Loupe_Mode) - Scroller_loupe(0,-(Loupe_Hauteur>>2)); - else - Scroller_ecran(0,-(Hauteur_ecran>>3)); - break; - case SPECIAL_SCROLL_DOWN : // Scroll down - if (Loupe_Mode) - Scroller_loupe(0,(Loupe_Hauteur>>2)); - else - Scroller_ecran(0,(Hauteur_ecran>>3)); - break; - case SPECIAL_SCROLL_LEFT : // Scroll left - if (Loupe_Mode) - Scroller_loupe(-(Loupe_Largeur>>2),0); - else - Scroller_ecran(-(Largeur_ecran>>3),0); - break; - case SPECIAL_SCROLL_RIGHT : // Scroll right - if (Loupe_Mode) - Scroller_loupe((Loupe_Largeur>>2),0); - else - Scroller_ecran((Largeur_ecran>>3),0); - break; - case SPECIAL_SCROLL_UP_FAST : // Scroll up faster - if (Loupe_Mode) - Scroller_loupe(0,-(Loupe_Hauteur>>1)); - else - Scroller_ecran(0,-(Hauteur_ecran>>2)); - break; - case SPECIAL_SCROLL_DOWN_FAST : // Scroll down faster - if (Loupe_Mode) - Scroller_loupe(0,(Loupe_Hauteur>>1)); - else - Scroller_ecran(0,(Hauteur_ecran>>2)); - break; - case SPECIAL_SCROLL_LEFT_FAST : // Scroll left faster - if (Loupe_Mode) - Scroller_loupe(-(Loupe_Largeur>>1),0); - else - Scroller_ecran(-(Largeur_ecran>>2),0); - break; - case SPECIAL_SCROLL_RIGHT_FAST : // Scroll right faster - if (Loupe_Mode) - Scroller_loupe((Loupe_Largeur>>1),0); - else - Scroller_ecran((Largeur_ecran>>2),0); - break; - case SPECIAL_SCROLL_UP_SLOW : // Scroll up slower - if (Loupe_Mode) - Scroller_loupe(0,-1); - else - Scroller_ecran(0,-1); - break; - case SPECIAL_SCROLL_DOWN_SLOW : // Scroll down slower - if (Loupe_Mode) - Scroller_loupe(0,1); - else - Scroller_ecran(0,1); - break; - case SPECIAL_SCROLL_LEFT_SLOW : // Scroll left slower - if (Loupe_Mode) - Scroller_loupe(-1,0); - else - Scroller_ecran(-1,0); - break; - case SPECIAL_SCROLL_RIGHT_SLOW : // Scroll right slower - if (Loupe_Mode) - Scroller_loupe(1,0); - else - Scroller_ecran(1,0); - break; - case SPECIAL_NEXT_FORECOLOR : // Next foreground color - Special_Next_forecolor(); - break; - case SPECIAL_PREVIOUS_FORECOLOR : // Previous foreground color - Special_Previous_forecolor(); - break; - case SPECIAL_NEXT_BACKCOLOR : // Next background color - Special_Next_backcolor(); - break; - case SPECIAL_PREVIOUS_BACKCOLOR : // Previous background color - Special_Previous_backcolor(); - break; - case SPECIAL_RETRECIR_PINCEAU: // Rétrécir le pinceau - Retrecir_pinceau(); - break; - case SPECIAL_GROSSIR_PINCEAU: // Grossir le pinceau - Grossir_pinceau(); - break; - case SPECIAL_NEXT_USER_FORECOLOR : // Next user-defined foreground color - Message_Non_disponible(); // !!! TEMPORAIRE !!! - //Special_Next_user_forecolor(); - break; - case SPECIAL_PREVIOUS_USER_FORECOLOR : // Previous user-defined foreground color - Message_Non_disponible(); // !!! TEMPORAIRE !!! - //Special_Previous_user_forecolor(); - break; - case SPECIAL_NEXT_USER_BACKCOLOR : // Next user-defined background color - Message_Non_disponible(); // !!! TEMPORAIRE !!! - //Special_Next_user_backcolor(); - break; - case SPECIAL_PREVIOUS_USER_BACKCOLOR : // Previous user-defined background color - Message_Non_disponible(); // !!! TEMPORAIRE !!! - //Special_Previous_user_backcolor(); - break; - case SPECIAL_SHOW_HIDE_CURSOR : // Show / Hide cursor - Effacer_curseur(); - Cacher_curseur=!Cacher_curseur; - Afficher_curseur(); - break; - case SPECIAL_PINCEAU_POINT : // Paintbrush = "." - Effacer_curseur(); - Pinceau_Forme=FORME_PINCEAU_ROND; - Modifier_pinceau(1,1); - Changer_la_forme_du_pinceau(FORME_PINCEAU_ROND); - Afficher_curseur(); - break; - case SPECIAL_DESSIN_CONTINU : // Continuous freehand drawing - Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE); - while (Operation_en_cours!=OPERATION_DESSIN_CONTINU) - Enclencher_bouton(BOUTON_DESSIN,A_DROITE); - break; - case SPECIAL_FLIP_X : // Flip X - Effacer_curseur(); - Flip_X_LOWLEVEL(); - Afficher_curseur(); - break; - case SPECIAL_FLIP_Y : // Flip Y - Effacer_curseur(); - Flip_Y_LOWLEVEL(); - Afficher_curseur(); - break; - case SPECIAL_ROTATE_90 : // 90ø brush rotation - Effacer_curseur(); - Rotate_90_deg(); - Afficher_curseur(); - break; - case SPECIAL_ROTATE_180 : // 180ø brush rotation - Effacer_curseur(); - if (Brosse_Hauteur&1) - { - // Brosse de hauteur impaire - Flip_X_LOWLEVEL(); - Flip_Y_LOWLEVEL(); - } - else - Rotate_180_deg_LOWLEVEL(); - Brosse_Decalage_X=(Brosse_Largeur>>1); - Brosse_Decalage_Y=(Brosse_Hauteur>>1); - Afficher_curseur(); - break; - case SPECIAL_STRETCH : // Stretch brush - Effacer_curseur(); - Demarrer_pile_operation(OPERATION_ETIRER_BROSSE); - Afficher_curseur(); - break; - case SPECIAL_DISTORT : // Distort brush - Message_Non_disponible(); // !!! TEMPORAIRE !!! - break; - case SPECIAL_ROTATE_ANY_ANGLE : // Rotate brush by any angle - Effacer_curseur(); - Demarrer_pile_operation(OPERATION_TOURNER_BROSSE); - Afficher_curseur(); - break; - case SPECIAL_OUTLINE : // Outline brush - Effacer_curseur(); - Outline_brush(); - Afficher_curseur(); - break; - case SPECIAL_NIBBLE : // Nibble brush - Effacer_curseur(); - Nibble_brush(); - Afficher_curseur(); - break; - case SPECIAL_GET_BRUSH_COLORS : // Get colors from brush - Get_colors_from_brush(); - break; - case SPECIAL_RECOLORIZE_BRUSH : // Recolorize brush - Effacer_curseur(); - Remap_brosse(); - Afficher_curseur(); - break; - case SPECIAL_LOAD_BRUSH : - Load_picture(0); - break; - case SPECIAL_SAVE_BRUSH : - Save_picture(0); - break; - case SPECIAL_ZOOM_IN : // Zoom in - Zoom(+1); - break; - case SPECIAL_ZOOM_OUT : // Zoom out - Zoom(-1); - break; - case SPECIAL_CENTER_ATTACHMENT : // Center brush attachment - Effacer_curseur(); - Brosse_Decalage_X=(Brosse_Largeur>>1); - Brosse_Decalage_Y=(Brosse_Hauteur>>1); - Afficher_curseur(); - break; - case SPECIAL_TOP_LEFT_ATTACHMENT : // Top-left brush attachment - Effacer_curseur(); - Brosse_Decalage_X=0; - Brosse_Decalage_Y=0; - Afficher_curseur(); - break; - case SPECIAL_TOP_RIGHT_ATTACHMENT : // Top-right brush attachment - Effacer_curseur(); - Brosse_Decalage_X=(Brosse_Largeur-1); - Brosse_Decalage_Y=0; - Afficher_curseur(); - break; - case SPECIAL_BOTTOM_LEFT_ATTACHMENT : // Bottom-left brush attachment - Effacer_curseur(); - Brosse_Decalage_X=0; - Brosse_Decalage_Y=(Brosse_Hauteur-1); - Afficher_curseur(); - break; - case SPECIAL_BOTTOM_RIGHT_ATTACHMENT : // Bottom right brush attachment - Effacer_curseur(); - Brosse_Decalage_X=(Brosse_Largeur-1); - Brosse_Decalage_Y=(Brosse_Hauteur-1); - Afficher_curseur(); - break; - case SPECIAL_EXCLUDE_COLORS_MENU : // Exclude colors menu - Menu_Tag_couleurs("Tag colors to exclude",Exclude_color,&Temp,1); - break; - case SPECIAL_INVERT_SIEVE : - Inverser_trame(); - break; - case SPECIAL_SHADE_MODE : - Bouton_Shade_Mode(); - break; - case SPECIAL_SHADE_MENU : - Bouton_Shade_Menu(); - break; - case SPECIAL_QUICK_SHADE_MODE : - Bouton_Quick_shade_Mode(); - break; - case SPECIAL_QUICK_SHADE_MENU : - Bouton_Quick_shade_Menu(); - break; - case SPECIAL_STENCIL_MODE : - Bouton_Stencil_Mode(); - break; - case SPECIAL_STENCIL_MENU : - Bouton_Menu_Stencil(); - break; - case SPECIAL_MASK_MODE : - Bouton_Mask_Mode(); - break; - case SPECIAL_MASK_MENU : - Bouton_Mask_Menu(); - break; - case SPECIAL_GRID_MODE : - Bouton_Snap_Mode(); - break; - case SPECIAL_GRID_MENU : - Bouton_Menu_Grille(); - break; - case SPECIAL_SIEVE_MODE : - Bouton_Trame_Mode(); - break; - case SPECIAL_SIEVE_MENU : - Bouton_Trame_Menu(); - break; - case SPECIAL_COLORIZE_MODE : - Bouton_Colorize_Mode(); - break; - case SPECIAL_COLORIZE_MENU : - Bouton_Colorize_Menu(); - break; - case SPECIAL_SMOOTH_MODE : - Bouton_Smooth_Mode(); - break; - case SPECIAL_SMOOTH_MENU : - Bouton_Smooth_Menu(); - break; - case SPECIAL_SMEAR_MODE : - Bouton_Smear_Mode(); - break; - case SPECIAL_TILING_MODE : - Bouton_Tiling_Mode(); - break; - case SPECIAL_TILING_MENU : - Bouton_Tiling_Menu(); - break; - default : // Gestion des touches de raccourci de bouton: - // Pour chaque bouton - Bouton_Touche=-1; - for (Indice_bouton=0;Indice_bouton=SPECIAL_SHADE_MODE) - && (Indice_Touche<=SPECIAL_TILING_MENU)) - { - Effacer_curseur(); - Tracer_cadre_de_bouton_du_menu(BOUTON_EFFETS, - (Shade_Mode||Quick_shade_Mode||Colorize_Mode||Smooth_Mode||Tiling_Mode||Smear_Mode||Stencil_Mode||Mask_Mode||Trame_Mode||Snap_Mode)); - Afficher_curseur(); - } - } - - // Gestion de la souris - - Curseur_dans_menu=(Mouse_Y>=Menu_Ordonnee) || - ( (Loupe_Mode) && (Mouse_X>=Principal_Split) && - (Mouse_X>2); - - strcpy(Chaine,TITRE_BOUTON[Indice_bouton]); - sprintf(Chaine+strlen(Chaine),"%d",Temp); - strcat(Chaine," ("); - sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[Temp].R); - strcat(Chaine,","); - sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[Temp].V); - strcat(Chaine,","); - sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[Temp].B); - strcat(Chaine,")"); - for (Temp=strlen(Chaine); Temp<24; Temp++) - Chaine[Temp]=' '; - Chaine[24]=0; - Print_dans_menu(Chaine,0); - Afficher_curseur(); - } - else - { - if ( (Old_MX!=Mouse_X) || (Old_MY!=Mouse_Y) ) - { - Effacer_curseur(); - Block(18*Menu_Facteur_X,Menu_Ordonnee_Texte,192*Menu_Facteur_X,Menu_Facteur_Y<<3,CM_Clair); - Afficher_curseur(); - } - } - Old_MX=Mouse_X; - Old_MY=Mouse_Y; - } - } - } - } - - Indice_bouton_precedent=Indice_bouton; - - // Gestion des clicks - if (Mouse_K) - { - if (Mouse_Y>=Menu_Ordonnee) - { - if (Indice_bouton>=0) - { - Enclencher_bouton(Indice_bouton,Mouse_K); - Indice_bouton_precedent=-1; - } - } - else - if (Loupe_Mode) Deplacer_Split(); - } - } - else - { - // Le curseur se trouve dans l'image - - if ( (Curseur_dans_menu_precedent) && (Menu_visible) ) - { - if ( (Operation_en_cours!=OPERATION_PIPETTE) - && (Operation_en_cours!=OPERATION_REMPLACER) ) - Print_dans_menu("X: Y: ",0); - else - { - Print_dans_menu("X: Y: ( )",0); - Num2str(Pipette_Couleur,Chaine,3); - Print_dans_menu(Chaine,20); - Print_general(170*Menu_Facteur_X,Menu_Ordonnee_Texte," ",0,Pipette_Couleur); - } - Print_coordonnees(); - } - - Blink=Operation[Operation_en_cours][Mouse_K][Operation_Taille_pile].Effacer_curseur; - - if (Blink) Effacer_curseur(); - - Operation[Operation_en_cours][Mouse_K][Operation_Taille_pile].Action(); - - if (Blink) Afficher_curseur(); - } - - Curseur_dans_menu_precedent=Curseur_dans_menu; - } - while (!Sortir_du_programme); -} - - - - - -////////////////////////////////////////////////////////////////////////////// -// Différentes fonctions d'affichage utilisées dans les fenêtres // -////////////////////////////////////////////////////////////////////////////// - -//----------------------- Tracer une fenêtre d'options ----------------------- - -void Ouvrir_fenetre(word Largeur,word Hauteur, char * Titre) -// Lors de l'appel à cette procédure, la souris doit être affichée. -// En sortie de cette procedure, la souris est effacée. -{ - //word i,j; - - Effacer_curseur(); - - Une_fenetre_est_ouverte=1; - - Fenetre_Largeur=Largeur; - Fenetre_Hauteur=Hauteur; - - // Positionnement de la fenêtre - Fenetre_Pos_X=(Largeur_ecran-(Largeur*Menu_Facteur_X))>>1; - - Fenetre_Pos_Y=(Hauteur_ecran-(Hauteur*Menu_Facteur_Y))>>1; - - // Fenêtre grise - Block(Fenetre_Pos_X+(Menu_Facteur_X<<1),Fenetre_Pos_Y+(Menu_Facteur_Y<<1),(Largeur-4)*Menu_Facteur_X,(Hauteur-4)*Menu_Facteur_Y,CM_Clair); - - // -- Cadre de la fenêtre ----- --- -- - - - - // Cadre noir puis en relief - Fenetre_Afficher_cadre_mono(0,0,Largeur,Hauteur,CM_Noir); - Fenetre_Afficher_cadre_bombe(1,1,Largeur-2,Hauteur-2); - - // Barre sous le titre - Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(11*Menu_Facteur_Y),(Largeur-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Fonce); - Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(12*Menu_Facteur_Y),(Largeur-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Blanc); - - Print_dans_fenetre((Largeur-(strlen(Titre)<<3))>>1,3,Titre,CM_Noir,CM_Clair); - - Menu_visible_avant_fenetre=Menu_visible; - Menu_visible=0; - Menu_Ordonnee_avant_fenetre=Menu_Ordonnee; - Menu_Ordonnee=Hauteur_ecran; - Forme_curseur_avant_fenetre=Forme_curseur; - Forme_curseur=FORME_CURSEUR_FLECHE; - Cacher_pinceau_avant_fenetre=Cacher_pinceau; - Cacher_pinceau=1; - - // Initialisation des listes de boutons de la fenêtre - Fenetre_Liste_boutons_normal =NULL; - Fenetre_Liste_boutons_palette =NULL; - Fenetre_Liste_boutons_scroller=NULL; - Fenetre_Liste_boutons_special =NULL; - Nb_boutons_fenetre =0; - - // On (re)passe dans le clavier de départ (fran‡ais pour nous) - Clavier_de_depart(); -} - -//----------------------- Fermer une fenêtre d'options ----------------------- - -void Fermer_fenetre(void) -// Lors de l'appel à cette procedure, la souris doit être affichée. -// En sortie de cette procedure, la souris est effacée. -{ - struct Fenetre_Bouton_normal * Temp1; - struct Fenetre_Bouton_palette * Temp2; - struct Fenetre_Bouton_scroller * Temp3; - struct Fenetre_Bouton_special * Temp4; - - Effacer_curseur(); - - Cacher_pinceau=Cacher_pinceau_avant_fenetre; - - while (Fenetre_Liste_boutons_normal) - { - Temp1=Fenetre_Liste_boutons_normal->Next; - free(Fenetre_Liste_boutons_normal); - Fenetre_Liste_boutons_normal=Temp1; - } - while (Fenetre_Liste_boutons_palette) - { - Temp2=Fenetre_Liste_boutons_palette->Next; - free(Fenetre_Liste_boutons_palette); - Fenetre_Liste_boutons_palette=Temp2; - } - while (Fenetre_Liste_boutons_scroller) - { - Temp3=Fenetre_Liste_boutons_scroller->Next; - free(Fenetre_Liste_boutons_scroller); - Fenetre_Liste_boutons_scroller=Temp3; - } - while (Fenetre_Liste_boutons_special) - { - Temp4=Fenetre_Liste_boutons_special->Next; - free(Fenetre_Liste_boutons_special); - Fenetre_Liste_boutons_special=Temp4; - } - - Une_fenetre_est_ouverte=0; - Curseur_dans_menu_precedent=0; // il faut rafficher le libellé dans la barre - // d'outils si le curseur est sur une ic“ne. - - Calculer_coordonnees_pinceau(); - - Menu_Ordonnee=Menu_Ordonnee_avant_fenetre; - Menu_visible=Menu_visible_avant_fenetre; - Forme_curseur=Forme_curseur_avant_fenetre; - - Afficher_ecran(); - Afficher_menu(); - - Touche=0; - Mouse_K=0; - - // On (re)passe dans le clavier américain - Clavier_americain(); -} - - -//---------------- Dessiner un bouton normal dans une fenêtre ---------------- - -void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur, - char * Titre,byte Lettre_soulignee,byte Clickable) -{ - byte Couleur_titre; - word Pos_texte_X,Pos_texte_Y; - - if (Clickable) - { - Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); - Fenetre_Afficher_cadre_general(Pos_X-1,Pos_Y-1,Largeur+2,Hauteur+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); - Couleur_titre=CM_Noir; - } - else - { - Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); - Fenetre_Afficher_cadre_mono(Pos_X-1,Pos_Y-1,Largeur+2,Hauteur+2,CM_Clair); - Couleur_titre=CM_Fonce; - } - - Pos_texte_X=Pos_X+( (Largeur-(strlen(Titre)<<3)+1) >>1 ); - Pos_texte_Y=Pos_Y+((Hauteur-7)>>1); - Print_dans_fenetre(Pos_texte_X,Pos_texte_Y,Titre,Couleur_titre,CM_Clair); - - if (Lettre_soulignee) - Block(Fenetre_Pos_X+((Pos_texte_X+((Lettre_soulignee-1)<<3))*Menu_Facteur_X), - Fenetre_Pos_Y+((Pos_texte_Y+8)*Menu_Facteur_Y), - Menu_Facteur_X<<3,Menu_Facteur_Y,CM_Fonce); -} - - -// -- Bouton normal enfoncé dans la fenêtre -- -void Fenetre_Enfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur) -{ - Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Fonce,CM_Noir,CM_Fonce,CM_Fonce,CM_Noir); -} - -// -- Bouton normal désenfoncé dans la fenêtre -- -void Fenetre_Desenfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur) -{ - Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); -} - - -//--------------- Dessiner un bouton palette dans une fenêtre ---------------- -void Fenetre_Dessiner_bouton_palette(word Pos_X,word Pos_Y) -{ - word Couleur; - - for (Couleur=0; Couleur<=255; Couleur++) - Block( Fenetre_Pos_X+((((Couleur >> 4)*10)+Pos_X+6)*Menu_Facteur_X),Fenetre_Pos_Y+((((Couleur & 15)*5)+Pos_Y+3)*Menu_Facteur_Y),Menu_Facteur_X*5,Menu_Facteur_Y*5,Couleur); - - Fenetre_Afficher_cadre(Pos_X,Pos_Y,164,86); -} - - -// -------------------- Effacer les TAGs sur les palette --------------------- -// Cette fonctø ne sert plus que lorsqu'on efface les tags dans le menu Spray. -void Fenetre_Effacer_tags(void) -{ - word Origine_X; - word Origine_Y; - word Pos_X; - word Pos_fenetre_X; - //word Pos_fenetre_Y; - - Origine_X=Fenetre_Pos_X+(Fenetre_Liste_boutons_palette->Pos_X+3)*Menu_Facteur_X; - Origine_Y=Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3)*Menu_Facteur_Y; - for (Pos_X=0,Pos_fenetre_X=Origine_X;Pos_X<16;Pos_X++,Pos_fenetre_X+=(Menu_Facteur_X*10)) - Block(Pos_fenetre_X,Origine_Y,Menu_Facteur_X*3,Menu_Facteur_Y*80,CM_Clair); -} - - -// ---- Tracer les TAGs sur les palettes du menu Palette ou du menu Shade ---- -void Tagger_intervalle_palette(byte Debut,byte Fin) -{ - word Origine_X; - word Origine_Y; - //word Pos_X; - word Pos_Y; - //word Pos_fenetre_X; - word Pos_fenetre_Y; - word Indice; - - // On efface les anciens TAGs - for (Indice=0;Indice<=Debut;Indice++) - Block(Fenetre_Pos_X+(Fenetre_Liste_boutons_palette->Pos_X+3+((Indice>>4)*10))*Menu_Facteur_X, - Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3+((Indice&15)* 5))*Menu_Facteur_Y, - Menu_Facteur_X*3,Menu_Facteur_Y*5,CM_Clair); - - for (Indice=Fin;Indice<256;Indice++) - Block(Fenetre_Pos_X+(Fenetre_Liste_boutons_palette->Pos_X+3+((Indice>>4)*10))*Menu_Facteur_X, - Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3+((Indice&15)* 5))*Menu_Facteur_Y, - Menu_Facteur_X*3,Menu_Facteur_Y*5,CM_Clair); - - // On affiche le 1er TAG - Origine_X=(Fenetre_Liste_boutons_palette->Pos_X+3)+(Debut>>4)*10; - Origine_Y=(Fenetre_Liste_boutons_palette->Pos_Y+3)+(Debut&15)* 5; - for (Pos_Y=0,Pos_fenetre_Y=Origine_Y ;Pos_Y<5;Pos_Y++,Pos_fenetre_Y++) - Pixel_dans_fenetre(Origine_X ,Pos_fenetre_Y,CM_Noir); - for (Pos_Y=0,Pos_fenetre_Y=Origine_Y+1;Pos_Y<3;Pos_Y++,Pos_fenetre_Y++) - Pixel_dans_fenetre(Origine_X+1,Pos_fenetre_Y,CM_Noir); - Pixel_dans_fenetre(Origine_X+2,Origine_Y+2,CM_Noir); - - if (Debut!=Fin) - { - // On complète le 1er TAG - Pixel_dans_fenetre(Origine_X+1,Origine_Y+4,CM_Noir); - - // On affiche le 2ème TAG - Origine_X=(Fenetre_Liste_boutons_palette->Pos_X+3)+(Fin>>4)*10; - Origine_Y=(Fenetre_Liste_boutons_palette->Pos_Y+3)+(Fin&15)* 5; - for (Pos_Y=0,Pos_fenetre_Y=Origine_Y; Pos_Y<5; Pos_Y++,Pos_fenetre_Y++) - Pixel_dans_fenetre(Origine_X ,Pos_fenetre_Y,CM_Noir); - for (Pos_Y=0,Pos_fenetre_Y=Origine_Y; Pos_Y<4; Pos_Y++,Pos_fenetre_Y++) - Pixel_dans_fenetre(Origine_X+1,Pos_fenetre_Y,CM_Noir); - Pixel_dans_fenetre(Origine_X+2,Origine_Y+2,CM_Noir); - - // On TAG toutes les couleurs intermédiaires - for (Indice=Debut+1;IndicePos_X+3+((Indice>>4)*10))*Menu_Facteur_X, - Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3+((Indice&15)* 5))*Menu_Facteur_Y, - Menu_Facteur_X*2,Menu_Facteur_Y*5,CM_Noir); - // On efface l'éventuelle pointe d'une ancienne extrémité de l'intervalle - Pixel_dans_fenetre(Fenetre_Liste_boutons_palette->Pos_X+5+((Indice>>4)*10), - Fenetre_Liste_boutons_palette->Pos_Y+5+((Indice&15)* 5), - CM_Clair); - } - } -} - - -//------------------ Dessiner un scroller dans une fenêtre ------------------- - -void Calculer_hauteur_curseur_jauge(struct Fenetre_Bouton_scroller * Enreg) -{ - if (Enreg->Nb_elements>Enreg->Nb_visibles) - { - Enreg->Hauteur_curseur=(Enreg->Nb_visibles*(Enreg->Hauteur-24))/Enreg->Nb_elements; - if (!(Enreg->Hauteur_curseur)) - Enreg->Hauteur_curseur=1; - } - else - { - Enreg->Hauteur_curseur=Enreg->Hauteur-24; - } -} - -void Fenetre_Dessiner_jauge(struct Fenetre_Bouton_scroller * Enreg) -{ - word Position_curseur_jauge; - - Position_curseur_jauge=Enreg->Pos_Y+12; - - Block(Fenetre_Pos_X+(Enreg->Pos_X*Menu_Facteur_X), - Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), - 11*Menu_Facteur_X,(Enreg->Hauteur-24)*Menu_Facteur_Y,CM_Noir/*CM_Fonce*/); - - if (Enreg->Nb_elements>Enreg->Nb_visibles) - Position_curseur_jauge+=Round_div(Enreg->Position*(Enreg->Hauteur-24-Enreg->Hauteur_curseur),Enreg->Nb_elements-Enreg->Nb_visibles); - - Block(Fenetre_Pos_X+(Enreg->Pos_X*Menu_Facteur_X), - Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), - 11*Menu_Facteur_X,Enreg->Hauteur_curseur*Menu_Facteur_Y,CM_Clair/*CM_Blanc*/); -} - -void Fenetre_Dessiner_bouton_scroller(struct Fenetre_Bouton_scroller * Enreg) -{ - Fenetre_Afficher_cadre_general(Enreg->Pos_X-1,Enreg->Pos_Y-1,13,Enreg->Hauteur+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); - Fenetre_Afficher_cadre_mono(Enreg->Pos_X-1,Enreg->Pos_Y+11,13,Enreg->Hauteur-22,CM_Noir); - Fenetre_Afficher_cadre_bombe(Enreg->Pos_X,Enreg->Pos_Y,11,11); - Fenetre_Afficher_cadre_bombe(Enreg->Pos_X,Enreg->Pos_Y+Enreg->Hauteur-11,11,11); - Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+2,"\030",CM_Noir,CM_Clair); - Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+Enreg->Hauteur-9,"\031",CM_Noir,CM_Clair); - Fenetre_Dessiner_jauge(Enreg); -} - - -//--------------- Dessiner une zone de saisie dans une fenêtre --------------- - -void Fenetre_Dessiner_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres) -{ - Fenetre_Afficher_cadre_creux(Pos_X,Pos_Y,(Largeur_en_caracteres<<3)+3,11); -} - - -//------------ Modifier le contenu (caption) d'une zone de saisie ------------ - -void Fenetre_Contenu_bouton_saisie(struct Fenetre_Bouton_special * Enreg, char * Contenu) -{ - Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+2,Contenu,CM_Noir,CM_Clair); -} - - - -//------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------ - -void Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, - word Largeur, word Hauteur, - char * Titre, byte Lettre_soulignee, - byte Clickable, word Raccourci) -{ - struct Fenetre_Bouton_normal * Temp; - - Nb_boutons_fenetre++; - - if (Clickable) - { - Temp=(struct Fenetre_Bouton_normal *)malloc(sizeof(struct Fenetre_Bouton_normal)); - Temp->Numero =Nb_boutons_fenetre; - Temp->Pos_X =Pos_X; - Temp->Pos_Y =Pos_Y; - Temp->Largeur =Largeur; - Temp->Hauteur =Hauteur; - Temp->Raccourci=Raccourci; - - Temp->Next=Fenetre_Liste_boutons_normal; - Fenetre_Liste_boutons_normal=Temp; - } - - Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur,Titre,Lettre_soulignee,Clickable); -} - - -void Fenetre_Definir_bouton_palette(word Pos_X, word Pos_Y) -{ - struct Fenetre_Bouton_palette * Temp; - - Temp=(struct Fenetre_Bouton_palette *)malloc(sizeof(struct Fenetre_Bouton_palette)); - Temp->Numero =++Nb_boutons_fenetre; - Temp->Pos_X =Pos_X; - Temp->Pos_Y =Pos_Y; - - Temp->Next=Fenetre_Liste_boutons_palette; - Fenetre_Liste_boutons_palette=Temp; - - Fenetre_Dessiner_bouton_palette(Pos_X,Pos_Y); -} - - -void Fenetre_Definir_bouton_scroller(word Pos_X, word Pos_Y, - word Hauteur, - word Nb_elements, - word Nb_elements_visibles, - word Position_initiale) -{ - struct Fenetre_Bouton_scroller * Temp; - - Temp=(struct Fenetre_Bouton_scroller *)malloc(sizeof(struct Fenetre_Bouton_scroller)); - Temp->Numero =++Nb_boutons_fenetre; - Temp->Pos_X =Pos_X; - Temp->Pos_Y =Pos_Y; - Temp->Hauteur =Hauteur; - Temp->Nb_elements =Nb_elements; - Temp->Nb_visibles =Nb_elements_visibles; - Temp->Position =Position_initiale; - Calculer_hauteur_curseur_jauge(Temp); - - Temp->Next=Fenetre_Liste_boutons_scroller; - Fenetre_Liste_boutons_scroller=Temp; - - Fenetre_Dessiner_bouton_scroller(Temp); -} - - -void Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word Largeur,word Hauteur) -{ - struct Fenetre_Bouton_special * Temp; - - Temp=(struct Fenetre_Bouton_special *)malloc(sizeof(struct Fenetre_Bouton_special)); - Temp->Numero =++Nb_boutons_fenetre; - Temp->Pos_X =Pos_X; - Temp->Pos_Y =Pos_Y; - Temp->Largeur =Largeur; - Temp->Hauteur =Hauteur; - - Temp->Next=Fenetre_Liste_boutons_special; - Fenetre_Liste_boutons_special=Temp; -} - - -void Fenetre_Definir_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres) -{ - Fenetre_Definir_bouton_special(Pos_X,Pos_Y,(Largeur_en_caracteres<<3)+3,11); - Fenetre_Dessiner_bouton_saisie(Pos_X,Pos_Y,Largeur_en_caracteres); -} - - - - -////////////////////////////////////////////////////////////////////////////// -// // -// Mini-MOTEUR utilisé dans les fenêtres (menus des boutons...) // -// // -////////////////////////////////////////////////////////////////////////////// - - -// -- Indique si on a cliqué dans une zone définie par deux points extremes -- -byte Fenetre_click_dans_zone(short Debut_X,short Debut_Y,short Fin_X,short Fin_Y) -{ - short Pos_X,Pos_Y; - - Pos_X=((short)Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X; - Pos_Y=((short)Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y; - - return ((Pos_X>=Debut_X) && - (Pos_Y>=Debut_Y) && - (Pos_X<=Fin_X) && - (Pos_Y<=Fin_Y)); -} - - -// --- Attend que l'on clique dans la palette pour renvoyer la couleur choisie -// ou bien renvoie -1 si on a annulé l'action pas click-droit ou Escape ------ -short Attendre_click_dans_palette(struct Fenetre_Bouton_palette * Enreg) -{ - short Debut_X=Enreg->Pos_X+5; - short Debut_Y=Enreg->Pos_Y+3; - short Fin_X =Enreg->Pos_X+160; - short Fin_Y =Enreg->Pos_Y+82; - byte Couleur_choisie; - byte Ancien_Cacher_curseur; - byte Ancien_Loupe_Mode; - - Effacer_curseur(); - Ancien_Cacher_curseur=Cacher_curseur; - Ancien_Loupe_Mode=Loupe_Mode; - Loupe_Mode=0; - Cacher_curseur=0; - Forme_curseur=FORME_CURSEUR_CIBLE; - Afficher_curseur(); - - for (;;) - { - Get_input(); - - if ( (Mouse_K==A_GAUCHE) && - ( - ( - (Fenetre_click_dans_zone(Debut_X,Debut_Y,Fin_X,Fin_Y)) && - ( ( ((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-Enreg->Pos_X-1) % 10 >= 5 ) - ) - || - ( - (Mouse_X=Fenetre_Pos_X+(Fenetre_Largeur*Menu_Facteur_X)) || - (Mouse_Y>=Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y)) - ) - ) - ) - { - Attendre_fin_de_click(); - Effacer_curseur(); - Couleur_choisie=Lit_pixel(Mouse_X,Mouse_Y); - Forme_curseur=FORME_CURSEUR_FLECHE; - Cacher_curseur=Ancien_Cacher_curseur; - Loupe_Mode=Ancien_Loupe_Mode; - Afficher_curseur(); - return Couleur_choisie; - } - - if ((Mouse_K==A_DROITE) || (Touche==0x0001)) - { - Attendre_fin_de_click(); - Effacer_curseur(); - Forme_curseur=FORME_CURSEUR_FLECHE; - Cacher_curseur=Ancien_Cacher_curseur; - Loupe_Mode=Ancien_Loupe_Mode; - Afficher_curseur(); - return -1; - } - } -} - - - -// -------------- Récupération d'une couleur derrière un menu ---------------- -void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * Click) -{ - short Largeur=Fenetre_Largeur*Menu_Facteur_X; - short Hauteur=Fenetre_Hauteur*Menu_Facteur_Y; - short Ancien_X=-1; - short Ancien_Y=-1; - short Indice; - short A,B,C,D; // Variables temporaires et multitƒches... - byte * Buffer; - char Chaine[25]; - byte Cacher_curseur_avant_recuperation; - - - if ((Buffer=(byte *) malloc(Largeur*Hauteur))) - { - Effacer_curseur(); - - Cacher_curseur_avant_recuperation=Cacher_curseur; - Cacher_curseur=0; - - for (Indice=0; Indice=Bouton[Numero].Decalage_X) && + (Pos_Y>=Bouton[Numero].Decalage_Y) && + (Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Largeur) && + (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Hauteur)) + return Numero; + break; + + case FORME_BOUTON_TRIANGLE_HAUT_GAUCHE: + if ((Pos_X>=Bouton[Numero].Decalage_X) && + (Pos_Y>=Bouton[Numero].Decalage_Y) && + (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X<=Bouton[Numero].Largeur)) + return Numero; + break; + + case FORME_BOUTON_TRIANGLE_BAS_DROITE: + if ((Pos_X<=Bouton[Numero].Decalage_X+Bouton[Numero].Largeur) && + (Pos_Y<=Bouton[Numero].Decalage_Y+Bouton[Numero].Hauteur) && + (Pos_X+Pos_Y-(short)Bouton[Numero].Decalage_Y-(short)Bouton[Numero].Decalage_X>=Bouton[Numero].Largeur)) + return Numero; + break; + } + } + return -1; +} + + +void Tracer_cadre_de_bouton_du_menu(byte Numero,byte Enfonce) +{ + byte Couleur_Haut_gauche; + byte Couleur_Bas_droite; + byte Couleur_Diagonale; + word Debut_X; + word Debut_Y; + word Fin_X; + word Fin_Y; + word Pos_X; + word Pos_Y; + + Debut_X=Bouton[Numero].Decalage_X; + Debut_Y=Bouton[Numero].Decalage_Y; + Fin_X =Debut_X+Bouton[Numero].Largeur; + Fin_Y =Debut_Y+Bouton[Numero].Hauteur; + + if (!Enfonce) + { + Couleur_Haut_gauche=CM_Blanc; + Couleur_Bas_droite=CM_Fonce; + Couleur_Diagonale=CM_Clair; + } + else + { + Couleur_Haut_gauche=CM_Fonce; + Couleur_Bas_droite=CM_Noir; + Couleur_Diagonale=CM_Fonce; + } + + switch(Bouton[Numero].Forme) + { + case FORME_BOUTON_SANS_CADRE : + break; + case FORME_BOUTON_RECTANGLE : + // On colorie le point haut droit + Pixel_dans_menu(Fin_X,Debut_Y,Couleur_Diagonale); + BLOCK_MENU[Debut_Y][Fin_X]=Couleur_Diagonale; + // On colorie le point bas gauche + Pixel_dans_menu(Debut_X,Fin_Y,Couleur_Diagonale); + BLOCK_MENU[Fin_Y][Debut_X]=Couleur_Diagonale; + // On colorie la partie haute + for (Pos_X=Debut_X;Pos_X<=Fin_X-1;Pos_X++) + { + Pixel_dans_menu(Pos_X,Debut_Y,Couleur_Haut_gauche); + BLOCK_MENU[Debut_Y][Pos_X]=Couleur_Haut_gauche; + } + for (Pos_Y=Debut_Y+1;Pos_Y<=Fin_Y-1;Pos_Y++) + { + // On colorie la partie gauche + Pixel_dans_menu(Debut_X,Pos_Y,Couleur_Haut_gauche); + BLOCK_MENU[Pos_Y][Debut_X]=Couleur_Haut_gauche; + // On colorie la partie droite + Pixel_dans_menu(Fin_X,Pos_Y,Couleur_Bas_droite); + BLOCK_MENU[Pos_Y][Fin_X]=Couleur_Bas_droite; + } + // On colorie la partie basse + for (Pos_X=Debut_X+1;Pos_X<=Fin_X;Pos_X++) + { + Pixel_dans_menu(Pos_X,Fin_Y,Couleur_Bas_droite); + BLOCK_MENU[Fin_Y][Pos_X]=Couleur_Bas_droite; + } + break; + case FORME_BOUTON_TRIANGLE_HAUT_GAUCHE: + // On colorie le point haut droit + Pixel_dans_menu(Fin_X,Debut_Y,Couleur_Diagonale); + BLOCK_MENU[Debut_Y][Fin_X]=Couleur_Diagonale; + // On colorie le point bas gauche + Pixel_dans_menu(Debut_X,Fin_Y,Couleur_Diagonale); + BLOCK_MENU[Fin_Y][Debut_X]=Couleur_Diagonale; + // On colorie le coin haut gauche + for (Pos_X=0;Pos_XSPECIAL_CLICK_RIGHT) + switch(Indice_Touche) + { + case SPECIAL_SCROLL_UP : // Scroll up + if (Loupe_Mode) + Scroller_loupe(0,-(Loupe_Hauteur>>2)); + else + Scroller_ecran(0,-(Hauteur_ecran>>3)); + break; + case SPECIAL_SCROLL_DOWN : // Scroll down + if (Loupe_Mode) + Scroller_loupe(0,(Loupe_Hauteur>>2)); + else + Scroller_ecran(0,(Hauteur_ecran>>3)); + break; + case SPECIAL_SCROLL_LEFT : // Scroll left + if (Loupe_Mode) + Scroller_loupe(-(Loupe_Largeur>>2),0); + else + Scroller_ecran(-(Largeur_ecran>>3),0); + break; + case SPECIAL_SCROLL_RIGHT : // Scroll right + if (Loupe_Mode) + Scroller_loupe((Loupe_Largeur>>2),0); + else + Scroller_ecran((Largeur_ecran>>3),0); + break; + case SPECIAL_SCROLL_UP_FAST : // Scroll up faster + if (Loupe_Mode) + Scroller_loupe(0,-(Loupe_Hauteur>>1)); + else + Scroller_ecran(0,-(Hauteur_ecran>>2)); + break; + case SPECIAL_SCROLL_DOWN_FAST : // Scroll down faster + if (Loupe_Mode) + Scroller_loupe(0,(Loupe_Hauteur>>1)); + else + Scroller_ecran(0,(Hauteur_ecran>>2)); + break; + case SPECIAL_SCROLL_LEFT_FAST : // Scroll left faster + if (Loupe_Mode) + Scroller_loupe(-(Loupe_Largeur>>1),0); + else + Scroller_ecran(-(Largeur_ecran>>2),0); + break; + case SPECIAL_SCROLL_RIGHT_FAST : // Scroll right faster + if (Loupe_Mode) + Scroller_loupe((Loupe_Largeur>>1),0); + else + Scroller_ecran((Largeur_ecran>>2),0); + break; + case SPECIAL_SCROLL_UP_SLOW : // Scroll up slower + if (Loupe_Mode) + Scroller_loupe(0,-1); + else + Scroller_ecran(0,-1); + break; + case SPECIAL_SCROLL_DOWN_SLOW : // Scroll down slower + if (Loupe_Mode) + Scroller_loupe(0,1); + else + Scroller_ecran(0,1); + break; + case SPECIAL_SCROLL_LEFT_SLOW : // Scroll left slower + if (Loupe_Mode) + Scroller_loupe(-1,0); + else + Scroller_ecran(-1,0); + break; + case SPECIAL_SCROLL_RIGHT_SLOW : // Scroll right slower + if (Loupe_Mode) + Scroller_loupe(1,0); + else + Scroller_ecran(1,0); + break; + case SPECIAL_NEXT_FORECOLOR : // Next foreground color + Special_Next_forecolor(); + break; + case SPECIAL_PREVIOUS_FORECOLOR : // Previous foreground color + Special_Previous_forecolor(); + break; + case SPECIAL_NEXT_BACKCOLOR : // Next background color + Special_Next_backcolor(); + break; + case SPECIAL_PREVIOUS_BACKCOLOR : // Previous background color + Special_Previous_backcolor(); + break; + case SPECIAL_RETRECIR_PINCEAU: // Rétrécir le pinceau + Retrecir_pinceau(); + break; + case SPECIAL_GROSSIR_PINCEAU: // Grossir le pinceau + Grossir_pinceau(); + break; + case SPECIAL_NEXT_USER_FORECOLOR : // Next user-defined foreground color + Message_Non_disponible(); // !!! TEMPORAIRE !!! + //Special_Next_user_forecolor(); + break; + case SPECIAL_PREVIOUS_USER_FORECOLOR : // Previous user-defined foreground color + Message_Non_disponible(); // !!! TEMPORAIRE !!! + //Special_Previous_user_forecolor(); + break; + case SPECIAL_NEXT_USER_BACKCOLOR : // Next user-defined background color + Message_Non_disponible(); // !!! TEMPORAIRE !!! + //Special_Next_user_backcolor(); + break; + case SPECIAL_PREVIOUS_USER_BACKCOLOR : // Previous user-defined background color + Message_Non_disponible(); // !!! TEMPORAIRE !!! + //Special_Previous_user_backcolor(); + break; + case SPECIAL_SHOW_HIDE_CURSOR : // Show / Hide cursor + Effacer_curseur(); + Cacher_curseur=!Cacher_curseur; + Afficher_curseur(); + break; + case SPECIAL_PINCEAU_POINT : // Paintbrush = "." + Effacer_curseur(); + Pinceau_Forme=FORME_PINCEAU_ROND; + Modifier_pinceau(1,1); + Changer_la_forme_du_pinceau(FORME_PINCEAU_ROND); + Afficher_curseur(); + break; + case SPECIAL_DESSIN_CONTINU : // Continuous freehand drawing + Enclencher_bouton(BOUTON_DESSIN,A_GAUCHE); + while (Operation_en_cours!=OPERATION_DESSIN_CONTINU) + Enclencher_bouton(BOUTON_DESSIN,A_DROITE); + break; + case SPECIAL_FLIP_X : // Flip X + Effacer_curseur(); + Flip_X_LOWLEVEL(); + Afficher_curseur(); + break; + case SPECIAL_FLIP_Y : // Flip Y + Effacer_curseur(); + Flip_Y_LOWLEVEL(); + Afficher_curseur(); + break; + case SPECIAL_ROTATE_90 : // 90ø brush rotation + Effacer_curseur(); + Rotate_90_deg(); + Afficher_curseur(); + break; + case SPECIAL_ROTATE_180 : // 180ø brush rotation + Effacer_curseur(); + if (Brosse_Hauteur&1) { - sprintf(Chaine,"%d",A); - D=strlen(Chaine); + // Brosse de hauteur impaire + Flip_X_LOWLEVEL(); + Flip_Y_LOWLEVEL(); + } + else + Rotate_180_deg_LOWLEVEL(); + Brosse_Decalage_X=(Brosse_Largeur>>1); + Brosse_Decalage_Y=(Brosse_Hauteur>>1); + Afficher_curseur(); + break; + case SPECIAL_STRETCH : // Stretch brush + Effacer_curseur(); + Demarrer_pile_operation(OPERATION_ETIRER_BROSSE); + Afficher_curseur(); + break; + case SPECIAL_DISTORT : // Distort brush + Message_Non_disponible(); // !!! TEMPORAIRE !!! + break; + case SPECIAL_ROTATE_ANY_ANGLE : // Rotate brush by any angle + Effacer_curseur(); + Demarrer_pile_operation(OPERATION_TOURNER_BROSSE); + Afficher_curseur(); + break; + case SPECIAL_OUTLINE : // Outline brush + Effacer_curseur(); + Outline_brush(); + Afficher_curseur(); + break; + case SPECIAL_NIBBLE : // Nibble brush + Effacer_curseur(); + Nibble_brush(); + Afficher_curseur(); + break; + case SPECIAL_GET_BRUSH_COLORS : // Get colors from brush + Get_colors_from_brush(); + break; + case SPECIAL_RECOLORIZE_BRUSH : // Recolorize brush + Effacer_curseur(); + Remap_brosse(); + Afficher_curseur(); + break; + case SPECIAL_LOAD_BRUSH : + Load_picture(0); + break; + case SPECIAL_SAVE_BRUSH : + Save_picture(0); + break; + case SPECIAL_ZOOM_IN : // Zoom in + Zoom(+1); + break; + case SPECIAL_ZOOM_OUT : // Zoom out + Zoom(-1); + break; + case SPECIAL_CENTER_ATTACHMENT : // Center brush attachment + Effacer_curseur(); + Brosse_Decalage_X=(Brosse_Largeur>>1); + Brosse_Decalage_Y=(Brosse_Hauteur>>1); + Afficher_curseur(); + break; + case SPECIAL_TOP_LEFT_ATTACHMENT : // Top-left brush attachment + Effacer_curseur(); + Brosse_Decalage_X=0; + Brosse_Decalage_Y=0; + Afficher_curseur(); + break; + case SPECIAL_TOP_RIGHT_ATTACHMENT : // Top-right brush attachment + Effacer_curseur(); + Brosse_Decalage_X=(Brosse_Largeur-1); + Brosse_Decalage_Y=0; + Afficher_curseur(); + break; + case SPECIAL_BOTTOM_LEFT_ATTACHMENT : // Bottom-left brush attachment + Effacer_curseur(); + Brosse_Decalage_X=0; + Brosse_Decalage_Y=(Brosse_Hauteur-1); + Afficher_curseur(); + break; + case SPECIAL_BOTTOM_RIGHT_ATTACHMENT : // Bottom right brush attachment + Effacer_curseur(); + Brosse_Decalage_X=(Brosse_Largeur-1); + Brosse_Decalage_Y=(Brosse_Hauteur-1); + Afficher_curseur(); + break; + case SPECIAL_EXCLUDE_COLORS_MENU : // Exclude colors menu + Menu_Tag_couleurs("Tag colors to exclude",Exclude_color,&Temp,1); + break; + case SPECIAL_INVERT_SIEVE : + Inverser_trame(); + break; + case SPECIAL_SHADE_MODE : + Bouton_Shade_Mode(); + break; + case SPECIAL_SHADE_MENU : + Bouton_Shade_Menu(); + break; + case SPECIAL_QUICK_SHADE_MODE : + Bouton_Quick_shade_Mode(); + break; + case SPECIAL_QUICK_SHADE_MENU : + Bouton_Quick_shade_Menu(); + break; + case SPECIAL_STENCIL_MODE : + Bouton_Stencil_Mode(); + break; + case SPECIAL_STENCIL_MENU : + Bouton_Menu_Stencil(); + break; + case SPECIAL_MASK_MODE : + Bouton_Mask_Mode(); + break; + case SPECIAL_MASK_MENU : + Bouton_Mask_Menu(); + break; + case SPECIAL_GRID_MODE : + Bouton_Snap_Mode(); + break; + case SPECIAL_GRID_MENU : + Bouton_Menu_Grille(); + break; + case SPECIAL_SIEVE_MODE : + Bouton_Trame_Mode(); + break; + case SPECIAL_SIEVE_MENU : + Bouton_Trame_Menu(); + break; + case SPECIAL_COLORIZE_MODE : + Bouton_Colorize_Mode(); + break; + case SPECIAL_COLORIZE_MENU : + Bouton_Colorize_Menu(); + break; + case SPECIAL_SMOOTH_MODE : + Bouton_Smooth_Mode(); + break; + case SPECIAL_SMOOTH_MENU : + Bouton_Smooth_Menu(); + break; + case SPECIAL_SMEAR_MODE : + Bouton_Smear_Mode(); + break; + case SPECIAL_TILING_MODE : + Bouton_Tiling_Mode(); + break; + case SPECIAL_TILING_MENU : + Bouton_Tiling_Menu(); + break; + default : // Gestion des touches de raccourci de bouton: + // Pour chaque bouton + Bouton_Touche=-1; + for (Indice_bouton=0;Indice_bouton=SPECIAL_SHADE_MODE) + && (Indice_Touche<=SPECIAL_TILING_MENU)) + { + Effacer_curseur(); + Tracer_cadre_de_bouton_du_menu(BOUTON_EFFETS, + (Shade_Mode||Quick_shade_Mode||Colorize_Mode||Smooth_Mode||Tiling_Mode||Smear_Mode||Stencil_Mode||Mask_Mode||Trame_Mode||Snap_Mode)); + Afficher_curseur(); + } + } + + // Gestion de la souris + + Curseur_dans_menu=(Mouse_Y>=Menu_Ordonnee) || + ( (Loupe_Mode) && (Mouse_X>=Principal_Split) && + (Mouse_X>2); + + strcpy(Chaine,TITRE_BOUTON[Indice_bouton]); + sprintf(Chaine+strlen(Chaine),"%d",Temp); + strcat(Chaine," ("); + sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[Temp].R); + strcat(Chaine,","); + sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[Temp].V); + strcat(Chaine,","); + sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[Temp].B); + strcat(Chaine,")"); + for (Temp=strlen(Chaine); Temp<24; Temp++) + Chaine[Temp]=' '; + Chaine[24]=0; + Print_dans_menu(Chaine,0); + Afficher_curseur(); + } + else + { + if ( (Old_MX!=Mouse_X) || (Old_MY!=Mouse_Y) ) + { + Effacer_curseur(); + Block(18*Menu_Facteur_X,Menu_Ordonnee_Texte,192*Menu_Facteur_X,Menu_Facteur_Y<<3,CM_Clair); + Afficher_curseur(); + } + } + Old_MX=Mouse_X; + Old_MY=Mouse_Y; + } + } + } + } + + Indice_bouton_precedent=Indice_bouton; + + // Gestion des clicks + if (Mouse_K) + { + if (Mouse_Y>=Menu_Ordonnee) + { + if (Indice_bouton>=0) + { + Enclencher_bouton(Indice_bouton,Mouse_K); + Indice_bouton_precedent=-1; + } + } + else + if (Loupe_Mode) Deplacer_Split(); + } + } + else + { + // Le curseur se trouve dans l'image + + if ( (Curseur_dans_menu_precedent) && (Menu_visible) ) + { + if ( (Operation_en_cours!=OPERATION_PIPETTE) + && (Operation_en_cours!=OPERATION_REMPLACER) ) + Print_dans_menu("X: Y: ",0); + else + { + Print_dans_menu("X: Y: ( )",0); + Num2str(Pipette_Couleur,Chaine,3); + Print_dans_menu(Chaine,20); + Print_general(170*Menu_Facteur_X,Menu_Ordonnee_Texte," ",0,Pipette_Couleur); + } + Print_coordonnees(); + } + + Blink=Operation[Operation_en_cours][Mouse_K][Operation_Taille_pile].Effacer_curseur; + + if (Blink) Effacer_curseur(); + + Operation[Operation_en_cours][Mouse_K][Operation_Taille_pile].Action(); + + if (Blink) Afficher_curseur(); + } + + Curseur_dans_menu_precedent=Curseur_dans_menu; + } + while (!Sortir_du_programme); +} + + + + + +////////////////////////////////////////////////////////////////////////////// +// Différentes fonctions d'affichage utilisées dans les fenêtres // +////////////////////////////////////////////////////////////////////////////// + +//----------------------- Tracer une fenêtre d'options ----------------------- + +void Ouvrir_fenetre(word Largeur,word Hauteur, char * Titre) +// Lors de l'appel à cette procédure, la souris doit être affichée. +// En sortie de cette procedure, la souris est effacée. +{ + //word i,j; + + Effacer_curseur(); + + Une_fenetre_est_ouverte=1; + + Fenetre_Largeur=Largeur; + Fenetre_Hauteur=Hauteur; + + // Positionnement de la fenêtre + Fenetre_Pos_X=(Largeur_ecran-(Largeur*Menu_Facteur_X))>>1; + + Fenetre_Pos_Y=(Hauteur_ecran-(Hauteur*Menu_Facteur_Y))>>1; + + // Fenêtre grise + Block(Fenetre_Pos_X+(Menu_Facteur_X<<1),Fenetre_Pos_Y+(Menu_Facteur_Y<<1),(Largeur-4)*Menu_Facteur_X,(Hauteur-4)*Menu_Facteur_Y,CM_Clair); + + // -- Cadre de la fenêtre ----- --- -- - - + + // Cadre noir puis en relief + Fenetre_Afficher_cadre_mono(0,0,Largeur,Hauteur,CM_Noir); + Fenetre_Afficher_cadre_bombe(1,1,Largeur-2,Hauteur-2); + + // Barre sous le titre + Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(11*Menu_Facteur_Y),(Largeur-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Fonce); + Block(Fenetre_Pos_X+(Menu_Facteur_X<<3),Fenetre_Pos_Y+(12*Menu_Facteur_Y),(Largeur-16)*Menu_Facteur_X,Menu_Facteur_Y,CM_Blanc); + + Print_dans_fenetre((Largeur-(strlen(Titre)<<3))>>1,3,Titre,CM_Noir,CM_Clair); + + Menu_visible_avant_fenetre=Menu_visible; + Menu_visible=0; + Menu_Ordonnee_avant_fenetre=Menu_Ordonnee; + Menu_Ordonnee=Hauteur_ecran; + Forme_curseur_avant_fenetre=Forme_curseur; + Forme_curseur=FORME_CURSEUR_FLECHE; + Cacher_pinceau_avant_fenetre=Cacher_pinceau; + Cacher_pinceau=1; + + // Initialisation des listes de boutons de la fenêtre + Fenetre_Liste_boutons_normal =NULL; + Fenetre_Liste_boutons_palette =NULL; + Fenetre_Liste_boutons_scroller=NULL; + Fenetre_Liste_boutons_special =NULL; + Nb_boutons_fenetre =0; + + // On (re)passe dans le clavier de départ (fran‡ais pour nous) + Clavier_de_depart(); +} + +//----------------------- Fermer une fenêtre d'options ----------------------- + +void Fermer_fenetre(void) +// Lors de l'appel à cette procedure, la souris doit être affichée. +// En sortie de cette procedure, la souris est effacée. +{ + struct Fenetre_Bouton_normal * Temp1; + struct Fenetre_Bouton_palette * Temp2; + struct Fenetre_Bouton_scroller * Temp3; + struct Fenetre_Bouton_special * Temp4; + + Effacer_curseur(); + + Cacher_pinceau=Cacher_pinceau_avant_fenetre; + + while (Fenetre_Liste_boutons_normal) + { + Temp1=Fenetre_Liste_boutons_normal->Next; + free(Fenetre_Liste_boutons_normal); + Fenetre_Liste_boutons_normal=Temp1; + } + while (Fenetre_Liste_boutons_palette) + { + Temp2=Fenetre_Liste_boutons_palette->Next; + free(Fenetre_Liste_boutons_palette); + Fenetre_Liste_boutons_palette=Temp2; + } + while (Fenetre_Liste_boutons_scroller) + { + Temp3=Fenetre_Liste_boutons_scroller->Next; + free(Fenetre_Liste_boutons_scroller); + Fenetre_Liste_boutons_scroller=Temp3; + } + while (Fenetre_Liste_boutons_special) + { + Temp4=Fenetre_Liste_boutons_special->Next; + free(Fenetre_Liste_boutons_special); + Fenetre_Liste_boutons_special=Temp4; + } + + Une_fenetre_est_ouverte=0; + Curseur_dans_menu_precedent=0; // il faut rafficher le libellé dans la barre + // d'outils si le curseur est sur une ic“ne. + + Calculer_coordonnees_pinceau(); + + Menu_Ordonnee=Menu_Ordonnee_avant_fenetre; + Menu_visible=Menu_visible_avant_fenetre; + Forme_curseur=Forme_curseur_avant_fenetre; + + Afficher_ecran(); + Afficher_menu(); + + Touche=0; + Mouse_K=0; + + // On (re)passe dans le clavier américain + Clavier_americain(); +} + + +//---------------- Dessiner un bouton normal dans une fenêtre ---------------- + +void Fenetre_Dessiner_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur, + char * Titre,byte Lettre_soulignee,byte Clickable) +{ + byte Couleur_titre; + word Pos_texte_X,Pos_texte_Y; + + if (Clickable) + { + Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); + Fenetre_Afficher_cadre_general(Pos_X-1,Pos_Y-1,Largeur+2,Hauteur+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); + Couleur_titre=CM_Noir; + } + else + { + Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); + Fenetre_Afficher_cadre_mono(Pos_X-1,Pos_Y-1,Largeur+2,Hauteur+2,CM_Clair); + Couleur_titre=CM_Fonce; + } + + Pos_texte_X=Pos_X+( (Largeur-(strlen(Titre)<<3)+1) >>1 ); + Pos_texte_Y=Pos_Y+((Hauteur-7)>>1); + Print_dans_fenetre(Pos_texte_X,Pos_texte_Y,Titre,Couleur_titre,CM_Clair); + + if (Lettre_soulignee) + Block(Fenetre_Pos_X+((Pos_texte_X+((Lettre_soulignee-1)<<3))*Menu_Facteur_X), + Fenetre_Pos_Y+((Pos_texte_Y+8)*Menu_Facteur_Y), + Menu_Facteur_X<<3,Menu_Facteur_Y,CM_Fonce); +} + + +// -- Bouton normal enfoncé dans la fenêtre -- +void Fenetre_Enfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +{ + Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Fonce,CM_Noir,CM_Fonce,CM_Fonce,CM_Noir); +} + +// -- Bouton normal désenfoncé dans la fenêtre -- +void Fenetre_Desenfoncer_bouton_normal(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +{ + Fenetre_Afficher_cadre_bombe(Pos_X,Pos_Y,Largeur,Hauteur); +} + + +//--------------- Dessiner un bouton palette dans une fenêtre ---------------- +void Fenetre_Dessiner_bouton_palette(word Pos_X,word Pos_Y) +{ + word Couleur; + + for (Couleur=0; Couleur<=255; Couleur++) + Block( Fenetre_Pos_X+((((Couleur >> 4)*10)+Pos_X+6)*Menu_Facteur_X),Fenetre_Pos_Y+((((Couleur & 15)*5)+Pos_Y+3)*Menu_Facteur_Y),Menu_Facteur_X*5,Menu_Facteur_Y*5,Couleur); + + Fenetre_Afficher_cadre(Pos_X,Pos_Y,164,86); +} + + +// -------------------- Effacer les TAGs sur les palette --------------------- +// Cette fonctø ne sert plus que lorsqu'on efface les tags dans le menu Spray. +void Fenetre_Effacer_tags(void) +{ + word Origine_X; + word Origine_Y; + word Pos_X; + word Pos_fenetre_X; + //word Pos_fenetre_Y; + + Origine_X=Fenetre_Pos_X+(Fenetre_Liste_boutons_palette->Pos_X+3)*Menu_Facteur_X; + Origine_Y=Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3)*Menu_Facteur_Y; + for (Pos_X=0,Pos_fenetre_X=Origine_X;Pos_X<16;Pos_X++,Pos_fenetre_X+=(Menu_Facteur_X*10)) + Block(Pos_fenetre_X,Origine_Y,Menu_Facteur_X*3,Menu_Facteur_Y*80,CM_Clair); +} + + +// ---- Tracer les TAGs sur les palettes du menu Palette ou du menu Shade ---- +void Tagger_intervalle_palette(byte Debut,byte Fin) +{ + word Origine_X; + word Origine_Y; + //word Pos_X; + word Pos_Y; + //word Pos_fenetre_X; + word Pos_fenetre_Y; + word Indice; + + // On efface les anciens TAGs + for (Indice=0;Indice<=Debut;Indice++) + Block(Fenetre_Pos_X+(Fenetre_Liste_boutons_palette->Pos_X+3+((Indice>>4)*10))*Menu_Facteur_X, + Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3+((Indice&15)* 5))*Menu_Facteur_Y, + Menu_Facteur_X*3,Menu_Facteur_Y*5,CM_Clair); + + for (Indice=Fin;Indice<256;Indice++) + Block(Fenetre_Pos_X+(Fenetre_Liste_boutons_palette->Pos_X+3+((Indice>>4)*10))*Menu_Facteur_X, + Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3+((Indice&15)* 5))*Menu_Facteur_Y, + Menu_Facteur_X*3,Menu_Facteur_Y*5,CM_Clair); + + // On affiche le 1er TAG + Origine_X=(Fenetre_Liste_boutons_palette->Pos_X+3)+(Debut>>4)*10; + Origine_Y=(Fenetre_Liste_boutons_palette->Pos_Y+3)+(Debut&15)* 5; + for (Pos_Y=0,Pos_fenetre_Y=Origine_Y ;Pos_Y<5;Pos_Y++,Pos_fenetre_Y++) + Pixel_dans_fenetre(Origine_X ,Pos_fenetre_Y,CM_Noir); + for (Pos_Y=0,Pos_fenetre_Y=Origine_Y+1;Pos_Y<3;Pos_Y++,Pos_fenetre_Y++) + Pixel_dans_fenetre(Origine_X+1,Pos_fenetre_Y,CM_Noir); + Pixel_dans_fenetre(Origine_X+2,Origine_Y+2,CM_Noir); + + if (Debut!=Fin) + { + // On complète le 1er TAG + Pixel_dans_fenetre(Origine_X+1,Origine_Y+4,CM_Noir); + + // On affiche le 2ème TAG + Origine_X=(Fenetre_Liste_boutons_palette->Pos_X+3)+(Fin>>4)*10; + Origine_Y=(Fenetre_Liste_boutons_palette->Pos_Y+3)+(Fin&15)* 5; + for (Pos_Y=0,Pos_fenetre_Y=Origine_Y; Pos_Y<5; Pos_Y++,Pos_fenetre_Y++) + Pixel_dans_fenetre(Origine_X ,Pos_fenetre_Y,CM_Noir); + for (Pos_Y=0,Pos_fenetre_Y=Origine_Y; Pos_Y<4; Pos_Y++,Pos_fenetre_Y++) + Pixel_dans_fenetre(Origine_X+1,Pos_fenetre_Y,CM_Noir); + Pixel_dans_fenetre(Origine_X+2,Origine_Y+2,CM_Noir); + + // On TAG toutes les couleurs intermédiaires + for (Indice=Debut+1;IndicePos_X+3+((Indice>>4)*10))*Menu_Facteur_X, + Fenetre_Pos_Y+(Fenetre_Liste_boutons_palette->Pos_Y+3+((Indice&15)* 5))*Menu_Facteur_Y, + Menu_Facteur_X*2,Menu_Facteur_Y*5,CM_Noir); + // On efface l'éventuelle pointe d'une ancienne extrémité de l'intervalle + Pixel_dans_fenetre(Fenetre_Liste_boutons_palette->Pos_X+5+((Indice>>4)*10), + Fenetre_Liste_boutons_palette->Pos_Y+5+((Indice&15)* 5), + CM_Clair); + } + } +} + + +//------------------ Dessiner un scroller dans une fenêtre ------------------- + +void Calculer_hauteur_curseur_jauge(struct Fenetre_Bouton_scroller * Enreg) +{ + if (Enreg->Nb_elements>Enreg->Nb_visibles) + { + Enreg->Hauteur_curseur=(Enreg->Nb_visibles*(Enreg->Hauteur-24))/Enreg->Nb_elements; + if (!(Enreg->Hauteur_curseur)) + Enreg->Hauteur_curseur=1; + } + else + { + Enreg->Hauteur_curseur=Enreg->Hauteur-24; + } +} + +void Fenetre_Dessiner_jauge(struct Fenetre_Bouton_scroller * Enreg) +{ + word Position_curseur_jauge; + + Position_curseur_jauge=Enreg->Pos_Y+12; + + Block(Fenetre_Pos_X+(Enreg->Pos_X*Menu_Facteur_X), + Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), + 11*Menu_Facteur_X,(Enreg->Hauteur-24)*Menu_Facteur_Y,CM_Noir/*CM_Fonce*/); + + if (Enreg->Nb_elements>Enreg->Nb_visibles) + Position_curseur_jauge+=Round_div(Enreg->Position*(Enreg->Hauteur-24-Enreg->Hauteur_curseur),Enreg->Nb_elements-Enreg->Nb_visibles); + + Block(Fenetre_Pos_X+(Enreg->Pos_X*Menu_Facteur_X), + Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), + 11*Menu_Facteur_X,Enreg->Hauteur_curseur*Menu_Facteur_Y,CM_Clair/*CM_Blanc*/); +} + +void Fenetre_Dessiner_bouton_scroller(struct Fenetre_Bouton_scroller * Enreg) +{ + Fenetre_Afficher_cadre_general(Enreg->Pos_X-1,Enreg->Pos_Y-1,13,Enreg->Hauteur+2,CM_Noir,CM_Noir,CM_Fonce,CM_Fonce,CM_Fonce); + Fenetre_Afficher_cadre_mono(Enreg->Pos_X-1,Enreg->Pos_Y+11,13,Enreg->Hauteur-22,CM_Noir); + Fenetre_Afficher_cadre_bombe(Enreg->Pos_X,Enreg->Pos_Y,11,11); + Fenetre_Afficher_cadre_bombe(Enreg->Pos_X,Enreg->Pos_Y+Enreg->Hauteur-11,11,11); + Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+2,"\030",CM_Noir,CM_Clair); + Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+Enreg->Hauteur-9,"\031",CM_Noir,CM_Clair); + Fenetre_Dessiner_jauge(Enreg); +} + + +//--------------- Dessiner une zone de saisie dans une fenêtre --------------- + +void Fenetre_Dessiner_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres) +{ + Fenetre_Afficher_cadre_creux(Pos_X,Pos_Y,(Largeur_en_caracteres<<3)+3,11); +} + + +//------------ Modifier le contenu (caption) d'une zone de saisie ------------ + +void Fenetre_Contenu_bouton_saisie(struct Fenetre_Bouton_special * Enreg, char * Contenu) +{ + Print_dans_fenetre(Enreg->Pos_X+2,Enreg->Pos_Y+2,Contenu,CM_Noir,CM_Clair); +} + + + +//------ Rajout d'un bouton à la liste de ceux présents dans la fenêtre ------ + +void Fenetre_Definir_bouton_normal(word Pos_X, word Pos_Y, + word Largeur, word Hauteur, + char * Titre, byte Lettre_soulignee, + byte Clickable, word Raccourci) +{ + struct Fenetre_Bouton_normal * Temp; + + Nb_boutons_fenetre++; + + if (Clickable) + { + Temp=(struct Fenetre_Bouton_normal *)malloc(sizeof(struct Fenetre_Bouton_normal)); + Temp->Numero =Nb_boutons_fenetre; + Temp->Pos_X =Pos_X; + Temp->Pos_Y =Pos_Y; + Temp->Largeur =Largeur; + Temp->Hauteur =Hauteur; + Temp->Raccourci=Raccourci; + + Temp->Next=Fenetre_Liste_boutons_normal; + Fenetre_Liste_boutons_normal=Temp; + } + + Fenetre_Dessiner_bouton_normal(Pos_X,Pos_Y,Largeur,Hauteur,Titre,Lettre_soulignee,Clickable); +} + + +void Fenetre_Definir_bouton_palette(word Pos_X, word Pos_Y) +{ + struct Fenetre_Bouton_palette * Temp; + + Temp=(struct Fenetre_Bouton_palette *)malloc(sizeof(struct Fenetre_Bouton_palette)); + Temp->Numero =++Nb_boutons_fenetre; + Temp->Pos_X =Pos_X; + Temp->Pos_Y =Pos_Y; + + Temp->Next=Fenetre_Liste_boutons_palette; + Fenetre_Liste_boutons_palette=Temp; + + Fenetre_Dessiner_bouton_palette(Pos_X,Pos_Y); +} + + +void Fenetre_Definir_bouton_scroller(word Pos_X, word Pos_Y, + word Hauteur, + word Nb_elements, + word Nb_elements_visibles, + word Position_initiale) +{ + struct Fenetre_Bouton_scroller * Temp; + + Temp=(struct Fenetre_Bouton_scroller *)malloc(sizeof(struct Fenetre_Bouton_scroller)); + Temp->Numero =++Nb_boutons_fenetre; + Temp->Pos_X =Pos_X; + Temp->Pos_Y =Pos_Y; + Temp->Hauteur =Hauteur; + Temp->Nb_elements =Nb_elements; + Temp->Nb_visibles =Nb_elements_visibles; + Temp->Position =Position_initiale; + Calculer_hauteur_curseur_jauge(Temp); + + Temp->Next=Fenetre_Liste_boutons_scroller; + Fenetre_Liste_boutons_scroller=Temp; + + Fenetre_Dessiner_bouton_scroller(Temp); +} + + +void Fenetre_Definir_bouton_special(word Pos_X,word Pos_Y,word Largeur,word Hauteur) +{ + struct Fenetre_Bouton_special * Temp; + + Temp=(struct Fenetre_Bouton_special *)malloc(sizeof(struct Fenetre_Bouton_special)); + Temp->Numero =++Nb_boutons_fenetre; + Temp->Pos_X =Pos_X; + Temp->Pos_Y =Pos_Y; + Temp->Largeur =Largeur; + Temp->Hauteur =Hauteur; + + Temp->Next=Fenetre_Liste_boutons_special; + Fenetre_Liste_boutons_special=Temp; +} + + +void Fenetre_Definir_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracteres) +{ + Fenetre_Definir_bouton_special(Pos_X,Pos_Y,(Largeur_en_caracteres<<3)+3,11); + Fenetre_Dessiner_bouton_saisie(Pos_X,Pos_Y,Largeur_en_caracteres); +} + + + + +////////////////////////////////////////////////////////////////////////////// +// // +// Mini-MOTEUR utilisé dans les fenêtres (menus des boutons...) // +// // +////////////////////////////////////////////////////////////////////////////// + + +// -- Indique si on a cliqué dans une zone définie par deux points extremes -- +byte Fenetre_click_dans_zone(short Debut_X,short Debut_Y,short Fin_X,short Fin_Y) +{ + short Pos_X,Pos_Y; + + Pos_X=((short)Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X; + Pos_Y=((short)Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y; + + return ((Pos_X>=Debut_X) && + (Pos_Y>=Debut_Y) && + (Pos_X<=Fin_X) && + (Pos_Y<=Fin_Y)); +} + + +// --- Attend que l'on clique dans la palette pour renvoyer la couleur choisie +// ou bien renvoie -1 si on a annulé l'action pas click-droit ou Escape ------ +short Attendre_click_dans_palette(struct Fenetre_Bouton_palette * Enreg) +{ + short Debut_X=Enreg->Pos_X+5; + short Debut_Y=Enreg->Pos_Y+3; + short Fin_X =Enreg->Pos_X+160; + short Fin_Y =Enreg->Pos_Y+82; + byte Couleur_choisie; + byte Ancien_Cacher_curseur; + byte Ancien_Loupe_Mode; + + Effacer_curseur(); + Ancien_Cacher_curseur=Cacher_curseur; + Ancien_Loupe_Mode=Loupe_Mode; + Loupe_Mode=0; + Cacher_curseur=0; + Forme_curseur=FORME_CURSEUR_CIBLE; + Afficher_curseur(); + + for (;;) + { + Get_input(); + + if ( (Mouse_K==A_GAUCHE) && + ( + ( + (Fenetre_click_dans_zone(Debut_X,Debut_Y,Fin_X,Fin_Y)) && + ( ( ((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-Enreg->Pos_X-1) % 10 >= 5 ) + ) + || + ( + (Mouse_X=Fenetre_Pos_X+(Fenetre_Largeur*Menu_Facteur_X)) || + (Mouse_Y>=Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y)) + ) + ) + ) + { + Attendre_fin_de_click(); + Effacer_curseur(); + Couleur_choisie=Lit_pixel(Mouse_X,Mouse_Y); + Forme_curseur=FORME_CURSEUR_FLECHE; + Cacher_curseur=Ancien_Cacher_curseur; + Loupe_Mode=Ancien_Loupe_Mode; + Afficher_curseur(); + return Couleur_choisie; + } + + if ((Mouse_K==A_DROITE) || (Touche==0x0001)) + { + Attendre_fin_de_click(); + Effacer_curseur(); + Forme_curseur=FORME_CURSEUR_FLECHE; + Cacher_curseur=Ancien_Cacher_curseur; + Loupe_Mode=Ancien_Loupe_Mode; + Afficher_curseur(); + return -1; + } + } +} + + + +// -------------- Récupération d'une couleur derrière un menu ---------------- +void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * Click) +{ + short Largeur=Fenetre_Largeur*Menu_Facteur_X; + short Hauteur=Fenetre_Hauteur*Menu_Facteur_Y; + short Ancien_X=-1; + short Ancien_Y=-1; + short Indice; + short A,B,C,D; // Variables temporaires et multitƒches... + byte * Buffer; + char Chaine[25]; + byte Cacher_curseur_avant_recuperation; + + + if ((Buffer=(byte *) malloc(Largeur*Hauteur))) + { + Effacer_curseur(); + + Cacher_curseur_avant_recuperation=Cacher_curseur; + Cacher_curseur=0; + + for (Indice=0; IndiceLargeur_ecran-Largeur) - Nouveau_X=Largeur_ecran-Largeur; - - Nouveau_Y=Mouse_Y-Dy; - if (Nouveau_Y<0) - Nouveau_Y=0; - if (Nouveau_Y>Hauteur_ecran-Hauteur) - Nouveau_Y=Hauteur_ecran-Hauteur; - - if ((Nouveau_X!=Ancien_X) - || (Nouveau_Y!=Ancien_Y)) - { - Effacer_curseur(); - Ligne_horizontale_XOR(Ancien_X,Ancien_Y,Largeur); - Ligne_verticale_XOR(Ancien_X,Ancien_Y+1,Hauteur-2); - Ligne_verticale_XOR(Ancien_X+Largeur-1,Ancien_Y+1,Hauteur-2); - Ligne_horizontale_XOR(Ancien_X,Ancien_Y+Hauteur-1,Largeur); - Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur); - Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2); - Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2); - Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur); - Afficher_curseur(); - } - } - - Effacer_curseur(); - if ((Nouveau_X!=Fenetre_Pos_X) - || (Nouveau_Y!=Fenetre_Pos_Y)) - { - A=Menu_Ordonnee; - Menu_Ordonnee=Menu_Ordonnee_avant_fenetre; - B=Menu_visible; - Menu_visible=Menu_visible_avant_fenetre; - Afficher_ecran(); - Afficher_menu(); - Menu_Ordonnee=A; - Menu_visible=B; - for (Indice=0; IndiceNext) - { - if (Fenetre_click_dans_zone(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Pos_X+Temp1->Largeur-1,Temp1->Pos_Y+Temp1->Hauteur-1)) - { - Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur); - Afficher_curseur(); - Fenetre_Attribut1=Mouse_K; - Attendre_fin_de_click(); - Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur); - Afficher_curseur(); - return Temp1->Numero; - } - } - - // Test du click sur les zones "palette" - for (Temp2=Fenetre_Liste_boutons_palette; Temp2; Temp2=Temp2->Next) - { - if (Fenetre_click_dans_zone(Temp2->Pos_X+5,Temp2->Pos_Y+3,Temp2->Pos_X+160,Temp2->Pos_Y+82)) - { - if ( (((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-(Temp2->Pos_X+1)) % 10 >= 5 ) - return Temp2->Numero; - } - } - - // Test du click sur les barres de défilement - for (Temp3=Fenetre_Liste_boutons_scroller; Temp3; Temp3=Temp3->Next) - { - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-1)) - { - // Bouton flèche Haut - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+10)) - { - Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y,11,11); - - if (Temp3->Position) - { - Temp3->Position--; - Fenetre_Attribut1=1; - Fenetre_Attribut2=Temp3->Position; - Fenetre_Dessiner_jauge(Temp3); - } - else - Fenetre_Attribut1=0; - - Afficher_curseur(); - - Tempo_jauge((Mouse_K==1)? Config.Valeur_tempo_jauge_gauche : Config.Valeur_tempo_jauge_droite); - - Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y,11,11); - Afficher_curseur(); - } - else - // Bouton flèche Bas - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-1)) - { - Effacer_curseur(); - Fenetre_Enfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,11,11); - - if (Temp3->Position+Temp3->Nb_visiblesNb_elements) - { - Temp3->Position++; - Fenetre_Attribut1=2; - Fenetre_Attribut2=Temp3->Position; - Fenetre_Dessiner_jauge(Temp3); - } - else - Fenetre_Attribut1=0; - - Afficher_curseur(); - - Tempo_jauge((Mouse_K==1)? Config.Valeur_tempo_jauge_gauche : Config.Valeur_tempo_jauge_droite); - - Effacer_curseur(); - Fenetre_Desenfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,11,11); - Afficher_curseur(); - } - else - // Jauge - if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+12,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-13)) - { - if (Temp3->Nb_elements>Temp3->Nb_visibles) - { - // S'il y a la place de faire scroller le curseur: - - Hauteur_maxi_jauge=(Temp3->Hauteur-24); - - // Fenetre_Attribut2 re‡oit la position dans la jauge correspondant au click - Fenetre_Attribut2 =(Mouse_Y-Fenetre_Pos_Y) / Menu_Facteur_Y; - Fenetre_Attribut2-=(Temp3->Pos_Y+12+((Temp3->Hauteur_curseur-1)>>1)); - Fenetre_Attribut2*=(Temp3->Nb_elements-Temp3->Nb_visibles); - - if (Fenetre_Attribut2<0) - Fenetre_Attribut2=0; - else - { - Fenetre_Attribut2 =Round_div(Fenetre_Attribut2,Hauteur_maxi_jauge-Temp3->Hauteur_curseur); - if (Fenetre_Attribut2+Temp3->Nb_visibles>Temp3->Nb_elements) - Fenetre_Attribut2=Temp3->Nb_elements-Temp3->Nb_visibles; - } - - // Si le curseur de la jauge bouge: - - if (Temp3->Position!=Fenetre_Attribut2) - { - Temp3->Position=Fenetre_Attribut2; - Fenetre_Attribut1=3; - Effacer_curseur(); - Fenetre_Dessiner_jauge(Temp3); - Afficher_curseur(); - } - else - // Si le curseur de la jauge ne bouge pas: - Fenetre_Attribut1=0; - } - else - // S'il n'y a pas la place de bouger le curseur de la jauge: - Fenetre_Attribut1=0; - } - else - // Le click se situe dans la zone de la jauge mais n'est sur aucune - // des 3 parties importantes de la jauge - Fenetre_Attribut1=0; - - return (Fenetre_Attribut1)? Temp3->Numero : 0; - } - } - - // Test du click sur une zone spéciale - for (Temp4=Fenetre_Liste_boutons_special; Temp4; Temp4=Temp4->Next) - { - if (Fenetre_click_dans_zone(Temp4->Pos_X,Temp4->Pos_Y,Temp4->Pos_X+Temp4->Largeur-1,Temp4->Pos_Y+Temp4->Hauteur-1)) - return Temp4->Numero; - } - - return 0; -} - - -short Fenetre_Numero_bouton_touche(void) -{ - struct Fenetre_Bouton_normal * Temp; - - if ((Touche&0xFF00)==0x0100) - Fenetre_Attribut1=A_DROITE; - else - Fenetre_Attribut1=A_GAUCHE; - - // On fait une première recherche - Temp=Fenetre_Liste_boutons_normal; - while (Temp!=NULL) - { - if (Temp->Raccourci==Touche) - return Temp->Numero; - Temp=Temp->Next; - } - - // Si la recherche n'a pas été fructueuse ET que l'utilisateur appuyait sur - // , on regarde si un bouton ne pourrait pas réagir comme si - // n'était pas appuyé. - if (Fenetre_Attribut1==A_DROITE) - { - Temp=Fenetre_Liste_boutons_normal; - while (Temp!=NULL) - { - if (Temp->Raccourci==(Touche&0x00FF)) - return Temp->Numero; - Temp=Temp->Next; - } - } - - return 0; -} - -short Fenetre_Bouton_clicke(void) -{ - short Bouton; - - Get_input(); - - // Gestion des clicks - if (Mouse_K) - { - if ((Mouse_X=Fenetre_Pos_X+(Fenetre_Largeur*Menu_Facteur_X)) - || (Mouse_Y>=Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y))) - return -1; - else - { - if (Mouse_Y < Fenetre_Pos_Y+(12*Menu_Facteur_Y)) - Deplacer_fenetre(Mouse_X-Fenetre_Pos_X,Mouse_Y-Fenetre_Pos_Y); - else - return Fenetre_Numero_bouton_clicke(); - } - } - - // Gestion des touches - if (Touche) - { - Bouton=Fenetre_Numero_bouton_touche(); - if (Bouton) return Bouton; - } - - return 0; -} - - - - -//int Moteur_Dernier_bouton_clicke; -//int Moteur_Type_dernier_bouton_clicke; + sprintf(Chaine+strlen(Chaine),"%d",Principal_Palette[A].B); + strcat(Chaine,")"); + A=24-D; + for (Indice=strlen(Chaine); IndiceLargeur_ecran-Largeur) + Nouveau_X=Largeur_ecran-Largeur; + + Nouveau_Y=Mouse_Y-Dy; + if (Nouveau_Y<0) + Nouveau_Y=0; + if (Nouveau_Y>Hauteur_ecran-Hauteur) + Nouveau_Y=Hauteur_ecran-Hauteur; + + if ((Nouveau_X!=Ancien_X) + || (Nouveau_Y!=Ancien_Y)) + { + Effacer_curseur(); + Ligne_horizontale_XOR(Ancien_X,Ancien_Y,Largeur); + Ligne_verticale_XOR(Ancien_X,Ancien_Y+1,Hauteur-2); + Ligne_verticale_XOR(Ancien_X+Largeur-1,Ancien_Y+1,Hauteur-2); + Ligne_horizontale_XOR(Ancien_X,Ancien_Y+Hauteur-1,Largeur); + Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y,Largeur); + Ligne_verticale_XOR(Nouveau_X,Nouveau_Y+1,Hauteur-2); + Ligne_verticale_XOR(Nouveau_X+Largeur-1,Nouveau_Y+1,Hauteur-2); + Ligne_horizontale_XOR(Nouveau_X,Nouveau_Y+Hauteur-1,Largeur); + Afficher_curseur(); + } + } + + Effacer_curseur(); + if ((Nouveau_X!=Fenetre_Pos_X) + || (Nouveau_Y!=Fenetre_Pos_Y)) + { + A=Menu_Ordonnee; + Menu_Ordonnee=Menu_Ordonnee_avant_fenetre; + B=Menu_visible; + Menu_visible=Menu_visible_avant_fenetre; + Afficher_ecran(); + Afficher_menu(); + Menu_Ordonnee=A; + Menu_visible=B; + for (Indice=0; IndiceNext) + { + if (Fenetre_click_dans_zone(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Pos_X+Temp1->Largeur-1,Temp1->Pos_Y+Temp1->Hauteur-1)) + { + Effacer_curseur(); + Fenetre_Enfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur); + Afficher_curseur(); + Fenetre_Attribut1=Mouse_K; + Attendre_fin_de_click(); + Effacer_curseur(); + Fenetre_Desenfoncer_bouton_normal(Temp1->Pos_X,Temp1->Pos_Y,Temp1->Largeur,Temp1->Hauteur); + Afficher_curseur(); + return Temp1->Numero; + } + } + + // Test du click sur les zones "palette" + for (Temp2=Fenetre_Liste_boutons_palette; Temp2; Temp2=Temp2->Next) + { + if (Fenetre_click_dans_zone(Temp2->Pos_X+5,Temp2->Pos_Y+3,Temp2->Pos_X+160,Temp2->Pos_Y+82)) + { + if ( (((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-(Temp2->Pos_X+1)) % 10 >= 5 ) + return Temp2->Numero; + } + } + + // Test du click sur les barres de défilement + for (Temp3=Fenetre_Liste_boutons_scroller; Temp3; Temp3=Temp3->Next) + { + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-1)) + { + // Bouton flèche Haut + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y,Temp3->Pos_X+10,Temp3->Pos_Y+10)) + { + Effacer_curseur(); + Fenetre_Enfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y,11,11); + + if (Temp3->Position) + { + Temp3->Position--; + Fenetre_Attribut1=1; + Fenetre_Attribut2=Temp3->Position; + Fenetre_Dessiner_jauge(Temp3); + } + else + Fenetre_Attribut1=0; + + Afficher_curseur(); + + Tempo_jauge((Mouse_K==1)? Config.Valeur_tempo_jauge_gauche : Config.Valeur_tempo_jauge_droite); + + Effacer_curseur(); + Fenetre_Desenfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y,11,11); + Afficher_curseur(); + } + else + // Bouton flèche Bas + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-1)) + { + Effacer_curseur(); + Fenetre_Enfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,11,11); + + if (Temp3->Position+Temp3->Nb_visiblesNb_elements) + { + Temp3->Position++; + Fenetre_Attribut1=2; + Fenetre_Attribut2=Temp3->Position; + Fenetre_Dessiner_jauge(Temp3); + } + else + Fenetre_Attribut1=0; + + Afficher_curseur(); + + Tempo_jauge((Mouse_K==1)? Config.Valeur_tempo_jauge_gauche : Config.Valeur_tempo_jauge_droite); + + Effacer_curseur(); + Fenetre_Desenfoncer_bouton_normal(Temp3->Pos_X,Temp3->Pos_Y+Temp3->Hauteur-11,11,11); + Afficher_curseur(); + } + else + // Jauge + if (Fenetre_click_dans_zone(Temp3->Pos_X,Temp3->Pos_Y+12,Temp3->Pos_X+10,Temp3->Pos_Y+Temp3->Hauteur-13)) + { + if (Temp3->Nb_elements>Temp3->Nb_visibles) + { + // S'il y a la place de faire scroller le curseur: + + Hauteur_maxi_jauge=(Temp3->Hauteur-24); + + // Fenetre_Attribut2 re‡oit la position dans la jauge correspondant au click + Fenetre_Attribut2 =(Mouse_Y-Fenetre_Pos_Y) / Menu_Facteur_Y; + Fenetre_Attribut2-=(Temp3->Pos_Y+12+((Temp3->Hauteur_curseur-1)>>1)); + Fenetre_Attribut2*=(Temp3->Nb_elements-Temp3->Nb_visibles); + + if (Fenetre_Attribut2<0) + Fenetre_Attribut2=0; + else + { + Fenetre_Attribut2 =Round_div(Fenetre_Attribut2,Hauteur_maxi_jauge-Temp3->Hauteur_curseur); + if (Fenetre_Attribut2+Temp3->Nb_visibles>Temp3->Nb_elements) + Fenetre_Attribut2=Temp3->Nb_elements-Temp3->Nb_visibles; + } + + // Si le curseur de la jauge bouge: + + if (Temp3->Position!=Fenetre_Attribut2) + { + Temp3->Position=Fenetre_Attribut2; + Fenetre_Attribut1=3; + Effacer_curseur(); + Fenetre_Dessiner_jauge(Temp3); + Afficher_curseur(); + } + else + // Si le curseur de la jauge ne bouge pas: + Fenetre_Attribut1=0; + } + else + // S'il n'y a pas la place de bouger le curseur de la jauge: + Fenetre_Attribut1=0; + } + else + // Le click se situe dans la zone de la jauge mais n'est sur aucune + // des 3 parties importantes de la jauge + Fenetre_Attribut1=0; + + return (Fenetre_Attribut1)? Temp3->Numero : 0; + } + } + + // Test du click sur une zone spéciale + for (Temp4=Fenetre_Liste_boutons_special; Temp4; Temp4=Temp4->Next) + { + if (Fenetre_click_dans_zone(Temp4->Pos_X,Temp4->Pos_Y,Temp4->Pos_X+Temp4->Largeur-1,Temp4->Pos_Y+Temp4->Hauteur-1)) + return Temp4->Numero; + } + + return 0; +} + + +short Fenetre_Numero_bouton_touche(void) +{ + struct Fenetre_Bouton_normal * Temp; + + if ((Touche&0xFF00)==0x0100) + Fenetre_Attribut1=A_DROITE; + else + Fenetre_Attribut1=A_GAUCHE; + + // On fait une première recherche + Temp=Fenetre_Liste_boutons_normal; + while (Temp!=NULL) + { + if (Temp->Raccourci==Touche) + return Temp->Numero; + Temp=Temp->Next; + } + + // Si la recherche n'a pas été fructueuse ET que l'utilisateur appuyait sur + // , on regarde si un bouton ne pourrait pas réagir comme si + // n'était pas appuyé. + if (Fenetre_Attribut1==A_DROITE) + { + Temp=Fenetre_Liste_boutons_normal; + while (Temp!=NULL) + { + if (Temp->Raccourci==(Touche&0x00FF)) + return Temp->Numero; + Temp=Temp->Next; + } + } + + return 0; +} + +short Fenetre_Bouton_clicke(void) +{ + short Bouton; + + Get_input(); + + // Gestion des clicks + if (Mouse_K) + { + if ((Mouse_X=Fenetre_Pos_X+(Fenetre_Largeur*Menu_Facteur_X)) + || (Mouse_Y>=Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y))) + return -1; + else + { + if (Mouse_Y < Fenetre_Pos_Y+(12*Menu_Facteur_Y)) + Deplacer_fenetre(Mouse_X-Fenetre_Pos_X,Mouse_Y-Fenetre_Pos_Y); + else + return Fenetre_Numero_bouton_clicke(); + } + } + + // Gestion des touches + if (Touche) + { + Bouton=Fenetre_Numero_bouton_touche(); + if (Bouton) return Bouton; + } + + return 0; +} + + + + +//int Moteur_Dernier_bouton_clicke; +//int Moteur_Type_dernier_bouton_clicke; diff --git a/sdlscreen.c b/sdlscreen.c index e2ad0694..abf2baa2 100644 --- a/sdlscreen.c +++ b/sdlscreen.c @@ -6,13 +6,7 @@ void Pixel_SDL (word X,word Y,byte Couleur) /* Affiche un pixel de la Couleur aux coords X;Y à l'écran */ { *(((Uint8 *)Ecran_SDL->pixels) + Y * Ecran_SDL->pitch + X)=Couleur; -// SDL_UpdateRect(Ecran_SDL,X,Y,0,0); -} - -static inline void Pixel_SDL_Fast(word X, word Y,byte Couleur) -/* Idem mais on ne rafraichit pas (plus rapide, mais ça ne s'affiche pas tout de suite) */ -{ - *(((byte *)Ecran_SDL->pixels) + Y * Ecran_SDL->pitch +X)=Couleur; + //SDL_UpdateRect(Ecran_SDL,X,Y,0,0); } byte Lit_Pixel_SDL (word X,word Y) @@ -28,11 +22,26 @@ void Effacer_Tout_l_Ecran_SDL (byte Couleur) } void Afficher_partie_de_l_ecran_SDL (word Largeur,word Hauteur,word Largeur_image) +/* Afficher une partie de l'image telle quelle sur l'écran */ { - puts("Afficher_partie_de_l_ecran_SDL non implémenté!\n"); + byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (EDI) + byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (ESI) + int dx; + + for(dx=Hauteur;dx!=0;dx--) + // Pour chaque ligne + { + // On fait une copie de la ligne + memcpy(Dest,Src,Largeur); + + // On passe à la ligne suivante + Src+=Largeur_image; + Dest+=Largeur_ecran; + } + SDL_UpdateRect(Ecran_SDL,0,0,Largeur,Hauteur); } -void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) +void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; @@ -44,9 +53,22 @@ void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Haute SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Largeur,Hauteur); } -void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur) +void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) +/* On affiche un rectangle de la couleur donnée */ { - puts("Pixel_Preview_Normal_SDL non implémenté!\n"); + SDL_Rect rectangle; + rectangle.x=Debut_X; + rectangle.y=Debut_Y; + rectangle.w=Largeur; + rectangle.h=Hauteur; + SDL_FillRect(Ecran_SDL,&rectangle,Couleur); +} + +void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur) +/* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image dans l'écran, en mode normal (pas en mode loupe) +Note: si on modifie cette procédure, il faudra penser à faire également la modif dans la procédure Pixel_Preview_Loupe_VESA_LFB. */ +{ + Pixel_SDL(X-Principal_Decalage_X,Y-Principal_Decalage_Y,Couleur); } void Pixel_Preview_Loupe_SDL (word X,word Y,byte Couleur) @@ -72,21 +94,48 @@ void Display_brush_Color_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decala void Display_brush_Mono_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Hauteur,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse) /* On affiche la brosse en monochrome */ { - int i,j; - for(i=0;ipixels; } diff --git a/sdlscreen.h b/sdlscreen.h index a588754b..1d237256 100644 --- a/sdlscreen.h +++ b/sdlscreen.h @@ -1,5 +1,5 @@ -#ifndef SDLSCREEN_H_INCLUDED -#define SDLSCREEN_H_INCLUDED +#ifndef SDLSCREEN_H_INCLUDED +#define SDLSCREEN_H_INCLUDED #include #include "struct.h" @@ -8,6 +8,7 @@ byte Lit_Pixel_SDL (word X,word Y); void Effacer_Tout_l_Ecran_SDL (byte Couleur); void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur); + void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur); void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur); void Pixel_Preview_Loupe_SDL (word X,word Y,byte Couleur); void Ligne_horizontale_XOR_SDL(word Pos_X,word Pos_Y,word Largeur); @@ -23,11 +24,9 @@ void Display_brush_Color_zoom_SDL(word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_brosse,byte * Buffer); void Display_brush_Mono_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,byte Couleur,word Largeur_brosse,byte * Buffer); void Clear_brush_zoom_SDL (word Pos_X,word Pos_Y,word Decalage_X,word Decalage_Y,word Largeur,word Pos_Y_Fin,byte Couleur_de_transparence,word Largeur_image,byte * Buffer); - void Set_Mode_SDL(); + void Set_Mode_SDL(); SDL_Rect ** Liste_Modes_Videos_SDL; byte* Ecran; - SDL_Event* Evenement_SDL; - -#endif // SDLSCREEN_H_INCLUDED +#endif // SDLSCREEN_H_INCLUDED diff --git a/shade.c b/shade.c index 63094c43..a6f659f1 100644 --- a/shade.c +++ b/shade.c @@ -1,1073 +1,1073 @@ #include "global.h" #include "graph.h" -void Bouton_Shade_Mode(void) -{ - if (Shade_Mode) - Fonction_effet=Aucun_effet; - else - { - Fonction_effet=Effet_Shade; - Quick_shade_Mode=0; - Colorize_Mode=0; - Smooth_Mode=0; - Tiling_Mode=0; - Smear_Mode=0; - } - Shade_Mode=!Shade_Mode; -} - - -void Bouton_Quick_shade_Mode(void) -{ - if (Quick_shade_Mode) - Fonction_effet=Aucun_effet; - else - { - Fonction_effet=Effet_Quick_shade; - Shade_Mode=0; - Colorize_Mode=0; - Smooth_Mode=0; - Tiling_Mode=0; - Smear_Mode=0; - } - Quick_shade_Mode=!Quick_shade_Mode; -} - - -void Shade_Blocs_degrades(void) -{ - word Curseur=0; - word Nb_shades=0; - short Shade_traite,Ancien_shade_traite; - word Taille_shade=0; - word Debut_shade=0; - short Pos_X,Pos_Y; - short Taille_X,Taille_Y; - short Debut_X,Debut_Y,Fin_X,Fin_Y; - - // On commence par compter le nombre de shades - while (Curseur<512) - { - while ((Curseur<512) && (Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00)) - Curseur++; - - if (Curseur<512) - { - Nb_shades++; - while ( (Curseur<512) - && (!(Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00)) ) - Curseur++; - } - } - - // Maintenant qu'on sait combien il y en a, on les affiche: - if (Nb_shades) - { - Taille_X=Menu_Facteur_X<<6; - Taille_Y=Menu_Facteur_Y*48; - Debut_X=Fenetre_Pos_X+(Menu_Facteur_X*224); - Debut_Y=Fenetre_Pos_Y+(Menu_Facteur_Y*35); - Fin_X=Debut_X+Taille_X; - Fin_Y=Debut_Y+Taille_Y; - - Curseur=0; - Ancien_shade_traite=-1; - - for (Pos_Y=Debut_Y;Pos_YAncien_shade_traite) - { - // On commence par sauter tous les vides jusqu'au prochain shade - while ((Curseur<512) && (Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00)) - Curseur++; - Debut_shade=Curseur; - // puis regarde sa taille - while ((Curseur<512) && (!(Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00))) - Curseur++; - Taille_shade=Curseur-Debut_shade; - Ancien_shade_traite=Shade_traite; - } - - for (Pos_X=Debut_X;Pos_X=Select_Debut) && (Position<=Select_Fin)) - { - Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y,CM_Blanc); - Block(Pos_X,Pos_Y+Menu_Facteur_Y,Menu_Facteur_X<<2,Menu_Facteur_Y,CM_Noir); - } - else - Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y<<1,CM_Blanc); - } - else // "enabl‚e" - { - if ((Position>=Select_Debut) && (Position<=Select_Fin)) - Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y<<1,CM_Noir); - else - Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y<<1,CM_Clair); - } - } -} - - -void Afficher_couleur_case_selectionnee(word Select_Debut,word Select_Fin) -{ - char Chaine[4]; - - if ((Select_Debut!=Select_Fin) - || (Shade_Liste[Shade_Actuel].Liste[Select_Debut]&0x0100)) - strcpy(Chaine," "); - else - Num2str(Shade_Liste[Shade_Actuel].Liste[Select_Debut]&0xFF,Chaine,3); - - Print_dans_fenetre(213,115,Chaine,CM_Noir,CM_Clair); -} - - -void Afficher_couleur_selectionnee(word Select_Debut,word Select_Fin) -{ - char Chaine[4]; - - if (Select_Debut!=Select_Fin) - strcpy(Chaine," "); - else - Num2str(Select_Debut,Chaine,3); - - Print_dans_fenetre(213,106,Chaine,CM_Noir,CM_Clair); -} - - -void Afficher_mode_du_shade(short X,short Y,byte Mode) -{ - char Chaine[7]; - - switch (Mode) - { - case MODE_SHADE_NORMAL : - strcpy(Chaine,"Normal"); - break; - case MODE_SHADE_BOUCLE : - strcpy(Chaine," Loop "); - break; - default : // MODE_SHADE_NOSAT - strcpy(Chaine,"No sat"); - } - Print_dans_fenetre(X,Y,Chaine,CM_Noir,CM_Clair); -} - - -void Afficher_tout_le_shade(word Select_Debut1,word Select_Fin1, - word Select_Debut2,word Select_Fin2) -{ - word Ligne, Colonne; - word Position; - - for (Ligne=0; Ligne<8; Ligne++) - for (Colonne=0; Colonne<64; Colonne++) - { - Position=(Ligne<<6)+Colonne; - // On regarde si c'est une couleur ou un bloc vide - if (Shade_Liste[Shade_Actuel].Liste[Position]&0x0100) // Vide - { - Fenetre_Afficher_cadre_bombe((Colonne<<2)+8,(Ligne*7)+127,4,4); - Block(Fenetre_Pos_X+(Menu_Facteur_X*((Colonne<<2)+9)), - Fenetre_Pos_Y+(Menu_Facteur_Y*((Ligne*7)+128)), - Menu_Facteur_X<<1,Menu_Facteur_Y<<1,CM_Clair); - } - else // Couleur - Block(Fenetre_Pos_X+(Menu_Facteur_X*((Colonne<<2)+8)), - Fenetre_Pos_Y+(Menu_Facteur_Y*((Ligne*7)+127)), - Menu_Facteur_X<<2,Menu_Facteur_Y<<2, - Shade_Liste[Shade_Actuel].Liste[Position]&0xFF); - } - Tagger_shades(Select_Debut2,Select_Fin2); - Shade_Blocs_degrades(); - Afficher_couleur_case_selectionnee(Select_Debut2,Select_Fin2); - Afficher_couleur_selectionnee(Select_Debut1,Select_Fin1); - Afficher_mode_du_shade(250,110,Shade_Liste[Shade_Actuel].Mode); -} - - -void Supprimer_shade(word Select_Debut,word Select_Fin) -{ - word Temp; - - if (Select_Fin=512) - Temp=512-Select_Debut; - - for (Curseur=511;Curseur>=Limite;Curseur--) - Shade_Liste[Shade_Actuel].Liste[Curseur]=Shade_Liste[Shade_Actuel].Liste[Curseur-Temp]; - - for (Curseur=Select_Debut+Temp;Select_Debut=512) return; - - for (Curseur=511;Curseur>Position;Curseur--) - Shade_Liste[Shade_Actuel].Liste[Curseur]=Shade_Liste[Shade_Actuel].Liste[Curseur-1]; - - Shade_Liste[Shade_Actuel].Liste[Position]=0x0100; -} - - -short Attendre_click_dans_shade() -{ - short Case_choisie=-1; - byte Ancien_Cacher_curseur; - - - Effacer_curseur(); - Ancien_Cacher_curseur=Cacher_curseur; - Cacher_curseur=0; - Forme_curseur=FORME_CURSEUR_CIBLE; - Afficher_curseur(); - - while (Case_choisie<0) - { - Get_input(); - - if ( (Mouse_K==A_GAUCHE) - && ( ( (Fenetre_click_dans_zone(8,127,263,179)) && (((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)%7)<4) ) - || ( (Mouse_X=Fenetre_Pos_X+(Fenetre_Largeur*Menu_Facteur_X)) - || (Mouse_Y>=Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y)) ) ) - ) - Case_choisie=(((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)/7)<<6)+ - ((((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-8 )>>2); - - if ((Mouse_K==A_DROITE) || (Touche==0x0001)) - Case_choisie=512; // valeur indiquant que l'on n'a rien choisi - } - - Attendre_fin_de_click(); - Effacer_curseur(); - Forme_curseur=FORME_CURSEUR_FLECHE; - Cacher_curseur=Ancien_Cacher_curseur; - Afficher_curseur(); - return Case_choisie; -} - - -void Swap_shade(short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc) -{ - short Pos_1; - short Pos_2; - short Fin_1; - short Fin_2; - word Temp; - word * Shade_temporaire; - - // On fait une copie de la liste - Shade_temporaire=(word *)malloc(512*sizeof(word)); - memcpy(Shade_temporaire,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - - // On calcul les derniŠres couleurs de chaque bloc. - Fin_1=Debut_Bloc_1+Taille_du_bloc-1; - Fin_2=Debut_Bloc_2+Taille_du_bloc-1; - - if ((Debut_Bloc_2>=Debut_Bloc_1) && (Debut_Bloc_2<=Fin_1)) - { - // Le bloc destination commence dans le bloc source. - for (Pos_1=Debut_Bloc_1,Pos_2=Fin_1+1;Pos_1<=Fin_2;Pos_1++) - { - // Il faut transformer la case Pos_1 en Pos_2: - Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_temporaire[Pos_2]; - // On gŠre la mise … jour de Pos_2 - if (Pos_2==Fin_2) - Pos_2=Debut_Bloc_1; - else - Pos_2++; - } - } - else - if ((Debut_Bloc_2=Debut_Bloc_1)) - { - // Le bloc destination d‚borde dans le bloc source. - for (Pos_1=Debut_Bloc_2,Pos_2=Debut_Bloc_1;Pos_1<=Fin_1;Pos_1++) - { - // Il faut transformer la couleur Pos_1 en Pos_2: - Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_temporaire[Pos_2]; - // On gŠre la mise … jour de Pos_2 - if (Pos_2==Fin_1) - Pos_2=Debut_Bloc_2; - else - Pos_2++; - } - } - else - { - // Le bloc source et le bloc destination sont distincts. - for (Pos_1=Debut_Bloc_1,Pos_2=Debut_Bloc_2;Pos_1<=Fin_1;Pos_1++,Pos_2++) - { - // On ‚change les cases - Temp =Shade_Liste[Shade_Actuel].Liste[Pos_1]; - Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_Liste[Shade_Actuel].Liste[Pos_2]; - Shade_Liste[Shade_Actuel].Liste[Pos_2]=Temp; - } - } - - free(Shade_temporaire); -} - - -int Menu_Shade(void) -{ - short Bouton_clicke; // Num‚ro du bouton sur lequel l'utilisateur a click‚ - char Chaine[4]; // Chaine d'affichage du nø de shade actif et du Pas - word Ancien_Mouse_X,Ancien_Mouse_X2; // M‚mo. de l'ancienne pos. du curseur - word Ancien_Mouse_Y,Ancien_Mouse_Y2; - byte Ancien_Mouse_K,Ancien_Mouse_K2; - byte Couleur_temporaire; // Variables de gestion des clicks dans la palette - byte Premiere_couleur=0; - byte Derniere_couleur=0; - word Select_Debut=0; - word Select_Fin=0; - struct Fenetre_Bouton_special * Bouton_saisie; - short Temp,Temp2; - word Case_temporaire; - word * Buffer; // Buffer du Copy/Paste - word * Buffer_Undo; // Buffer du Undo - word * Pointeur_temp; - byte Couleur; - byte Click; - - - Buffer =(word *)malloc(512*sizeof(word)); - Buffer_Undo =(word *)malloc(512*sizeof(word)); - Pointeur_temp=(word *)malloc(512*sizeof(word)); - - // Ouverture de la fenˆtre du menu - Ouvrir_fenetre(310,190,"Shade"); - - // D‚claration & trac‚ du bouton de palette - Fenetre_Definir_bouton_palette(5,16); // 1 - - // D‚claration & trac‚ du scroller de s‚lection du nø de d‚grad‚ - Fenetre_Definir_bouton_scroller(192,17,84,8,1,Shade_Actuel); // 2 - - // D‚claration & trac‚ de la zone de d‚finition des d‚grad‚s - Fenetre_Definir_bouton_special(8,127,256,53); // 3 - - // D‚claration & trac‚ des boutons de sortie - Fenetre_Definir_bouton_normal(207,17,51,14,"Cancel",0,1,0x0001); // 4 - Fenetre_Definir_bouton_normal(261,17,43,14,"OK" ,0,1,0x001C); // 5 - - // D‚claration & trac‚ des boutons de copie de shade - Fenetre_Definir_bouton_normal(206,87,27,14,"Cpy" ,1,1,0x002E); // 6 - Fenetre_Definir_bouton_normal(234,87,43,14,"Paste" ,1,1,0x0019); // 7 - - // On tagge le bloc - Tagger_intervalle_palette(0,0); - - // Trac‚ d'un cadre creux autour du bloc d‚grad‚ - Fenetre_Afficher_cadre_creux(171,26,18,66); - Block(Fenetre_Pos_X+(Menu_Facteur_X*172),Fenetre_Pos_Y+(Menu_Facteur_Y*27), - Menu_Facteur_X<<4,Menu_Facteur_Y<<6,CM_Noir); - // Trac‚ d'un cadre creux autour de tous les d‚grad‚s - Fenetre_Afficher_cadre_creux(223,34,66,50); - Shade_Blocs_degrades(); - // Trac‚ d'un cadre autour de la zone de d‚finition de d‚grad‚s - Fenetre_Afficher_cadre(5,124,262,61); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - - // D‚claration & trac‚ des boutons d'‚dition de shade - Fenetre_Definir_bouton_normal( 6,107,27,14,"Ins" ,0,1,0x0052); // 8 - Fenetre_Definir_bouton_normal( 38,107,27,14,"Del" ,0,1,0x0053); // 9 - Fenetre_Definir_bouton_normal( 66,107,43,14,"Blank",1,1,0x0030); // 10 - Fenetre_Definir_bouton_normal(110,107,27,14,"Inv" ,1,1,0x0017); // 11 - Fenetre_Definir_bouton_normal(138,107,27,14,"Swp" ,1,1,0x001F); // 12 - - // D‚claration & trac‚ des boutons de taggage - Print_dans_fenetre(268,123,"Disbl"/*"Dsabl"*/,CM_Fonce,CM_Clair); - Fenetre_Definir_bouton_normal(274,133,27,14,"Set" ,0,1,0x003B); // 13 - Fenetre_Definir_bouton_normal(274,148,27,14,"Clr" ,0,1,0x003C); // 14 - - // D‚claration & trac‚ de la zone de saisie du pas - Print_dans_fenetre(272,165,"Step",CM_Fonce,CM_Clair); - Fenetre_Definir_bouton_saisie(274,174,3); // 15 - Bouton_saisie=Fenetre_Liste_boutons_special; - Num2str(Shade_Liste[Shade_Actuel].Pas,Chaine,3); - Fenetre_Contenu_bouton_saisie(Bouton_saisie,Chaine); - - // Bouton Undo - Fenetre_Definir_bouton_normal(170,107,35,14,"Undo",1,1,0x0016); // 16 - // Bouton Clear - Fenetre_Definir_bouton_normal(278,87,27,14,"Clr",0,1,0x000E); // 17 - - // Bouton Mode - Fenetre_Definir_bouton_normal(244,107,60,14,"",0,1,0x000F); // 18 - - // Affichage du nø de shade actif - Num2str(Shade_Actuel+1,Chaine,1); - Print_dans_fenetre(210,55,Chaine,CM_Noir,CM_Clair); - - memcpy(Buffer ,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - - Afficher_curseur(); +void Bouton_Shade_Mode(void) +{ + if (Shade_Mode) + Fonction_effet=Aucun_effet; + else + { + Fonction_effet=Effet_Shade; + Quick_shade_Mode=0; + Colorize_Mode=0; + Smooth_Mode=0; + Tiling_Mode=0; + Smear_Mode=0; + } + Shade_Mode=!Shade_Mode; +} -/*TODO A vérifier :) - Clavier_americain(); // On est oblig‚ de rester en clavier am‚ricain pour - // que l'on puisse d‚caler la couleur s‚lectionn‚e … + +void Bouton_Quick_shade_Mode(void) +{ + if (Quick_shade_Mode) + Fonction_effet=Aucun_effet; + else + { + Fonction_effet=Effet_Quick_shade; + Shade_Mode=0; + Colorize_Mode=0; + Smooth_Mode=0; + Tiling_Mode=0; + Smear_Mode=0; + } + Quick_shade_Mode=!Quick_shade_Mode; +} + + +void Shade_Blocs_degrades(void) +{ + word Curseur=0; + word Nb_shades=0; + short Shade_traite,Ancien_shade_traite; + word Taille_shade=0; + word Debut_shade=0; + short Pos_X,Pos_Y; + short Taille_X,Taille_Y; + short Debut_X,Debut_Y,Fin_X,Fin_Y; + + // On commence par compter le nombre de shades + while (Curseur<512) + { + while ((Curseur<512) && (Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00)) + Curseur++; + + if (Curseur<512) + { + Nb_shades++; + while ( (Curseur<512) + && (!(Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00)) ) + Curseur++; + } + } + + // Maintenant qu'on sait combien il y en a, on les affiche: + if (Nb_shades) + { + Taille_X=Menu_Facteur_X<<6; + Taille_Y=Menu_Facteur_Y*48; + Debut_X=Fenetre_Pos_X+(Menu_Facteur_X*224); + Debut_Y=Fenetre_Pos_Y+(Menu_Facteur_Y*35); + Fin_X=Debut_X+Taille_X; + Fin_Y=Debut_Y+Taille_Y; + + Curseur=0; + Ancien_shade_traite=-1; + + for (Pos_Y=Debut_Y;Pos_YAncien_shade_traite) + { + // On commence par sauter tous les vides jusqu'au prochain shade + while ((Curseur<512) && (Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00)) + Curseur++; + Debut_shade=Curseur; + // puis regarde sa taille + while ((Curseur<512) && (!(Shade_Liste[Shade_Actuel].Liste[Curseur]&0xFF00))) + Curseur++; + Taille_shade=Curseur-Debut_shade; + Ancien_shade_traite=Shade_traite; + } + + for (Pos_X=Debut_X;Pos_X=Select_Debut) && (Position<=Select_Fin)) + { + Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y,CM_Blanc); + Block(Pos_X,Pos_Y+Menu_Facteur_Y,Menu_Facteur_X<<2,Menu_Facteur_Y,CM_Noir); + } + else + Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y<<1,CM_Blanc); + } + else // "enabl‚e" + { + if ((Position>=Select_Debut) && (Position<=Select_Fin)) + Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y<<1,CM_Noir); + else + Block(Pos_X,Pos_Y,Menu_Facteur_X<<2,Menu_Facteur_Y<<1,CM_Clair); + } + } +} + + +void Afficher_couleur_case_selectionnee(word Select_Debut,word Select_Fin) +{ + char Chaine[4]; + + if ((Select_Debut!=Select_Fin) + || (Shade_Liste[Shade_Actuel].Liste[Select_Debut]&0x0100)) + strcpy(Chaine," "); + else + Num2str(Shade_Liste[Shade_Actuel].Liste[Select_Debut]&0xFF,Chaine,3); + + Print_dans_fenetre(213,115,Chaine,CM_Noir,CM_Clair); +} + + +void Afficher_couleur_selectionnee(word Select_Debut,word Select_Fin) +{ + char Chaine[4]; + + if (Select_Debut!=Select_Fin) + strcpy(Chaine," "); + else + Num2str(Select_Debut,Chaine,3); + + Print_dans_fenetre(213,106,Chaine,CM_Noir,CM_Clair); +} + + +void Afficher_mode_du_shade(short X,short Y,byte Mode) +{ + char Chaine[7]; + + switch (Mode) + { + case MODE_SHADE_NORMAL : + strcpy(Chaine,"Normal"); + break; + case MODE_SHADE_BOUCLE : + strcpy(Chaine," Loop "); + break; + default : // MODE_SHADE_NOSAT + strcpy(Chaine,"No sat"); + } + Print_dans_fenetre(X,Y,Chaine,CM_Noir,CM_Clair); +} + + +void Afficher_tout_le_shade(word Select_Debut1,word Select_Fin1, + word Select_Debut2,word Select_Fin2) +{ + word Ligne, Colonne; + word Position; + + for (Ligne=0; Ligne<8; Ligne++) + for (Colonne=0; Colonne<64; Colonne++) + { + Position=(Ligne<<6)+Colonne; + // On regarde si c'est une couleur ou un bloc vide + if (Shade_Liste[Shade_Actuel].Liste[Position]&0x0100) // Vide + { + Fenetre_Afficher_cadre_bombe((Colonne<<2)+8,(Ligne*7)+127,4,4); + Block(Fenetre_Pos_X+(Menu_Facteur_X*((Colonne<<2)+9)), + Fenetre_Pos_Y+(Menu_Facteur_Y*((Ligne*7)+128)), + Menu_Facteur_X<<1,Menu_Facteur_Y<<1,CM_Clair); + } + else // Couleur + Block(Fenetre_Pos_X+(Menu_Facteur_X*((Colonne<<2)+8)), + Fenetre_Pos_Y+(Menu_Facteur_Y*((Ligne*7)+127)), + Menu_Facteur_X<<2,Menu_Facteur_Y<<2, + Shade_Liste[Shade_Actuel].Liste[Position]&0xFF); + } + Tagger_shades(Select_Debut2,Select_Fin2); + Shade_Blocs_degrades(); + Afficher_couleur_case_selectionnee(Select_Debut2,Select_Fin2); + Afficher_couleur_selectionnee(Select_Debut1,Select_Fin1); + Afficher_mode_du_shade(250,110,Shade_Liste[Shade_Actuel].Mode); +} + + +void Supprimer_shade(word Select_Debut,word Select_Fin) +{ + word Temp; + + if (Select_Fin=512) + Temp=512-Select_Debut; + + for (Curseur=511;Curseur>=Limite;Curseur--) + Shade_Liste[Shade_Actuel].Liste[Curseur]=Shade_Liste[Shade_Actuel].Liste[Curseur-Temp]; + + for (Curseur=Select_Debut+Temp;Select_Debut=512) return; + + for (Curseur=511;Curseur>Position;Curseur--) + Shade_Liste[Shade_Actuel].Liste[Curseur]=Shade_Liste[Shade_Actuel].Liste[Curseur-1]; + + Shade_Liste[Shade_Actuel].Liste[Position]=0x0100; +} + + +short Attendre_click_dans_shade() +{ + short Case_choisie=-1; + byte Ancien_Cacher_curseur; + + + Effacer_curseur(); + Ancien_Cacher_curseur=Cacher_curseur; + Cacher_curseur=0; + Forme_curseur=FORME_CURSEUR_CIBLE; + Afficher_curseur(); + + while (Case_choisie<0) + { + Get_input(); + + if ( (Mouse_K==A_GAUCHE) + && ( ( (Fenetre_click_dans_zone(8,127,263,179)) && (((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)%7)<4) ) + || ( (Mouse_X=Fenetre_Pos_X+(Fenetre_Largeur*Menu_Facteur_X)) + || (Mouse_Y>=Fenetre_Pos_Y+(Fenetre_Hauteur*Menu_Facteur_Y)) ) ) + ) + Case_choisie=(((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)/7)<<6)+ + ((((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-8 )>>2); + + if ((Mouse_K==A_DROITE) || (Touche==0x0001)) + Case_choisie=512; // valeur indiquant que l'on n'a rien choisi + } + + Attendre_fin_de_click(); + Effacer_curseur(); + Forme_curseur=FORME_CURSEUR_FLECHE; + Cacher_curseur=Ancien_Cacher_curseur; + Afficher_curseur(); + return Case_choisie; +} + + +void Swap_shade(short Debut_Bloc_1,short Debut_Bloc_2,short Taille_du_bloc) +{ + short Pos_1; + short Pos_2; + short Fin_1; + short Fin_2; + word Temp; + word * Shade_temporaire; + + // On fait une copie de la liste + Shade_temporaire=(word *)malloc(512*sizeof(word)); + memcpy(Shade_temporaire,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + + // On calcul les derniŠres couleurs de chaque bloc. + Fin_1=Debut_Bloc_1+Taille_du_bloc-1; + Fin_2=Debut_Bloc_2+Taille_du_bloc-1; + + if ((Debut_Bloc_2>=Debut_Bloc_1) && (Debut_Bloc_2<=Fin_1)) + { + // Le bloc destination commence dans le bloc source. + for (Pos_1=Debut_Bloc_1,Pos_2=Fin_1+1;Pos_1<=Fin_2;Pos_1++) + { + // Il faut transformer la case Pos_1 en Pos_2: + Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_temporaire[Pos_2]; + // On gŠre la mise … jour de Pos_2 + if (Pos_2==Fin_2) + Pos_2=Debut_Bloc_1; + else + Pos_2++; + } + } + else + if ((Debut_Bloc_2=Debut_Bloc_1)) + { + // Le bloc destination d‚borde dans le bloc source. + for (Pos_1=Debut_Bloc_2,Pos_2=Debut_Bloc_1;Pos_1<=Fin_1;Pos_1++) + { + // Il faut transformer la couleur Pos_1 en Pos_2: + Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_temporaire[Pos_2]; + // On gŠre la mise … jour de Pos_2 + if (Pos_2==Fin_1) + Pos_2=Debut_Bloc_2; + else + Pos_2++; + } + } + else + { + // Le bloc source et le bloc destination sont distincts. + for (Pos_1=Debut_Bloc_1,Pos_2=Debut_Bloc_2;Pos_1<=Fin_1;Pos_1++,Pos_2++) + { + // On ‚change les cases + Temp =Shade_Liste[Shade_Actuel].Liste[Pos_1]; + Shade_Liste[Shade_Actuel].Liste[Pos_1]=Shade_Liste[Shade_Actuel].Liste[Pos_2]; + Shade_Liste[Shade_Actuel].Liste[Pos_2]=Temp; + } + } + + free(Shade_temporaire); +} + + +int Menu_Shade(void) +{ + short Bouton_clicke; // Num‚ro du bouton sur lequel l'utilisateur a click‚ + char Chaine[4]; // Chaine d'affichage du nø de shade actif et du Pas + word Ancien_Mouse_X,Ancien_Mouse_X2; // M‚mo. de l'ancienne pos. du curseur + word Ancien_Mouse_Y,Ancien_Mouse_Y2; + byte Ancien_Mouse_K,Ancien_Mouse_K2; + byte Couleur_temporaire; // Variables de gestion des clicks dans la palette + byte Premiere_couleur=0; + byte Derniere_couleur=0; + word Select_Debut=0; + word Select_Fin=0; + struct Fenetre_Bouton_special * Bouton_saisie; + short Temp,Temp2; + word Case_temporaire; + word * Buffer; // Buffer du Copy/Paste + word * Buffer_Undo; // Buffer du Undo + word * Pointeur_temp; + byte Couleur; + byte Click; + + + Buffer =(word *)malloc(512*sizeof(word)); + Buffer_Undo =(word *)malloc(512*sizeof(word)); + Pointeur_temp=(word *)malloc(512*sizeof(word)); + + // Ouverture de la fenˆtre du menu + Ouvrir_fenetre(310,190,"Shade"); + + // D‚claration & trac‚ du bouton de palette + Fenetre_Definir_bouton_palette(5,16); // 1 + + // D‚claration & trac‚ du scroller de s‚lection du nø de d‚grad‚ + Fenetre_Definir_bouton_scroller(192,17,84,8,1,Shade_Actuel); // 2 + + // D‚claration & trac‚ de la zone de d‚finition des d‚grad‚s + Fenetre_Definir_bouton_special(8,127,256,53); // 3 + + // D‚claration & trac‚ des boutons de sortie + Fenetre_Definir_bouton_normal(207,17,51,14,"Cancel",0,1,0x0001); // 4 + Fenetre_Definir_bouton_normal(261,17,43,14,"OK" ,0,1,0x001C); // 5 + + // D‚claration & trac‚ des boutons de copie de shade + Fenetre_Definir_bouton_normal(206,87,27,14,"Cpy" ,1,1,0x002E); // 6 + Fenetre_Definir_bouton_normal(234,87,43,14,"Paste" ,1,1,0x0019); // 7 + + // On tagge le bloc + Tagger_intervalle_palette(0,0); + + // Trac‚ d'un cadre creux autour du bloc d‚grad‚ + Fenetre_Afficher_cadre_creux(171,26,18,66); + Block(Fenetre_Pos_X+(Menu_Facteur_X*172),Fenetre_Pos_Y+(Menu_Facteur_Y*27), + Menu_Facteur_X<<4,Menu_Facteur_Y<<6,CM_Noir); + // Trac‚ d'un cadre creux autour de tous les d‚grad‚s + Fenetre_Afficher_cadre_creux(223,34,66,50); + Shade_Blocs_degrades(); + // Trac‚ d'un cadre autour de la zone de d‚finition de d‚grad‚s + Fenetre_Afficher_cadre(5,124,262,61); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + + // D‚claration & trac‚ des boutons d'‚dition de shade + Fenetre_Definir_bouton_normal( 6,107,27,14,"Ins" ,0,1,0x0052); // 8 + Fenetre_Definir_bouton_normal( 38,107,27,14,"Del" ,0,1,0x0053); // 9 + Fenetre_Definir_bouton_normal( 66,107,43,14,"Blank",1,1,0x0030); // 10 + Fenetre_Definir_bouton_normal(110,107,27,14,"Inv" ,1,1,0x0017); // 11 + Fenetre_Definir_bouton_normal(138,107,27,14,"Swp" ,1,1,0x001F); // 12 + + // D‚claration & trac‚ des boutons de taggage + Print_dans_fenetre(268,123,"Disbl"/*"Dsabl"*/,CM_Fonce,CM_Clair); + Fenetre_Definir_bouton_normal(274,133,27,14,"Set" ,0,1,0x003B); // 13 + Fenetre_Definir_bouton_normal(274,148,27,14,"Clr" ,0,1,0x003C); // 14 + + // D‚claration & trac‚ de la zone de saisie du pas + Print_dans_fenetre(272,165,"Step",CM_Fonce,CM_Clair); + Fenetre_Definir_bouton_saisie(274,174,3); // 15 + Bouton_saisie=Fenetre_Liste_boutons_special; + Num2str(Shade_Liste[Shade_Actuel].Pas,Chaine,3); + Fenetre_Contenu_bouton_saisie(Bouton_saisie,Chaine); + + // Bouton Undo + Fenetre_Definir_bouton_normal(170,107,35,14,"Undo",1,1,0x0016); // 16 + // Bouton Clear + Fenetre_Definir_bouton_normal(278,87,27,14,"Clr",0,1,0x000E); // 17 + + // Bouton Mode + Fenetre_Definir_bouton_normal(244,107,60,14,"",0,1,0x000F); // 18 + + // Affichage du nø de shade actif + Num2str(Shade_Actuel+1,Chaine,1); + Print_dans_fenetre(210,55,Chaine,CM_Noir,CM_Clair); + + memcpy(Buffer ,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + + Afficher_curseur(); + +/*TODO A vérifier :) + Clavier_americain(); // On est oblig‚ de rester en clavier am‚ricain pour + // que l'on puisse d‚caler la couleur s‚lectionn‚e … // l'aide des touches "^" et "$" ("[" et "]"). -*/ - do - { - Ancien_Mouse_X=Ancien_Mouse_X2=Mouse_X; - Ancien_Mouse_Y=Ancien_Mouse_Y2=Mouse_Y; - Ancien_Mouse_K=Ancien_Mouse_K2=Mouse_K; - - Bouton_clicke=Fenetre_Bouton_clicke(); - - switch (Bouton_clicke) - { - case 0 : - break; - case -1 : - case 1 : // Gestion de la palette - if ( (Mouse_X!=Ancien_Mouse_X) || (Mouse_Y!=Ancien_Mouse_Y) || (Mouse_K!=Ancien_Mouse_K) ) - { - Effacer_curseur(); - Couleur_temporaire=Lit_pixel(Mouse_X,Mouse_Y); - - if (!Ancien_Mouse_K) - { // On vient de clicker - - // On met … jour l'intervalle du Shade - Premiere_couleur=Derniere_couleur=Couleur_temporaire; - // On tagge le bloc - Tagger_intervalle_palette(Premiere_couleur,Derniere_couleur); - // Trac‚ du bloc d‚grad‚: - Bloc_degrade_dans_fenetre(172,27,Premiere_couleur,Derniere_couleur); - } - else - { // On maintient le click, on va donc tester si le curseur bouge - if (Couleur_temporaire!=Derniere_couleur) - { - Derniere_couleur=Couleur_temporaire; - - // On tagge le bloc - if (Premiere_couleur<=Couleur_temporaire) - { - Tagger_intervalle_palette(Premiere_couleur,Derniere_couleur); - Bloc_degrade_dans_fenetre(172,27,Premiere_couleur,Derniere_couleur); - } - else - { - Tagger_intervalle_palette(Derniere_couleur,Premiere_couleur); - Bloc_degrade_dans_fenetre(172,27,Derniere_couleur,Premiere_couleur); - } - } - } - - // On affiche le num‚ro de la couleur s‚lectionn‚e - Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); - - Afficher_curseur(); - } - break; - - case 2 : // Gestion du changement de Shade (scroller) - Effacer_curseur(); - Shade_Actuel=Fenetre_Attribut2; - // Affichade du nø de shade actif - Num2str(Shade_Actuel+1,Chaine,1); - Print_dans_fenetre(210,55,Chaine,CM_Noir,CM_Clair); - // Affichade du Pas - Num2str(Shade_Liste[Shade_Actuel].Pas,Chaine,3); - Print_dans_fenetre(276,176,Chaine,CM_Noir,CM_Clair); - // Trac‚ du bloc d‚grad‚: - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - // On place le nouveau shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - break; - - case 3 : // Gestion de la zone de d‚finition de shades - if (((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)%7)<4) - if ( (Mouse_X!=Ancien_Mouse_X2) || (Mouse_Y!=Ancien_Mouse_Y2) || (Mouse_K!=Ancien_Mouse_K2) ) - { - Effacer_curseur(); - Select_Fin=(((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)/7)<<6)+ - ((((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-8 )>>2); - if (!Ancien_Mouse_K2) // On vient de clicker - Select_Debut=Select_Fin; - Tagger_shades(Select_Debut,Select_Fin); - Afficher_couleur_case_selectionnee(Select_Debut,Select_Fin); - Afficher_curseur(); - } - break; - - case 6 : // Copy - memcpy(Buffer,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - break; - - case 7 : // Paste - // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - // Et on le modifie - memcpy(Shade_Liste[Shade_Actuel].Liste,Buffer,512*sizeof(word)); - Effacer_curseur(); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - break; - - case 8 : // Insert - // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - // Et on le modifie - if (Premiere_couleur<=Derniere_couleur) - Temp=Derniere_couleur-Premiere_couleur; - else - Temp=Premiere_couleur-Derniere_couleur; - - if (Select_Debut==Select_Fin) // Une couleur s‚lectionn‚e - { - if (Fenetre_Attribut1==2) - Supprimer_shade(Select_Debut,Select_Debut+Temp); - } - else // Un bloc s‚lectionn‚ - { - Supprimer_shade(Select_Debut,Select_Fin); - - if (Premiere_couleur<=Derniere_couleur) - Temp=Derniere_couleur-Premiere_couleur; - else - Temp=Premiere_couleur-Derniere_couleur; - - if (Select_Debut=512) - Select_Debut=511; - Select_Fin=Select_Debut; - - Effacer_curseur(); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - break; - - case 9 : // Delete - // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - // Et on le modifie - Supprimer_shade(Select_Debut,Select_Fin); - if (Select_Debut<=Select_Fin) - Select_Fin=Select_Debut; - else - Select_Debut=Select_Fin; - Effacer_curseur(); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - break; - - case 10 : // Blank - // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - // Et on le modifie - if (Fenetre_Attribut1==A_DROITE) // Click droit - { - if (Select_Debut!=Select_Fin) - { - if (Select_Debut<=Select_Fin) - { - Inserer_case_vide_dans_shade(Select_Debut); - Inserer_case_vide_dans_shade(Select_Fin+2); - } - else - { - Inserer_case_vide_dans_shade(Select_Fin); - Inserer_case_vide_dans_shade(Select_Debut+2); - } - } - else - Inserer_case_vide_dans_shade(Select_Debut); - - if (Select_Debut<511) Select_Debut++; - if (Select_Fin<511) Select_Fin++; - } - else // Click gauche - { - if (Select_Debut<=Select_Fin) - { - Temp=Select_Debut; - Temp2=Select_Fin; - } - else - { - Temp=Select_Fin; - Temp2=Select_Debut; - } - while (Temp<=Temp2) - Shade_Liste[Shade_Actuel].Liste[Temp++]=0x0100; - } - - Effacer_curseur(); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - break; - - case 11 : // Invert - // On place le shade dans le buffer du Undo - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - // Et on le modifie - if (Select_Debut<=Select_Fin) - { - Temp=Select_Debut; - Temp2=Select_Fin; - } - else - { - Temp=Select_Fin; - Temp2=Select_Debut; - } - - for (;Temp255) - { - Temp=255; - Num2str(Temp,Chaine,3); - Fenetre_Contenu_bouton_saisie(Bouton_saisie,Chaine); - } - Shade_Liste[Shade_Actuel].Pas=Temp; - Afficher_curseur(); - break; - - case 16 : // Undo - memcpy(Pointeur_temp,Buffer_Undo,512*sizeof(word)); - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - memcpy(Shade_Liste[Shade_Actuel].Liste,Pointeur_temp,512*sizeof(word)); - - Effacer_curseur(); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - break; - - case 17 : // Clear - memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); - for (Temp=0;Temp<512;Temp++) - Shade_Liste[Shade_Actuel].Liste[Temp]=0x0100; - Effacer_curseur(); - Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); - Afficher_curseur(); - break; - - case 18 : // Mode - Shade_Liste[Shade_Actuel].Mode=(Shade_Liste[Shade_Actuel].Mode+1)%3; - Effacer_curseur(); - Afficher_mode_du_shade(250,110,Shade_Liste[Shade_Actuel].Mode); - Afficher_curseur(); - } - - if (!Mouse_K) - switch (Touche) - { - case 0x001A : // D‚caler couleur dans palette vers la gauche - case 0x001B : // D‚caler couleur dans palette vers la droite - if (Premiere_couleur==Derniere_couleur) - { - if (Touche==0x001A) - { - Premiere_couleur--; - Derniere_couleur--; - } - else - { - Premiere_couleur++; - Derniere_couleur++; - } - Effacer_curseur(); - Tagger_intervalle_palette(Premiere_couleur,Premiere_couleur); - Block(Fenetre_Pos_X+(Menu_Facteur_X*172), - Fenetre_Pos_Y+(Menu_Facteur_Y*27), - Menu_Facteur_X<<4,Menu_Facteur_Y*64,Premiere_couleur); - // On affiche le num‚ro de la couleur s‚lectionn‚e - Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); - Afficher_curseur(); - } - break; - - case 0x0048 : // Select Haut - case 0x0050 : // Select Bas - case 0x004B : // Select Gauche - case 0x004D : // Select Droite - if (Select_Debut==Select_Fin) - { - switch (Touche) - { - case 0x0048 : // Select Haut - if (Select_Debut>=64) - { - Select_Debut-=64; - Select_Fin-=64; - } - else - Select_Debut=Select_Fin=0; - break; - case 0x0050 : // Select Bas - if (Select_Debut<448) - { - Select_Debut+=64; - Select_Fin+=64; - } - else - Select_Debut=Select_Fin=511; - break; - case 0x004B : // Select Gauche - if (Select_Debut>0) - { - Select_Debut--; - Select_Fin--; - } - break; - default : // Select Droite - if (Select_Debut<511) - { - Select_Debut++; - Select_Fin++; - } - } - Effacer_curseur(); - Tagger_shades(Select_Debut,Select_Debut); - Afficher_couleur_case_selectionnee(Select_Debut,Select_Debut); - Afficher_curseur(); - } - break; - - case 0x0029 : // R‚cup‚ration d'une couleur derriŠre le menu - case 0x0033 : - Recuperer_couleur_derriere_fenetre(&Couleur,&Click); - if (Click) - { - Effacer_curseur(); - Couleur_temporaire=Couleur; - - // On met … jour l'intervalle du Shade - Premiere_couleur=Derniere_couleur=Couleur_temporaire; - // On tagge le bloc - Tagger_intervalle_palette(Premiere_couleur,Derniere_couleur); - // Trac‚ du bloc d‚grad‚: - Bloc_degrade_dans_fenetre(172,27,Premiere_couleur,Derniere_couleur); - - // On affiche le num‚ro de la couleur s‚lectionn‚e - Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); - - Afficher_curseur(); - } - } - } - while ((Bouton_clicke!=4) && (Bouton_clicke!=5)); - -/* TODO Clavier_de_depart(); */ - - // Actions … r‚aliser en sortant du menu suivant OK ou Cancel - - Fermer_fenetre(); - free(Buffer_Undo); - free(Buffer); - free(Pointeur_temp); - - return (Bouton_clicke==5); -} - - - -void Bouton_Shade_Menu(void) -{ - struct T_Shade * Shade_Liste_Backup; // Anciennes donn‚es des shades - byte Ancien_shade; // Ancien nø de shade actif - - - // Backup des anciennes donn‚es - Shade_Liste_Backup=(struct T_Shade *)malloc(sizeof(Shade_Liste)); - memcpy(Shade_Liste_Backup,Shade_Liste,sizeof(Shade_Liste)); - Ancien_shade=Shade_Actuel; - - if (!Menu_Shade()) // Cancel - { - memcpy(Shade_Liste,Shade_Liste_Backup,sizeof(Shade_Liste)); - Shade_Actuel=Ancien_shade; - } - else // OK - { - Liste2tables(Shade_Liste[Shade_Actuel].Liste, - Shade_Liste[Shade_Actuel].Pas, - Shade_Liste[Shade_Actuel].Mode, - Shade_Table_gauche,Shade_Table_droite); - - // Si avant de rentrer dans le menu on n'‚tait pas en mode Shade - if (!Shade_Mode) - Bouton_Shade_Mode(); // => On y passe (cool!) - } - - free(Shade_Liste_Backup); - - Afficher_curseur(); -} - - - - -void Bouton_Quick_shade_Menu(void) -{ - short Bouton_clicke; - int Temp; - char Chaine[4]; - byte Step_Backup=Quick_shade_Step; // Backup des - byte Loop_Backup=Quick_shade_Loop; // anciennes donn‚es - - - Ouvrir_fenetre(142,56,"Quick-shade"); - - Fenetre_Definir_bouton_normal(76,36,60,14,"OK",0,1,0x001C); // 1 - Fenetre_Definir_bouton_normal( 6,36,60,14,"Cancel",0,1,0x0001); // 2 - Fenetre_Definir_bouton_normal(76,18,60,14,"",0,1,0x000F); // 3 - Afficher_mode_du_shade(83,21,Quick_shade_Loop); - - // D‚claration & trac‚ de la zone de saisie du pas - Print_dans_fenetre(5,21,"Step",CM_Fonce,CM_Clair); - Fenetre_Definir_bouton_saisie(40,19,3); // 4 - Num2str(Quick_shade_Step,Chaine,3); - Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); - - Afficher_curseur(); - - do - { - Bouton_clicke=Fenetre_Bouton_clicke(); - - switch (Bouton_clicke) - { - case 3 : // Mode - Quick_shade_Loop=(Quick_shade_Loop+1)%3; - Effacer_curseur(); - Afficher_mode_du_shade(83,21,Quick_shade_Loop); - Afficher_curseur(); - break; - - case 4 : // Saisie du pas - Effacer_curseur(); - Num2str(Quick_shade_Step,Chaine,3); - Readline(42,21,Chaine,3,1); - Temp=atoi(Chaine); - // On corrige le pas - if (!Temp) - { - Temp=1; - Num2str(Temp,Chaine,3); - Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); - } - else if (Temp>255) - { - Temp=255; - Num2str(Temp,Chaine,3); - Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); - } - Quick_shade_Step=Temp; - Afficher_curseur(); - } - } - while ((Bouton_clicke!=1) && (Bouton_clicke!=2)); - - Fermer_fenetre(); - - if (Bouton_clicke==2) // Cancel - { - Quick_shade_Step=Step_Backup; - Quick_shade_Loop=Loop_Backup; - } - else // OK - { - // Si avant de rentrer dans le menu on n'‚tait pas en mode Quick-Shade - if (!Quick_shade_Mode) - Bouton_Quick_shade_Mode(); // => On y passe (cool!) - } - - Afficher_curseur(); -} +*/ + do + { + Ancien_Mouse_X=Ancien_Mouse_X2=Mouse_X; + Ancien_Mouse_Y=Ancien_Mouse_Y2=Mouse_Y; + Ancien_Mouse_K=Ancien_Mouse_K2=Mouse_K; + + Bouton_clicke=Fenetre_Bouton_clicke(); + + switch (Bouton_clicke) + { + case 0 : + break; + case -1 : + case 1 : // Gestion de la palette + if ( (Mouse_X!=Ancien_Mouse_X) || (Mouse_Y!=Ancien_Mouse_Y) || (Mouse_K!=Ancien_Mouse_K) ) + { + Effacer_curseur(); + Couleur_temporaire=Lit_pixel(Mouse_X,Mouse_Y); + + if (!Ancien_Mouse_K) + { // On vient de clicker + + // On met … jour l'intervalle du Shade + Premiere_couleur=Derniere_couleur=Couleur_temporaire; + // On tagge le bloc + Tagger_intervalle_palette(Premiere_couleur,Derniere_couleur); + // Trac‚ du bloc d‚grad‚: + Bloc_degrade_dans_fenetre(172,27,Premiere_couleur,Derniere_couleur); + } + else + { // On maintient le click, on va donc tester si le curseur bouge + if (Couleur_temporaire!=Derniere_couleur) + { + Derniere_couleur=Couleur_temporaire; + + // On tagge le bloc + if (Premiere_couleur<=Couleur_temporaire) + { + Tagger_intervalle_palette(Premiere_couleur,Derniere_couleur); + Bloc_degrade_dans_fenetre(172,27,Premiere_couleur,Derniere_couleur); + } + else + { + Tagger_intervalle_palette(Derniere_couleur,Premiere_couleur); + Bloc_degrade_dans_fenetre(172,27,Derniere_couleur,Premiere_couleur); + } + } + } + + // On affiche le num‚ro de la couleur s‚lectionn‚e + Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); + + Afficher_curseur(); + } + break; + + case 2 : // Gestion du changement de Shade (scroller) + Effacer_curseur(); + Shade_Actuel=Fenetre_Attribut2; + // Affichade du nø de shade actif + Num2str(Shade_Actuel+1,Chaine,1); + Print_dans_fenetre(210,55,Chaine,CM_Noir,CM_Clair); + // Affichade du Pas + Num2str(Shade_Liste[Shade_Actuel].Pas,Chaine,3); + Print_dans_fenetre(276,176,Chaine,CM_Noir,CM_Clair); + // Trac‚ du bloc d‚grad‚: + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + // On place le nouveau shade dans le buffer du Undo + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + break; + + case 3 : // Gestion de la zone de d‚finition de shades + if (((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)%7)<4) + if ( (Mouse_X!=Ancien_Mouse_X2) || (Mouse_Y!=Ancien_Mouse_Y2) || (Mouse_K!=Ancien_Mouse_K2) ) + { + Effacer_curseur(); + Select_Fin=(((((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-127)/7)<<6)+ + ((((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-8 )>>2); + if (!Ancien_Mouse_K2) // On vient de clicker + Select_Debut=Select_Fin; + Tagger_shades(Select_Debut,Select_Fin); + Afficher_couleur_case_selectionnee(Select_Debut,Select_Fin); + Afficher_curseur(); + } + break; + + case 6 : // Copy + memcpy(Buffer,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + break; + + case 7 : // Paste + // On place le shade dans le buffer du Undo + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + // Et on le modifie + memcpy(Shade_Liste[Shade_Actuel].Liste,Buffer,512*sizeof(word)); + Effacer_curseur(); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + break; + + case 8 : // Insert + // On place le shade dans le buffer du Undo + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + // Et on le modifie + if (Premiere_couleur<=Derniere_couleur) + Temp=Derniere_couleur-Premiere_couleur; + else + Temp=Premiere_couleur-Derniere_couleur; + + if (Select_Debut==Select_Fin) // Une couleur s‚lectionn‚e + { + if (Fenetre_Attribut1==2) + Supprimer_shade(Select_Debut,Select_Debut+Temp); + } + else // Un bloc s‚lectionn‚ + { + Supprimer_shade(Select_Debut,Select_Fin); + + if (Premiere_couleur<=Derniere_couleur) + Temp=Derniere_couleur-Premiere_couleur; + else + Temp=Premiere_couleur-Derniere_couleur; + + if (Select_Debut=512) + Select_Debut=511; + Select_Fin=Select_Debut; + + Effacer_curseur(); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + break; + + case 9 : // Delete + // On place le shade dans le buffer du Undo + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + // Et on le modifie + Supprimer_shade(Select_Debut,Select_Fin); + if (Select_Debut<=Select_Fin) + Select_Fin=Select_Debut; + else + Select_Debut=Select_Fin; + Effacer_curseur(); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + break; + + case 10 : // Blank + // On place le shade dans le buffer du Undo + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + // Et on le modifie + if (Fenetre_Attribut1==A_DROITE) // Click droit + { + if (Select_Debut!=Select_Fin) + { + if (Select_Debut<=Select_Fin) + { + Inserer_case_vide_dans_shade(Select_Debut); + Inserer_case_vide_dans_shade(Select_Fin+2); + } + else + { + Inserer_case_vide_dans_shade(Select_Fin); + Inserer_case_vide_dans_shade(Select_Debut+2); + } + } + else + Inserer_case_vide_dans_shade(Select_Debut); + + if (Select_Debut<511) Select_Debut++; + if (Select_Fin<511) Select_Fin++; + } + else // Click gauche + { + if (Select_Debut<=Select_Fin) + { + Temp=Select_Debut; + Temp2=Select_Fin; + } + else + { + Temp=Select_Fin; + Temp2=Select_Debut; + } + while (Temp<=Temp2) + Shade_Liste[Shade_Actuel].Liste[Temp++]=0x0100; + } + + Effacer_curseur(); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + break; + + case 11 : // Invert + // On place le shade dans le buffer du Undo + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + // Et on le modifie + if (Select_Debut<=Select_Fin) + { + Temp=Select_Debut; + Temp2=Select_Fin; + } + else + { + Temp=Select_Fin; + Temp2=Select_Debut; + } + + for (;Temp255) + { + Temp=255; + Num2str(Temp,Chaine,3); + Fenetre_Contenu_bouton_saisie(Bouton_saisie,Chaine); + } + Shade_Liste[Shade_Actuel].Pas=Temp; + Afficher_curseur(); + break; + + case 16 : // Undo + memcpy(Pointeur_temp,Buffer_Undo,512*sizeof(word)); + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + memcpy(Shade_Liste[Shade_Actuel].Liste,Pointeur_temp,512*sizeof(word)); + + Effacer_curseur(); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + break; + + case 17 : // Clear + memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + for (Temp=0;Temp<512;Temp++) + Shade_Liste[Shade_Actuel].Liste[Temp]=0x0100; + Effacer_curseur(); + Afficher_tout_le_shade(Premiere_couleur,Derniere_couleur,Select_Debut,Select_Fin); + Afficher_curseur(); + break; + + case 18 : // Mode + Shade_Liste[Shade_Actuel].Mode=(Shade_Liste[Shade_Actuel].Mode+1)%3; + Effacer_curseur(); + Afficher_mode_du_shade(250,110,Shade_Liste[Shade_Actuel].Mode); + Afficher_curseur(); + } + + if (!Mouse_K) + switch (Touche) + { + case 0x001A : // D‚caler couleur dans palette vers la gauche + case 0x001B : // D‚caler couleur dans palette vers la droite + if (Premiere_couleur==Derniere_couleur) + { + if (Touche==0x001A) + { + Premiere_couleur--; + Derniere_couleur--; + } + else + { + Premiere_couleur++; + Derniere_couleur++; + } + Effacer_curseur(); + Tagger_intervalle_palette(Premiere_couleur,Premiere_couleur); + Block(Fenetre_Pos_X+(Menu_Facteur_X*172), + Fenetre_Pos_Y+(Menu_Facteur_Y*27), + Menu_Facteur_X<<4,Menu_Facteur_Y*64,Premiere_couleur); + // On affiche le num‚ro de la couleur s‚lectionn‚e + Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); + Afficher_curseur(); + } + break; + + case 0x0048 : // Select Haut + case 0x0050 : // Select Bas + case 0x004B : // Select Gauche + case 0x004D : // Select Droite + if (Select_Debut==Select_Fin) + { + switch (Touche) + { + case 0x0048 : // Select Haut + if (Select_Debut>=64) + { + Select_Debut-=64; + Select_Fin-=64; + } + else + Select_Debut=Select_Fin=0; + break; + case 0x0050 : // Select Bas + if (Select_Debut<448) + { + Select_Debut+=64; + Select_Fin+=64; + } + else + Select_Debut=Select_Fin=511; + break; + case 0x004B : // Select Gauche + if (Select_Debut>0) + { + Select_Debut--; + Select_Fin--; + } + break; + default : // Select Droite + if (Select_Debut<511) + { + Select_Debut++; + Select_Fin++; + } + } + Effacer_curseur(); + Tagger_shades(Select_Debut,Select_Debut); + Afficher_couleur_case_selectionnee(Select_Debut,Select_Debut); + Afficher_curseur(); + } + break; + + case 0x0029 : // R‚cup‚ration d'une couleur derriŠre le menu + case 0x0033 : + Recuperer_couleur_derriere_fenetre(&Couleur,&Click); + if (Click) + { + Effacer_curseur(); + Couleur_temporaire=Couleur; + + // On met … jour l'intervalle du Shade + Premiere_couleur=Derniere_couleur=Couleur_temporaire; + // On tagge le bloc + Tagger_intervalle_palette(Premiere_couleur,Derniere_couleur); + // Trac‚ du bloc d‚grad‚: + Bloc_degrade_dans_fenetre(172,27,Premiere_couleur,Derniere_couleur); + + // On affiche le num‚ro de la couleur s‚lectionn‚e + Afficher_couleur_selectionnee(Premiere_couleur,Derniere_couleur); + + Afficher_curseur(); + } + } + } + while ((Bouton_clicke!=4) && (Bouton_clicke!=5)); + +/* TODO Clavier_de_depart(); */ + + // Actions … r‚aliser en sortant du menu suivant OK ou Cancel + + Fermer_fenetre(); + free(Buffer_Undo); + free(Buffer); + free(Pointeur_temp); + + return (Bouton_clicke==5); +} + + + +void Bouton_Shade_Menu(void) +{ + struct T_Shade * Shade_Liste_Backup; // Anciennes donn‚es des shades + byte Ancien_shade; // Ancien nø de shade actif + + + // Backup des anciennes donn‚es + Shade_Liste_Backup=(struct T_Shade *)malloc(sizeof(Shade_Liste)); + memcpy(Shade_Liste_Backup,Shade_Liste,sizeof(Shade_Liste)); + Ancien_shade=Shade_Actuel; + + if (!Menu_Shade()) // Cancel + { + memcpy(Shade_Liste,Shade_Liste_Backup,sizeof(Shade_Liste)); + Shade_Actuel=Ancien_shade; + } + else // OK + { + Liste2tables(Shade_Liste[Shade_Actuel].Liste, + Shade_Liste[Shade_Actuel].Pas, + Shade_Liste[Shade_Actuel].Mode, + Shade_Table_gauche,Shade_Table_droite); + + // Si avant de rentrer dans le menu on n'‚tait pas en mode Shade + if (!Shade_Mode) + Bouton_Shade_Mode(); // => On y passe (cool!) + } + + free(Shade_Liste_Backup); + + Afficher_curseur(); +} + + + + +void Bouton_Quick_shade_Menu(void) +{ + short Bouton_clicke; + int Temp; + char Chaine[4]; + byte Step_Backup=Quick_shade_Step; // Backup des + byte Loop_Backup=Quick_shade_Loop; // anciennes donn‚es + + + Ouvrir_fenetre(142,56,"Quick-shade"); + + Fenetre_Definir_bouton_normal(76,36,60,14,"OK",0,1,0x001C); // 1 + Fenetre_Definir_bouton_normal( 6,36,60,14,"Cancel",0,1,0x0001); // 2 + Fenetre_Definir_bouton_normal(76,18,60,14,"",0,1,0x000F); // 3 + Afficher_mode_du_shade(83,21,Quick_shade_Loop); + + // D‚claration & trac‚ de la zone de saisie du pas + Print_dans_fenetre(5,21,"Step",CM_Fonce,CM_Clair); + Fenetre_Definir_bouton_saisie(40,19,3); // 4 + Num2str(Quick_shade_Step,Chaine,3); + Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); + + Afficher_curseur(); + + do + { + Bouton_clicke=Fenetre_Bouton_clicke(); + + switch (Bouton_clicke) + { + case 3 : // Mode + Quick_shade_Loop=(Quick_shade_Loop+1)%3; + Effacer_curseur(); + Afficher_mode_du_shade(83,21,Quick_shade_Loop); + Afficher_curseur(); + break; + + case 4 : // Saisie du pas + Effacer_curseur(); + Num2str(Quick_shade_Step,Chaine,3); + Readline(42,21,Chaine,3,1); + Temp=atoi(Chaine); + // On corrige le pas + if (!Temp) + { + Temp=1; + Num2str(Temp,Chaine,3); + Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); + } + else if (Temp>255) + { + Temp=255; + Num2str(Temp,Chaine,3); + Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); + } + Quick_shade_Step=Temp; + Afficher_curseur(); + } + } + while ((Bouton_clicke!=1) && (Bouton_clicke!=2)); + + Fermer_fenetre(); + + if (Bouton_clicke==2) // Cancel + { + Quick_shade_Step=Step_Backup; + Quick_shade_Loop=Loop_Backup; + } + else // OK + { + // Si avant de rentrer dans le menu on n'‚tait pas en mode Quick-Shade + if (!Quick_shade_Mode) + Bouton_Quick_shade_Mode(); // => On y passe (cool!) + } + + Afficher_curseur(); +}