diff --git a/gfx2def.ini b/gfx2def.ini index 9f43a596..0114c997 100644 --- a/gfx2def.ini +++ b/gfx2def.ini @@ -64,8 +64,6 @@ ; 3: Thin (solid) | 3: Fin (solide) Cursor_aspect = 1 ; (default 1) - - [MENU] # [MENU] ; Colors of the menus (the black | Couleurs des menus (la couleur noire @@ -290,3 +288,11 @@ ; Window dimensions. The program | Dimensions de la fenêtre en mode ; remembers the last window size. | fenêtré. Default_window_size = 640,480 ; (default '640,480') + + ; This setting allows you merge successive mouse movements into a single + ; mouse movement. Ideally you should leave it at zero, but if you have an + ; extremely fast mouse and you see the mouse cursor lagging WHEN YOU'RE NOT + ; DRAWING, you may want to set it to 1, 2 or more, so that GrafX2 skips small + ; steps. A very high value (100) guarantees that Grafx2 merges all the mouse + ; steps into a single one. + Merge_movement = 100 ; (default 100) diff --git a/global.h b/global.h index 0cce4ff7..b1ab8c2c 100644 --- a/global.h +++ b/global.h @@ -61,6 +61,7 @@ GFX2_GLOBAL struct S_Config byte Indice_Sensibilite_souris_Y; byte Mouse_Facteur_de_correction_X; byte Mouse_Facteur_de_correction_Y; + byte Mouse_Merge_movement; byte Valeur_tempo_jauge_gauche; byte Valeur_tempo_jauge_droite; long Chrono_delay; diff --git a/input.c b/input.c index dd645686..ac46e776 100644 --- a/input.c +++ b/input.c @@ -44,6 +44,7 @@ byte Directional_up_left; long Directional_delay; long Directional_last_move; long Directional_step; +short Mouse_count; // Number of mouse movements received in the current Get_input() // TODO: move to config short Button_shift=-1; // Button number that serves as a "shift" modifier @@ -83,6 +84,8 @@ int Est_Raccourci(word Touche, word Fonction) // Called each time there is a cursor move, either triggered by mouse or keyboard shortcuts int Move_cursor_with_constraints() { + int Retour=0; + //Gestion "avancée" du curseur: interdire la descente du curseur dans le //menu lorsqu'on est en train de travailler dans l'image if (Operation_Taille_pile != 0) @@ -125,24 +128,27 @@ int Move_cursor_with_constraints() ); } } - - if ( - (INPUT_Nouveau_Mouse_X != Mouse_X) || - (INPUT_Nouveau_Mouse_Y != Mouse_Y) || - (INPUT_Nouveau_Mouse_K != Mouse_K) - ) + if ((INPUT_Nouveau_Mouse_X != Mouse_X) || + (INPUT_Nouveau_Mouse_Y == Mouse_Y)) { - Forcer_affichage_curseur=0; - Effacer_curseur(); // On efface le curseur AVANT de le déplacer... - Mouse_X=INPUT_Nouveau_Mouse_X; - Mouse_Y=INPUT_Nouveau_Mouse_Y; - Mouse_K=INPUT_Nouveau_Mouse_K; - Calculer_coordonnees_pinceau(); - Afficher_curseur(); - return 1; + Forcer_affichage_curseur=0; + Effacer_curseur(); // On efface le curseur AVANT de le déplacer... + Mouse_X=INPUT_Nouveau_Mouse_X; + Mouse_Y=INPUT_Nouveau_Mouse_Y; + Calculer_coordonnees_pinceau(); + Afficher_curseur(); + + Mouse_count++; + if (Mouse_count>Config.Mouse_Merge_movement) + Retour=1; } - else - return 0; + if ((INPUT_Nouveau_Mouse_K != Mouse_K)) + { + Mouse_K=INPUT_Nouveau_Mouse_K; + Retour=1; + } + + return Retour; } // Fonction qui filtre les evenements génériques. @@ -582,6 +588,7 @@ int Get_input(void) Touche_ANSI = 0; Touche = 0; + Mouse_count=0; // Process as much events as possible without redrawing the screen. // This mostly allows us to merge mouse events for people with an high diff --git a/readini.c b/readini.c index 7f13e457..9490a22c 100644 --- a/readini.c +++ b/readini.c @@ -456,7 +456,6 @@ int Charger_INI(struct S_Config * Conf) goto Erreur_ERREUR_INI_CORROMPU; Conf->Curseur=Valeurs[0]-1; - if ((Retour=Charger_INI_Reach_group(Fichier,Buffer,"[MENU]"))) goto Erreur_Retour; @@ -696,6 +695,15 @@ int Charger_INI(struct S_Config * Conf) if ((Valeurs[1]>=200)) Mode_video[0].Hauteur = Valeurs[1]; } + + Conf->Mouse_Merge_movement=100; + // Optionnel, paramètre pour grouper les mouvements souris (>98.0%) + if (!Charger_INI_Get_values (Fichier,Buffer,"Merge_movement",1,Valeurs)) + { + if ((Valeurs[0]<0) || (Valeurs[0]>1000)) + goto Erreur_ERREUR_INI_CORROMPU; + Conf->Mouse_Merge_movement=Valeurs[0]; + } fclose(Fichier); diff --git a/saveini.c b/saveini.c index 32b081c3..e582aa64 100644 --- a/saveini.c +++ b/saveini.c @@ -453,7 +453,6 @@ int Sauver_INI(struct S_Config * Conf) if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Cursor_aspect",1,Valeurs,0))) goto Erreur_Retour; - if ((Retour=Sauver_INI_Reach_group(Ancien_fichier,Nouveau_fichier,Buffer,"[MENU]"))) goto Erreur_Retour; @@ -605,6 +604,10 @@ int Sauver_INI(struct S_Config * Conf) if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Default_window_size",2,Valeurs,0))) goto Erreur_Retour; + Valeurs[0]=(Conf->Mouse_Merge_movement); + if ((Retour=Sauver_INI_Set_values (Ancien_fichier,Nouveau_fichier,Buffer,"Merge_movement",1,Valeurs,0))) + goto Erreur_Retour; + Sauver_INI_Flush(Ancien_fichier,Nouveau_fichier,Buffer); fclose(Nouveau_fichier);