diff --git a/src/buttons.c b/src/buttons.c index 4fd87b97..ba8eccda 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -928,7 +928,7 @@ void Button_Settings(void) {"Separate colors:",1,&(selected_config.Separate_colors),0,1,0,Lookup_YesNo}, {"Safety colors:",1,&(selected_config.Safety_colors),0,1,0,Lookup_YesNo}, {"Grid XOR color:",1,&(selected_config.Grid_XOR_color),0,255,3,NULL}, - {"",0,NULL,0,0,0,NULL}, + {"Sync views:",1,&(selected_config.Sync_views),0,1,0,Lookup_YesNo}, {"",0,NULL,0,0,0,NULL}, {" --- Input ---",0,NULL,0,0,0,NULL}, @@ -1513,6 +1513,9 @@ void Button_Page(void) Hide_cursor(); + if (Config.Sync_views) + Copy_view_to_spare(); + // On dégrossit le travail avec les infos des listes de pages Exchange_main_and_spare(); @@ -1626,29 +1629,8 @@ void Copy_image_only(void) Spare_image_width=Main_image_width; Spare_image_height=Main_image_height; */ - - // Copie des décalages de la fenêtre principale (non zoomée) de l'image - Spare_offset_X=Main_offset_X; - Spare_offset_Y=Main_offset_Y; - - // Copie du booléen "Mode loupe" de l'image - Spare_magnifier_mode=Main_magnifier_mode; - - // Copie du facteur de zoom du brouillon - Spare_magnifier_factor=Main_magnifier_factor; - - // Copie des dimensions de la fenêtre de zoom - Spare_magnifier_width=Main_magnifier_width; - Spare_magnifier_height=Main_magnifier_height; - - // Copie des décalages de la fenêtre de zoom - Spare_magnifier_offset_X=Main_magnifier_offset_X; - Spare_magnifier_offset_Y=Main_magnifier_offset_Y; - - // Copie des données du split du zoom - Spare_separator_position=Main_separator_position; - Spare_X_zoom=Main_X_zoom; - Spare_separator_proportion=Main_separator_proportion; + + Copy_view_to_spare(); // Update the visible buffer of the spare. // It's a bit complex because at the moment, to save memory, diff --git a/src/readini.c b/src/readini.c index b66f556d..57f3225d 100644 --- a/src/readini.c +++ b/src/readini.c @@ -902,7 +902,14 @@ int Load_INI(T_Config * conf) conf->Right_click_colorpick=(values[0]!=0); } + conf->Sync_views=1; + // Optional, synced view of main and spare (>=2.3) + if (!Load_INI_get_values (file,buffer,"Sync_views",1,values)) + { + conf->Sync_views=(values[0]!=0); + } + // Insert new values here fclose(file); diff --git a/src/saveini.c b/src/saveini.c index 0d5b6837..a3d9eb54 100644 --- a/src/saveini.c +++ b/src/saveini.c @@ -677,6 +677,12 @@ int Save_INI(T_Config * conf) if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Right_click_colorpick",1,values,1))) goto Erreur_Retour; + values[0]=(conf->Sync_views); + if ((return_code=Save_INI_set_values (Ancien_fichier,Nouveau_fichier,buffer,"Sync_views",1,values,1))) + goto Erreur_Retour; + + // Insert new values here + Save_INI_flush(Ancien_fichier,Nouveau_fichier,buffer); fclose(Nouveau_fichier); diff --git a/src/struct.h b/src/struct.h index d6b4bb73..c33c9f11 100644 --- a/src/struct.h +++ b/src/struct.h @@ -332,6 +332,7 @@ typedef struct word Double_key_speed; ///< Maximum delay for double-keypress, in ms. byte Grid_XOR_color; ///< XOR value to apply for grid color. byte Right_click_colorpick; ///< Boolean, true to enable a "tablet" mode, where RMB acts as instant colorpicker + byte Sync_views; ///< Boolean, true when the Main and Spare should share their viewport settings. } T_Config; // Structures utilisées pour les descriptions de pages et de liste de pages. diff --git a/src/windows.c b/src/windows.c index 7a0805f8..fdcfe0a8 100644 --- a/src/windows.c +++ b/src/windows.c @@ -1812,7 +1812,36 @@ void Change_magnifier_factor(byte factor_index, byte point_at_mouse) Compute_paintbrush_coordinates(); } +void Copy_view_to_spare(void) +{ + + // Don't do anything if the pictures have different dimensions + if (Main_image_width!=Spare_image_width || Main_image_height!=Spare_image_height) + return; + + // Copie des décalages de la fenêtre principale (non zoomée) de l'image + Spare_offset_X=Main_offset_X; + Spare_offset_Y=Main_offset_Y; + // Copie du booléen "Mode loupe" de l'image + Spare_magnifier_mode=Main_magnifier_mode; + + // Copie du facteur de zoom du brouillon + Spare_magnifier_factor=Main_magnifier_factor; + + // Copie des dimensions de la fenêtre de zoom + Spare_magnifier_width=Main_magnifier_width; + Spare_magnifier_height=Main_magnifier_height; + + // Copie des décalages de la fenêtre de zoom + Spare_magnifier_offset_X=Main_magnifier_offset_X; + Spare_magnifier_offset_Y=Main_magnifier_offset_Y; + + // Copie des données du split du zoom + Spare_separator_position=Main_separator_position; + Spare_X_zoom=Main_X_zoom; + Spare_separator_proportion=Main_separator_proportion; +} // -- Afficher la barre de séparation entre les parties zoomées ou non en // mode Loupe -- diff --git a/src/windows.h b/src/windows.h index d9abb3b2..b5484247 100644 --- a/src/windows.h +++ b/src/windows.h @@ -109,4 +109,7 @@ void Change_magnifier_factor(byte factor_index, byte point_at_mouse); /// Width of one layer button, in pixels before scaling extern word Layer_button_width; +/// Copy viewport settings and offsets from the Main to the Spare. +void Copy_view_to_spare(void); + #endif