diff --git a/buttons.c b/buttons.c index 43a77fe6..08bfb559 100644 --- a/buttons.c +++ b/buttons.c @@ -402,26 +402,13 @@ void Button_Hide_menu(void) void Set_bar_visibility(word bar, byte visible) -{ - int i; - int offset; - +{ if (!visible && Menu_bars[bar].Visible) { // Hide it Menu_bars[bar].Visible=0; - // Recompute all offsets - offset=0; - for (i = MENUBAR_COUNT-1; i >=0; i--) - { - Menu_bars[i].Top = offset; - if(Menu_bars[i].Visible) - offset += Menu_bars[i].Height; - } - // Update global menu coordinates - Menu_Y += Menu_bars[bar].Height * Menu_factor_Y; - Menu_height -= Menu_bars[bar].Height; + Compute_menu_offsets(); if (Main_magnifier_mode) { @@ -465,18 +452,8 @@ void Set_bar_visibility(word bar, byte visible) { // Show it Menu_bars[bar].Visible = 1; - // Recompute all offsets - offset=0; - for (i = MENUBAR_COUNT-1; i >=0; i--) - { - Menu_bars[i].Top = offset; - if(Menu_bars[i].Visible) - offset += Menu_bars[i].Height; - } - // Update global menu coordinates - Menu_Y -= Menu_bars[bar].Height * Menu_factor_Y; - Menu_height += Menu_bars[bar].Height; - + + Compute_menu_offsets(); Compute_magnifier_data(); if (Main_magnifier_mode) Position_screen_according_to_zoom(); diff --git a/gfx2def.ini b/gfx2def.ini index 64d85ac0..97b57000 100644 --- a/gfx2def.ini +++ b/gfx2def.ini @@ -345,6 +345,15 @@ ; Valid values are 1 to 255. Grid_XOR_color = 255; (Default 255) - Pixel_ratio = 1; + ; This records the last pixel ratio used, to restore it on start. + ; Valid values are from 0 to 7 for: Simple, Wide, Tall, Double, + ; Triple, Wide2, Tall2, Quadruple. + ; + Pixel_ratio = 1; (Default 0) + + ; This records the visibility of toolbars, to restore them on start. + ; It's a bitfield, where 1=Status, 2=Layers, 4=Tools + ; + Menubars_visible = 7; (Default 7) ; end of configuration diff --git a/global.h b/global.h index bcceeb36..086e227d 100644 --- a/global.h +++ b/global.h @@ -492,8 +492,8 @@ GFX2_GLOBAL word Menu_palette_cell_width; GFX2_GLOBAL T_Menu_Bar Menu_bars[MENUBAR_COUNT] #ifdef GLOBAL_VARIABLES = -{{MENU_WIDTH, 9, 1, 35, NULL, 20, BUTTON_HIDE }, // Status - {MENU_WIDTH, 10, 0, 35, NULL, 144, BUTTON_LAYER_SELECT }, // Layers +{{MENU_WIDTH, 9, 1, 45, NULL, 20, BUTTON_HIDE }, // Status + {MENU_WIDTH, 10, 1, 35, NULL, 144, BUTTON_LAYER_SELECT }, // Layers {MENU_WIDTH, 35, 1, 0, NULL, 254, BUTTON_CHOOSE_COL }} // Main #endif ; diff --git a/init.c b/init.c index d07f2928..180f538c 100644 --- a/init.c +++ b/init.c @@ -2657,3 +2657,27 @@ void Set_current_skin(const char *skinfile, T_Gui_skin *gfx) Menu_bars[MENUBAR_LAYERS].Skin = (byte*)&(gfx->Layerbar_block); Menu_bars[MENUBAR_STATUS].Skin = (byte*)&(gfx->Statusbar_block); } + +/// +/// Based on which toolbars are visible, updates their offsets and +/// computes ::Menu_height and ::Menu_Y +void Compute_menu_offsets(void) +{ + int i; + int offset; + + // Recompute all offsets + offset=0; + Menu_height=0; + for (i = MENUBAR_COUNT-1; i >=0; i--) + { + Menu_bars[i].Top = offset; + if(Menu_bars[i].Visible) + { + offset += Menu_bars[i].Height; + Menu_height += Menu_bars[i].Height; + } + } + // Update global menu coordinates + Menu_Y = Screen_height - Menu_height * Menu_factor_Y; +} \ No newline at end of file diff --git a/init.h b/init.h index 44152a19..7d479fb7 100644 --- a/init.h +++ b/init.h @@ -44,3 +44,8 @@ extern char Gui_loading_error_message[512]; /// If an error is encountered, it frees what needs it, prints an error message /// in ::Gui_loading_error_message, and returns NULL. byte * Load_font(const char * font_name); + +/// +/// Based on which toolbars are visible, updates their offsets and +/// computes ::Menu_height and ::Menu_Y +void Compute_menu_offsets(void); diff --git a/main.c b/main.c index 08a0fcff..3a7b28a5 100644 --- a/main.c +++ b/main.c @@ -553,7 +553,6 @@ int Init_program(int argc,char * argv[]) Quitting=0; // Données sur l'état du menu: Menu_is_visible=1; - Menu_height=MENU_HEIGHT; // Données sur les couleurs et la palette: First_color_in_palette=0; // Données sur le curseur: @@ -642,6 +641,8 @@ int Init_program(int argc,char * argv[]) if (temp) Error(temp); + Compute_menu_offsets(); + file_in_command_line=Analyze_command_line(argc, argv, main_filename, main_directory, spare_filename, spare_directory); Current_help_section=0; diff --git a/readini.c b/readini.c index b086c9b5..642d0b86 100644 --- a/readini.c +++ b/readini.c @@ -877,6 +877,17 @@ int Load_INI(T_Config * conf) break; } } + + // Optional, Menu bars visibility (> 2.1) + if (!Load_INI_get_values (file, buffer,"Menubars_visible",1,values)) + { + int index; + for (index=MENUBAR_STATUS+1; index