diff --git a/boutons.c b/boutons.c index 9355ba68..dc875dad 100644 --- a/boutons.c +++ b/boutons.c @@ -578,7 +578,7 @@ void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte Cancel, c if ( (Mouse_X!=Ancien_Mouse_X) || (Mouse_Y!=Ancien_Mouse_Y) || (Mouse_K!=Ancien_Mouse_K) ) { Effacer_curseur(); - Couleur_taggee=Lit_pixel(Mouse_X,Mouse_Y); + Couleur_taggee=(Bouton_clicke==1) ? Fenetre_Attribut2 : Lit_pixel(Mouse_X,Mouse_Y); Table[Couleur_taggee]=(Mouse_K==A_GAUCHE); Stencil_Tagger_couleur(Couleur_taggee,(Mouse_K==A_GAUCHE)?CM_Noir:CM_Clair); Afficher_curseur(); @@ -1901,7 +1901,7 @@ void Bouton_Degrades(void) 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); + Couleur_temporaire=(Bouton_clicke==1) ? Fenetre_Attribut2 : Lit_pixel(Mouse_X,Mouse_Y); if (!Ancien_Mouse_K) { @@ -4777,7 +4777,7 @@ void Bouton_Spray_Menu(void) Stencil_Tagger_couleur(Couleur_selectionnee,(Spray_Multi_flow[Couleur_selectionnee])?CM_Noir:CM_Clair); // Mettre la couleur sélectionnée à jour suivant le click - Couleur_selectionnee=Lit_pixel(Mouse_X,Mouse_Y); + Couleur_selectionnee=(Bouton_clicke==1) ? Fenetre_Attribut2 : Lit_pixel(Mouse_X,Mouse_Y); if (Mouse_K==2) Spray_Multi_flow[Couleur_selectionnee]=0; else diff --git a/divers.c b/divers.c index d7d364c1..d286915a 100644 --- a/divers.c +++ b/divers.c @@ -34,13 +34,6 @@ #include "clavier.h" #include "sdlscreen.h" -// Gestion du mode texte de départ (pour pouvoir y retourner en cas de problème -byte Recuperer_nb_lignes(void) -{ - puts("Recuperer_nb_lignes non implémenté!\n"); - return 0; -} - word Palette_Compter_nb_couleurs_utilisees(dword* Tableau) { int Nombre_De_Pixels=0; @@ -147,7 +140,7 @@ void Effacer_image_courante(byte Couleur) void Sensibilite_souris(__attribute__((unused)) word X,__attribute__((unused)) word Y) { - puts("Sensibilite_souris non implémenté!"); + } void Get_input(void) diff --git a/divers.h b/divers.h index f5f68bbf..be14dac7 100644 --- a/divers.h +++ b/divers.h @@ -24,7 +24,6 @@ void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,s void Permuter_dans_l_image_les_couleurs(byte Couleur_1,byte Couleur_2); void Remap_general_LOWLEVEL(byte * Table_conv,byte * Buffer,short Largeur,short Hauteur,short Largeur_buffer); void Scroll_picture(short Decalage_X,short Decalage_Y); -byte Recuperer_nb_lignes(void); void Set_mouse_video_mode_number(void); void Get_input(void); void Set_mouse_position(void); diff --git a/global.h b/global.h index c5b1c586..7a0aa028 100644 --- a/global.h +++ b/global.h @@ -357,6 +357,9 @@ GLOBAL struct Fenetre_Bouton_special * Pile_Fenetre_Liste_boutons_special[8]; GLOBAL int Pile_Fenetre_Attribut1[8]; #define Fenetre_Attribut1 Pile_Fenetre_Attribut1[Fenetre-1] +// Cette variable sert à stocker 2 informations: +// - Sur le click d'un scroller, la position active (0-n) +// - Sur le click d'une palette, le numero de couleur (0-255). GLOBAL int Pile_Fenetre_Attribut2[8]; #define Fenetre_Attribut2 Pile_Fenetre_Attribut2[Fenetre-1] diff --git a/graph.c b/graph.c index 406a9e3f..ab12b0a3 100644 --- a/graph.c +++ b/graph.c @@ -313,8 +313,8 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) word Fin_X,Fin_Y; word Largeur; word Hauteur; - word Coin_X=Fenetre_Pos_X+Fenetre_Largeur; // |_ Coin bas-droit - word Coin_Y=Fenetre_Pos_Y+Fenetre_Hauteur; // | de la fenêtre +1 + word Coin_X=Fenetre_Pos_X+Fenetre_Largeur*Menu_Facteur_X; // |_ Coin bas-droit + word Coin_Y=Fenetre_Pos_Y+Fenetre_Hauteur*Menu_Facteur_Y; // | de la fenêtre +1 if (Config.Couleurs_separees) @@ -390,10 +390,25 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) } } } + { + // Affichage du bloc directement dans le "buffer de fond" de la fenetre. + // Cela permet au bloc de couleur d'apparaitre si on déplace la fenetre. + short Pos_X; + short Pos_Y; + short Deb_X; // besoin d'une variable signée + short Deb_Y; // besoin d'une variable signée + // Attention aux unités + Deb_X = ((short)Debut_X - (short)Fenetre_Pos_X); + Deb_Y = ((short)Debut_Y - (short)Fenetre_Pos_Y); + + for (Pos_Y=Deb_Y;Pos_Y<(Deb_Y+Hauteur)&&Pos_Y=0&&Pos_Y>=0) + Pixel_fond(Pos_X,Pos_Y,Vraie_couleur); + } } } - UpdateRect((LARGEUR_MENU+1)*Menu_Facteur_X,Menu_Ordonnee,Largeur,Hauteur); -// UpdateRect(LARGEUR_MENU*Menu_Facteur_X,Menu_Ordonnee,Largeur_ecran-(LARGEUR_MENU*Menu_Facteur_X),(HAUTEUR_MENU-9)*Menu_Facteur_Y); + UpdateRect(LARGEUR_MENU*Menu_Facteur_X,Menu_Ordonnee_avant_fenetre,Largeur_ecran-(LARGEUR_MENU*Menu_Facteur_X),(HAUTEUR_MENU-9)*Menu_Facteur_Y); } @@ -429,17 +444,16 @@ void Remapper_ecran_apres_changement_couleurs_menu(void) Remap_screen(0, Menu_Ordonnee_avant_fenetre, Largeur_ecran, Hauteur_ecran-Menu_Ordonnee_avant_fenetre, Table_de_conversion); + // Remappage de la partie du fond de la fenetre qui cacherait le menu... + Remappe_fond_fenetres(Table_de_conversion, Menu_Ordonnee_avant_fenetre, Hauteur_ecran); + /* + Il faudrait peut-être remapper les pointillés délimitant l'image. + Mais ça va être chiant parce qu'ils peuvent être affichés en mode Loupe. + Mais de toutes façons, c'est franchement facultatif... + */ // On passe la table juste pour ne rafficher que les couleurs modifiées Afficher_palette_du_menu_en_evitant_la_fenetre(Table_de_conversion); } - /* - Il faudrait peut-être remapper les pointillés délimitant l'image. - Mais ça va être chiant parce qu'ils peuvent être affichés en mode Loupe. - Mais de toutes façons, c'est franchement facultatif... - */ - // Remappage de la partie du fond de la fenetre qui cacherait le menu... - if (Menu_visible_avant_fenetre) - Remappe_fond_fenetres(Table_de_conversion, Menu_Ordonnee_avant_fenetre, Hauteur_ecran); } } diff --git a/moteur.c b/moteur.c index 08cc98da..fc493248 100644 --- a/moteur.c +++ b/moteur.c @@ -151,6 +151,11 @@ void Restaure_fond(byte *Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur) Afficher_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,Buffer+((int)Indice*Largeur*Menu_Facteur_Y)); free(Buffer); } +// Ecrit un pixel dans un fond de fenêtre +void Pixel_fond(int Pos_X, int Pos_Y, byte Couleur) +{ + (Fond_fenetre[0][Pos_X+Pos_Y*Fenetre_Largeur*Menu_Facteur_X])=Couleur; +} @@ -1477,29 +1482,33 @@ short Attendre_click_dans_palette(struct Fenetre_Bouton_palette * Enreg) { 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)) - ) - ) - ) + if (Mouse_K==A_GAUCHE) { - 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 (Fenetre_click_dans_zone(Debut_X,Debut_Y,Fin_X,Fin_Y)) + { + Attendre_fin_de_click(); + Effacer_curseur(); + Couleur_choisie=(((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-(Enreg->Pos_X+2)) / 10 * 16 + + (((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-(Enreg->Pos_Y+3)) / 5; + Forme_curseur=FORME_CURSEUR_FLECHE; + Cacher_curseur=Ancien_Cacher_curseur; + Loupe_Mode=Ancien_Loupe_Mode; + Afficher_curseur(); + return Couleur_choisie; + } + if ((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==SDLK_ESCAPE)) @@ -1774,7 +1783,9 @@ short Fenetre_Numero_bouton_clicke(void) { 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 ) + // On stocke dans Attribut2 le numero de couleur cliqué + Fenetre_Attribut2 = (((Mouse_X-Fenetre_Pos_X)/Menu_Facteur_X)-(Temp2->Pos_X+2)) / 10 * 16 + + (((Mouse_Y-Fenetre_Pos_Y)/Menu_Facteur_Y)-(Temp2->Pos_Y+3)) / 5; return Temp2->Numero; } } diff --git a/moteur.h b/moteur.h index eb094c71..73e45538 100644 --- a/moteur.h +++ b/moteur.h @@ -61,9 +61,10 @@ void Fenetre_Definir_bouton_saisie(word Pos_X,word Pos_Y,word Largeur_en_caracte byte Fenetre_click_dans_zone(short Debut_X,short Debut_Y,short Fin_X,short Fin_Y); short Attendre_click_dans_palette(struct Fenetre_Bouton_palette * Enreg); -void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * Click); - +void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * Click); + short Fenetre_Bouton_clicke(void); int Numero_bouton_sous_souris(void); short Fenetre_Numero_bouton_clicke(void); void Remappe_fond_fenetres(byte * Table_de_conversion, int Min_Y, int Max_Y); +void Pixel_fond(int Pos_X, int Pos_Y, byte Couleur); diff --git a/palette.c b/palette.c index e84eaff1..a08dba0e 100644 --- a/palette.c +++ b/palette.c @@ -794,6 +794,7 @@ void Bouton_Palette(void) Block(Fenetre_Pos_X+(Menu_Facteur_X*206),Fenetre_Pos_Y+(Menu_Facteur_Y*141),Menu_Facteur_X*17,Menu_Facteur_Y,CM_Fonce); Block(Fenetre_Pos_X+(Menu_Facteur_X*233),Fenetre_Pos_Y+(Menu_Facteur_Y*141),Menu_Facteur_X*17,Menu_Facteur_Y,CM_Fonce); // Jauges de couleur + Palette_mode_RGB=1; Fenetre_Definir_bouton_scroller(182, 81, 88,Color_Count,1,Color_Max-Palette_de_travail[Fore_color].R*Color_Max/255);// 2 Jauge_rouge=Fenetre_Liste_boutons_scroller; Fenetre_Definir_bouton_scroller(209, 81, 88,Color_Count,1,Color_Max-Palette_de_travail[Fore_color].V*Color_Max/255);// 3 @@ -855,8 +856,8 @@ void Bouton_Palette(void) Fenetre_Definir_bouton_saisie(263,39,3); // 23 - Fenetre_Definir_bouton_normal(96,32,29,14,"HSL" ,1,1,SDLK_n); // 24 - Fenetre_Definir_bouton_normal(96,47,29,14,"Srt" ,1,1,SDLK_o); // 25 + Fenetre_Definir_bouton_normal(96,32,29,14,"HSL" ,1,1,SDLK_h); // 24 + Fenetre_Definir_bouton_normal(96,47,29,14,"Srt" ,1,1,SDLK_s); // 25 // Affichage du facteur de réduction de la palette Num2str(Reduce_Nb_couleurs,Chaine,3); Print_dans_fenetre(265,41,Chaine,CM_Noir,CM_Clair); @@ -890,7 +891,7 @@ void Bouton_Palette(void) 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); + Couleur_temporaire=(Bouton_clicke==1) ? Fenetre_Attribut2 : Lit_pixel(Mouse_X,Mouse_Y); if (Mouse_K==A_DROITE) { if (Back_color!=Couleur_temporaire) diff --git a/shade.c b/shade.c index cae1bc6c..d6b2c407 100644 --- a/shade.c +++ b/shade.c @@ -544,7 +544,7 @@ int Menu_Shade(void) 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); + Couleur_temporaire=(Bouton_clicke==1) ? Fenetre_Attribut2 : Lit_pixel(Mouse_X,Mouse_Y); if (!Ancien_Mouse_K) { // On vient de clicker diff --git a/tables_aide.h b/tables_aide.h index de12379f..dfb3b177 100644 --- a/tables_aide.h +++ b/tables_aide.h @@ -991,7 +991,18 @@ static const T_TABLEAIDE TableAideGradRect[] = AIDE_TITRE("GRAD RECTANGLE") AIDE_TEXTE("") AIDE_LIEN ("(Key:%s)",0x100+BOUTON_GRADRECT) - AIDE_TEXTE(" *** Not implemented yet ***") + AIDE_TEXTE("") + AIDE_TEXTE("Selects the rectangle with gradations as") + AIDE_TEXTE("the active drawing tool.") + AIDE_TEXTE("") + AIDE_TEXTE("Set a corner of a rectangle. Maintain the") + AIDE_TEXTE("click to move the opposite corner and") + AIDE_TEXTE("release the mouse button to set it") + AIDE_TEXTE("definitively.") + AIDE_TEXTE("Then click and hold the mouse in a point you") + AIDE_TEXTE("want to have the starting color, drag to a") + AIDE_TEXTE("point where you want the ending color, and") + AIDE_TEXTE("release the button.") }; static const T_TABLEAIDE TableAideGradMenu[] = { @@ -2126,6 +2137,12 @@ static const T_TABLEAIDE TableAidePalette[] = AIDE_TEXTE("copies of the current selection. (The") AIDE_TEXTE("keyboard shortcut for this button is ).") AIDE_TEXTE("") + AIDE_TEXTE("- HSL: Switches between RGB and HSL color") + AIDE_TEXTE("spaces. In HSL mode, the three sliders") + AIDE_TEXTE("allow you to set the Hue (tint), Saturation") + AIDE_TEXTE("(from grayscale to pure color) and") + AIDE_TEXTE("Lightness (from black to white).") + AIDE_TEXTE("") AIDE_TEXTE("- Reduce: Allows you to reduce the palette") AIDE_TEXTE("to the number of colors you want (and") AIDE_TEXTE("modifies the picture).")