Started work on the gradiation rectangle.
The handling in the operation engine should work pretty well. I would like to do some changes, however (displaying the bottomright of the rectangle, and use XOR for the vector, for example) Now, i have to do the real thing, the gradiation calculation and drawing. But let's see that tomorrow... git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@299 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
320eb547cd
commit
dc9e10c054
12
boutons.c
12
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)
|
||||
|
||||
@ -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);
|
||||
|
||||
3
const.h
3
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
|
||||
};
|
||||
|
||||
3
global.h
3
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];
|
||||
|
||||
13
init.c
13
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,
|
||||
|
||||
224
operatio.c
224
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<Pinceau_X)?Pinceau_X-Debut_X:Debut_X-Pinceau_X)+1,Chaine,4);
|
||||
Print_dans_menu(Chaine,2);
|
||||
Num2str(((Debut_Y<Pinceau_Y)?Pinceau_Y-Debut_Y:Debut_Y-Pinceau_Y)+1,Chaine,4);
|
||||
Print_dans_menu(Chaine,11);
|
||||
}
|
||||
else
|
||||
Print_coordonnees();
|
||||
|
||||
Operation_PUSH(Debut_X);
|
||||
Operation_PUSH(Debut_Y);
|
||||
}
|
||||
|
||||
Operation_PUSH(Pinceau_X);
|
||||
Operation_PUSH(Pinceau_Y);
|
||||
DEBUG("12 ",5);
|
||||
}
|
||||
|
||||
void Rectangle_Degrade_0_5(void)
|
||||
// OPERATION_RECTANGLE_DEGRADE
|
||||
// Clic souris 0
|
||||
// Taile pile : 5
|
||||
//
|
||||
// Souris effacée : non
|
||||
|
||||
// Le rectangle est en place, maintenant il faut tracer le vecteur de dégradé,
|
||||
// on doit donc attendre que l'utilisateur clique quelque part
|
||||
// On stocke tout de suite les coordonnées du pinceau comme ça on change d'état et on passe à la suite
|
||||
{
|
||||
DEBUG("0 ",5);
|
||||
Forme_curseur = FORME_CURSEUR_CIBLE;
|
||||
Operation_PUSH(Pinceau_X);
|
||||
Operation_PUSH(Pinceau_Y);
|
||||
}
|
||||
|
||||
void Rectangle_Degrade_0_7(void)
|
||||
// OPERATION_RECTANGLE_DEGRADE
|
||||
// Clic souris 0
|
||||
// Taile pile : 5
|
||||
//
|
||||
// Souris effacée : non
|
||||
|
||||
// On continue à attendre que l'utilisateur clique en gardant les coords à jour
|
||||
{
|
||||
Operation_Taille_pile -= 2;
|
||||
Print_coordonnees();
|
||||
Operation_PUSH(Pinceau_X);
|
||||
Operation_PUSH(Pinceau_Y);
|
||||
DEBUG("0 ",7);
|
||||
}
|
||||
|
||||
void Rectangle_Degrade_12_7(void)
|
||||
// Opération : OPERATION_RECTANGLE_DEGRADE
|
||||
// Click Souris: 1 ou 2
|
||||
// Taille_Pile : 7
|
||||
//
|
||||
// Souris effacée: Oui
|
||||
|
||||
// Début du tracé du vecteur (premier clic)
|
||||
// On garde les anciennes coordonnées dans la pile, et on ajoute les nouvelles par dessus
|
||||
{
|
||||
Operation_PUSH(Pinceau_X);
|
||||
Operation_PUSH(Pinceau_Y);
|
||||
DEBUG("12 ",7);
|
||||
}
|
||||
|
||||
void Rectangle_Degrade_12_9(void)
|
||||
// Opération : OPERATION_RECTANGLE_DEGRADE
|
||||
// Click Souris: 1
|
||||
// Taille_Pile : 5
|
||||
//
|
||||
// Souris effacée: Non
|
||||
|
||||
// Poursuite du tracé du vecteur (déplacement de la souris en gardant le curseur appuyé)
|
||||
{
|
||||
short Debut_X;
|
||||
short Debut_Y;
|
||||
short Fin_X;
|
||||
short Fin_Y;
|
||||
|
||||
Operation_POP(&Fin_Y);
|
||||
Operation_POP(&Fin_X);
|
||||
|
||||
DEBUG("12 ",9);
|
||||
if ((Pinceau_X!=Fin_X) || (Pinceau_Y!=Fin_Y))
|
||||
{
|
||||
Effacer_curseur();
|
||||
Operation_POP(&Debut_Y);
|
||||
Operation_POP(&Debut_X);
|
||||
// On corrige les coordonnées de la ligne si la touche shift est appuyée...
|
||||
if(SDL_GetModState() & KMOD_SHIFT)
|
||||
Rectifier_coordonnees_a_45_degres(Debut_X,Debut_Y,&Pinceau_X,&Pinceau_Y);
|
||||
|
||||
Aff_coords_rel_ou_abs(Debut_X,Debut_Y);
|
||||
|
||||
Effacer_ligne_Preview(Debut_X,Debut_Y,Fin_X,Fin_Y);
|
||||
if (Mouse_K==A_GAUCHE)
|
||||
{
|
||||
Tracer_ligne_Preview (Debut_X,Debut_Y,Pinceau_X,Pinceau_Y,Fore_color);
|
||||
}
|
||||
else
|
||||
{
|
||||
Tracer_ligne_Preview (Debut_X,Debut_Y,Pinceau_X,Pinceau_Y,Back_color);
|
||||
}
|
||||
|
||||
Operation_PUSH(Debut_X);
|
||||
Operation_PUSH(Debut_Y);
|
||||
Afficher_curseur();
|
||||
}
|
||||
|
||||
Operation_PUSH(Pinceau_X);
|
||||
Operation_PUSH(Pinceau_Y);
|
||||
}
|
||||
|
||||
void Rectangle_Degrade_0_9(void)
|
||||
// Opération : OPERATION_RECTANGLE_DEGRADE
|
||||
// Click Souris: 1 ou 2
|
||||
// Taille_Pile : 0
|
||||
//
|
||||
// Souris effacée: Oui
|
||||
|
||||
// Ouf, fini ! on dessine enfin le rectangle avec son dégradé
|
||||
{
|
||||
short Rect_Debut_X;
|
||||
short Rect_Debut_Y;
|
||||
short Rect_Fin_X;
|
||||
short Rect_Fin_Y;
|
||||
|
||||
short Vecteur_Debut_X;
|
||||
short Vecteur_Debut_Y;
|
||||
short Vecteur_Fin_X;
|
||||
short Vecteur_Fin_Y;
|
||||
|
||||
DEBUG("FINISH ",9);
|
||||
Operation_POP(&Vecteur_Fin_Y);
|
||||
Operation_POP(&Vecteur_Fin_X);
|
||||
Operation_POP(&Vecteur_Debut_Y);
|
||||
Operation_POP(&Vecteur_Debut_X);
|
||||
Operation_POP(&Rect_Fin_Y);
|
||||
Operation_POP(&Rect_Fin_X);
|
||||
Operation_POP(&Rect_Debut_Y);
|
||||
Operation_POP(&Rect_Debut_X);
|
||||
Operation_Taille_pile --;
|
||||
|
||||
// Maintenant on efface tout le bazar temporaire : rectangle et ligne XOR
|
||||
Effacer_ligne_Preview(Vecteur_Debut_X,Vecteur_Debut_Y,Vecteur_Fin_X,Vecteur_Fin_Y);
|
||||
|
||||
Effacer_curseur();
|
||||
Forme_curseur = FORME_CURSEUR_CIBLE_XOR; // Ceci nous permet d'effacer correctement le curseur
|
||||
// On remet le pinceau en haut à droite du rectangle pour effacer le curseur qui y traine
|
||||
Pinceau_X = Rect_Debut_X;
|
||||
Pinceau_Y = Rect_Debut_Y;
|
||||
Effacer_curseur();
|
||||
|
||||
// Et enfin on trace le rectangle avec le dégradé dedans !
|
||||
}
|
||||
/////////////////////////////////////////////////// OPERATION_LIGNES_CENTREES
|
||||
|
||||
|
||||
|
||||
10
operatio.h
10
operatio.h
@ -181,6 +181,16 @@ void Ellipse_degradee_12_6(void);
|
||||
void Ellipse_degradee_0_6(void);
|
||||
void Ellipse_degradee_12_8(void);
|
||||
|
||||
///////////////////////////////////////////////// OPERATION_RECTANGLE_DEGRADE
|
||||
|
||||
void Rectangle_Degrade_12_0(void);
|
||||
void Rectangle_Degrade_12_5(void);
|
||||
void Rectangle_Degrade_0_5(void);
|
||||
void Rectangle_Degrade_0_7(void);
|
||||
void Rectangle_Degrade_12_7(void);
|
||||
void Rectangle_Degrade_12_9(void);
|
||||
void Rectangle_Degrade_0_9(void);
|
||||
|
||||
/////////////////////////////////////////////////// OPERATION_LIGNES_CENTREES
|
||||
|
||||
void Lignes_centrees_12_0(void);
|
||||
|
||||
@ -571,6 +571,9 @@ static const char * TableAideLignes[] =
|
||||
AIDE_TEXTE("line. Maintain your click to choose the end")
|
||||
AIDE_TEXTE("of the line and release the mouse button to")
|
||||
AIDE_TEXTE("set it.")
|
||||
AIDE_TEXTE("If you hold SHIFT when drawing, the line")
|
||||
AIDE_TEXTE("will be constrained to horizonal, vertical")
|
||||
AIDE_TEXTE("or diagonal.")
|
||||
AIDE_TEXTE("")
|
||||
AIDE_TEXTE("* Knotted lines: works like classical lines,")
|
||||
AIDE_TEXTE("but the end of your line will automatically")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user