diff --git a/boutons.c b/boutons.c index 4b19a079..1b4c48db 100644 --- a/boutons.c +++ b/boutons.c @@ -110,7 +110,7 @@ void Message_Non_disponible(void) // 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_GRADRECT); Desenclencher_bouton(BOUTON_TEXTE); Afficher_curseur(); @@ -2029,7 +2029,7 @@ void Bouton_Degrades(void) } -// -- Gestion des boutons de cercle (ellipse) dégradé(e) -------------------- +// -- Gestion des boutons de cercle / ellipse / rectangle dégradés -------------------- void Bouton_Cercle_degrade(void) { @@ -2047,6 +2047,14 @@ void Bouton_Ellipse_degrade(void) } +void Bouton_Rectangle_degrade(void) +{ + Effacer_curseur(); + Demarrer_pile_operation(OPERATION_RECTANGLE_DEGRADE); + Afficher_curseur(); +} + + // -- Gestion du bouton de remplissage --------------------------------------- void Bouton_Fill(void) diff --git a/boutons.h b/boutons.h index 28d4ebd9..46d921ac 100644 --- a/boutons.h +++ b/boutons.h @@ -64,9 +64,11 @@ void Bouton_Rectangle_plein(void); // Boutons relatifs aux dégradés void Bouton_Degrades(void); void Degrade_Charger_infos_du_tableau(int Indice); + // Boutons relatifs aux cercles (ellipses) dégradé(e)s void Bouton_Cercle_degrade(void); void Bouton_Ellipse_degrade(void); +void Bouton_Rectangle_degrade(void); // Boutons relatifs aux cercles (ellipses) plein(e)s et vides void Bouton_Cercle_vide(void); diff --git a/const.h b/const.h index 02a1693c..62c0fd28 100644 --- a/const.h +++ b/const.h @@ -40,7 +40,7 @@ #define NB_BOUTONS 38 // Nombre de boutons à gérer #define NB_TOUCHES 134 // Nombre de combinaisons de touches #define NB_TOUCHES_SPECIALES 72 // Nombre de touches spéciales -#define NB_OPERATIONS 32 // Nombre d'opérations gérées par le moteur +#define NB_OPERATIONS 33 // Nombre d'opérations gérées par le moteur #define NB_FACTEURS_DE_ZOOM 12 // Nombre de facteurs de zoom #define LARGEUR_MENU 254 // Largeur du menu en taille réelle #define HAUTEUR_MENU 44 // Hauteur du menu en taille réelle @@ -392,6 +392,7 @@ enum OPERATIONS OPERATION_TOURNER_BROSSE, // Faire tourner brosse OPERATION_ETIRER_BROSSE, // Etirer brosse OPERATION_DEFORMER_BROSSE, // Deformer brosse + OPERATION_RECTANGLE_DEGRADE, // Rectangle dégradé OPERATION_AUCUNE }; diff --git a/gfx2.cfg b/gfx2.cfg index 65855ba3..e042b4a6 100644 Binary files a/gfx2.cfg and b/gfx2.cfg differ diff --git a/global.h b/global.h index 7a91c48f..831fb69f 100644 --- a/global.h +++ b/global.h @@ -594,7 +594,8 @@ GLOBAL short Pipette_Y; 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 + FORME_CURSEUR_CIBLE , // Deformer brosse + FORME_CURSEUR_CIBLE_XOR , // Rectangle degrade }; #else extern byte CURSEUR_D_OPERATION[NB_OPERATIONS]; diff --git a/init.c b/init.c index 9c4cb786..3881a2a9 100644 --- a/init.c +++ b/init.c @@ -669,9 +669,9 @@ void Initialisation_des_boutons(void) 85,1, 15,15, FORME_BOUTON_TRIANGLE_HAUT_GAUCHE, - Message_Non_disponible,Message_Non_disponible, + Bouton_Rectangle_degrade,Bouton_Rectangle_degrade, Rien_du_tout, - FAMILLE_INSTANTANE); + FAMILLE_OUTIL); /* Initialiser_bouton(BOUTON_GRADRECT, 85,1, @@ -1259,6 +1259,15 @@ void Initialisation_des_operations(void) Initialiser_operation(OPERATION_ELLIPSE_DEGRADEE,2,8, Ellipse_degradee_12_8,1); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,1,0,Rectangle_Degrade_12_0,0); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,1,5,Rectangle_Degrade_12_5,0); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,0,5,Rectangle_Degrade_0_5,1); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,0,7,Rectangle_Degrade_0_7,0); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,1,7,Rectangle_Degrade_12_7,1); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,1,9,Rectangle_Degrade_12_9,0); + Initialiser_operation(OPERATION_RECTANGLE_DEGRADE,0,9,Rectangle_Degrade_0_9,1); + + Initialiser_operation(OPERATION_LIGNES_CENTREES,1,0, Lignes_centrees_12_0,1); Initialiser_operation(OPERATION_LIGNES_CENTREES,2,0, diff --git a/operatio.c b/operatio.c index bef95fa8..f66a32c7 100644 --- a/operatio.c +++ b/operatio.c @@ -4139,7 +4139,231 @@ void Ellipse_degradee_12_8(void) } } +/****************************** +* Operation_Rectangle_Degrade * +******************************/ +// 1) tracé d'un rectangle classique avec les lignes XOR +// 2) tracé d'une ligne vecteur de dégradé, comme une ligne normale +// 3) dessin du dégradé + + +void Rectangle_Degrade_12_0(void) +// Opération : OPERATION_RECTANGLE_DEGRADE +// Click Souris: 1 ou 2 +// Taille_Pile : 0 +// +// Souris effacée: Oui + +// Initialisation de l'étape 1, on commence à dessiner le rectangle +{ + Initialiser_debut_operation(); + + if ((Config.Coords_rel) && (Menu_visible)) + Print_dans_menu("\035: 1 \022: 1",0); + // On laisse une trace du curseur à l'écran + Afficher_curseur(); + + if (Mouse_K==A_GAUCHE) + { + Shade_Table=Shade_Table_gauche; + Operation_PUSH(Fore_color); + } + else + { + Shade_Table=Shade_Table_droite; + Operation_PUSH(Back_color); + } + + Operation_PUSH(Pinceau_X); + Operation_PUSH(Pinceau_Y); + Operation_PUSH(Pinceau_X); + Operation_PUSH(Pinceau_Y); + + DEBUG("12 ",0); +} + + +void Rectangle_Degrade_12_5(void) +// Opération : OPERATION_RECTANGLE_DEGRADE +// Click Souris: 1 ou 2 +// Taille_Pile : 5 +// +// Souris effacée: Non + +// Modification de la taille du rectangle +{ + short Debut_X; + short Debut_Y; + short Ancien_X; + short Ancien_Y; + char Chaine[5]; + + Operation_POP(&Ancien_Y); + Operation_POP(&Ancien_X); + + if ((Pinceau_X!=Ancien_X) || (Pinceau_Y!=Ancien_Y)) + { + Operation_POP(&Debut_Y); + Operation_POP(&Debut_X); + + if ((Config.Coords_rel) && (Menu_visible)) + { + Num2str(((Debut_X