From db50b4ebdc2b29e51f0aeee8c29558e25103088b Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Mon, 27 Feb 2012 23:19:23 +0000 Subject: [PATCH] More unification of layers and anim version: toolbars work. You can switch toolbars by right-clicking the icon from status bar: it proposes 'Anim' only while the current image has 1 layer (see Button_toggle_toolbar()). The animation-specific stuff (rendering...) isn't activated yet, see all the NOLAYERS places remaining. Also will need a trick for keyboard shortcuts to work on multiple buttons, and extra code on swap-to-spare, undo, redo, load etc. to sync toolbars with Image_type. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1909 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- src/buttons.c | 53 ++++++++++---- src/const.h | 20 ++++-- src/global.h | 14 ---- src/helpfile.h | 27 +++---- src/hotkeys.c | 2 +- src/init.c | 38 +++++----- src/layers.c | 10 --- src/loadsave.c | 2 - src/pages.h | 2 - src/readini.c | 15 ++-- src/saveini.c | 15 ++-- src/struct.h | 18 ----- src/windows.c | 188 ++++++++++++++++++++++++++----------------------- src/windows.h | 21 ++++++ 14 files changed, 223 insertions(+), 202 deletions(-) diff --git a/src/buttons.c b/src/buttons.c index dee3eb25..f69b3d27 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -510,13 +510,14 @@ void Button_Toggle_toolbar(void) { T_Dropdown_button dropdown; T_Dropdown_choice *item; - static char menu_name[2][9]= { - " Tools", - " Layers" - }; + static char menu_name_tools[9] = " Tools"; + static char menu_name_layers[9]= " Layers"; + static char menu_name_anim[9] = " Anim"; - menu_name[0][0] = Menu_bars[MENUBAR_TOOLS ].Visible ? 22 : ' '; - menu_name[1][0] = Menu_bars[MENUBAR_LAYERS].Visible ? 22 : ' '; + + menu_name_tools[0] = Menu_bars[MENUBAR_TOOLS ].Visible ? 22 : ' '; + menu_name_layers[0] = Menu_bars[MENUBAR_LAYERS].Visible ? 22 : ' '; + menu_name_anim[0] = Menu_bars[MENUBAR_ANIMATION].Visible ? 22 : ' '; Hide_cursor(); @@ -527,8 +528,16 @@ void Button_Toggle_toolbar(void) dropdown.First_item =NULL; dropdown.Bottom_up =1; - Window_dropdown_add_item(&dropdown, 0, menu_name[0]); - Window_dropdown_add_item(&dropdown, 1, menu_name[1]); + Window_dropdown_add_item(&dropdown, 0, menu_name_tools); + + if (Main_backups->Pages->Image_mode == IMAGE_MODE_LAYERED || + Main_backups->Pages->Image_mode == IMAGE_MODE_MODE5 || + (Main_backups->Pages->Image_mode == IMAGE_MODE_ANIMATION && Main_backups->Pages->Nb_layers==1)) + Window_dropdown_add_item(&dropdown, 1, menu_name_layers); + + if (Main_backups->Pages->Image_mode == IMAGE_MODE_ANIMATION || + (Main_backups->Pages->Image_mode == IMAGE_MODE_LAYERED && Main_backups->Pages->Nb_layers==1)) + Window_dropdown_add_item(&dropdown, 2, menu_name_anim); item=Dropdown_activate(&dropdown,0,Menu_Y+Menu_bars[MENUBAR_STATUS].Top*Menu_factor_Y); @@ -536,11 +545,33 @@ void Button_Toggle_toolbar(void) { switch (item->Number) { - case 0: + case 0: // tools Set_bar_visibility(MENUBAR_TOOLS, !Menu_bars[MENUBAR_TOOLS].Visible); break; - case 1: + case 1: // anim + if (Menu_bars[MENUBAR_ANIMATION].Visible && !Menu_bars[MENUBAR_LAYERS].Visible) + Set_bar_visibility(MENUBAR_ANIMATION, 0); Set_bar_visibility(MENUBAR_LAYERS, !Menu_bars[MENUBAR_LAYERS].Visible); + + if (Main_backups->Pages->Image_mode == IMAGE_MODE_LAYERED) + { + // Exceptionally, this doesn't require a backup because a single-frame + // animation is the same as a single-layer image. + Main_backups->Pages->Image_mode = IMAGE_MODE_ANIMATION; + } + + break; + case 2: // layers + if (Menu_bars[MENUBAR_LAYERS].Visible && !Menu_bars[MENUBAR_ANIMATION].Visible) + Set_bar_visibility(MENUBAR_LAYERS, 0); + Set_bar_visibility(MENUBAR_ANIMATION, !Menu_bars[MENUBAR_ANIMATION].Visible); + + if (Main_backups->Pages->Image_mode == IMAGE_MODE_ANIMATION) + { + // Exceptionally, this doesn't require a backup because a single-layer + // image is the same as a single-frame animation. + Main_backups->Pages->Image_mode = IMAGE_MODE_LAYERED; + } break; } } @@ -1544,11 +1575,9 @@ void Button_Page(void) Swap_tilemap(); // On fait le reste du travail "à la main": -#ifndef NOLAYERS SWAP_PBYTES(Main_visible_image.Image,Spare_visible_image.Image) SWAP_WORDS (Main_visible_image.Width,Spare_visible_image.Width) SWAP_WORDS (Main_visible_image.Height,Spare_visible_image.Height) -#endif SWAP_SHORTS(Main_offset_X,Spare_offset_X) SWAP_SHORTS(Main_offset_Y,Spare_offset_Y) SWAP_SHORTS(Main_separator_position,Spare_separator_position) diff --git a/src/const.h b/src/const.h index 9a68caf1..77272d9c 100644 --- a/src/const.h +++ b/src/const.h @@ -303,6 +303,20 @@ enum BUTTON_NUMBERS // Status bar BUTTON_HIDE = 0, + // Anim bar + BUTTON_LAYER_MENU2, + BUTTON_ANIM_TIME, + BUTTON_ANIM_FIRST_FRAME, + BUTTON_ANIM_PREV_FRAME, + BUTTON_ANIM_NEXT_FRAME, + BUTTON_ANIM_LAST_FRAME, + BUTTON_ANIM_ADD_FRAME, + BUTTON_ANIM_REMOVE_FRAME, + BUTTON_ANIM_UP_FRAME, + BUTTON_ANIM_DOWN_FRAME, + + BUTTON_ANIM_PLAY, // unused at this time + // Layer bar BUTTON_LAYER_MENU, BUTTON_LAYER_COLOR, @@ -311,12 +325,6 @@ enum BUTTON_NUMBERS BUTTON_LAYER_REMOVE, BUTTON_LAYER_UP, BUTTON_LAYER_DOWN, - BUTTON_ANIM_TIME, - BUTTON_ANIM_FIRST_FRAME, - BUTTON_ANIM_PREV_FRAME, - BUTTON_ANIM_NEXT_FRAME, - BUTTON_ANIM_LAST_FRAME, - BUTTON_ANIM_PLAY, BUTTON_LAYER_SELECT, // Main menu diff --git a/src/global.h b/src/global.h index 65afffb8..7cbaeddb 100644 --- a/src/global.h +++ b/src/global.h @@ -491,20 +491,6 @@ GFX2_GLOBAL byte Menu_factor_Y; /// Size of a color cell in the menu's palette. GFX2_GLOBAL word Menu_palette_cell_width; -GFX2_GLOBAL T_Menu_Bar Menu_bars[MENUBAR_COUNT] -#ifdef GLOBAL_VARIABLES - = -{{MENU_WIDTH, 9, 1, 45, {NULL,NULL,NULL}, 20, BUTTON_HIDE }, // Status -#ifdef NOLAYERS - {MENU_WIDTH, 14, 1, 35, {NULL,NULL,NULL}, 236, BUTTON_LAYER_SELECT }, // Animation -#else - {MENU_WIDTH, 10, 1, 35, {NULL,NULL,NULL}, 144, BUTTON_LAYER_SELECT }, // Layers -#endif - {MENU_WIDTH, 35, 1, 0, {NULL,NULL,NULL}, 254, BUTTON_CHOOSE_COL }} // Main -#endif - ; - - // -- Window data /// Number of stacked windows currently displayed. 0 when no window is present. diff --git a/src/helpfile.h b/src/helpfile.h index a367faec..5cd5adbb 100644 --- a/src/helpfile.h +++ b/src/helpfile.h @@ -314,13 +314,10 @@ static const T_Help_table helptable_help[] = HELP_LINK (" Menu : %s", 0x100+BUTTON_LAYER_MENU) HELP_LINK (" Add new : %s", 0x100+BUTTON_LAYER_ADD) HELP_LINK (" Delete : %s", 0x100+BUTTON_LAYER_REMOVE) -#ifndef NOLAYERS HELP_LINK (" Merge : %s", 0x100+BUTTON_LAYER_MERGE) -#endif HELP_LINK (" Move up : %s", 0x100+BUTTON_LAYER_UP) HELP_LINK (" Move down : %s", 0x100+BUTTON_LAYER_DOWN) //HELP_LINK (" Set transp: %s", 0x100+BUTTON_LAYER_COLOR) -#ifndef NOLAYERS HELP_TEXT (" Select :") HELP_LINK (" 1 : %s", SPECIAL_LAYER1_SELECT) HELP_LINK (" 2 : %s", SPECIAL_LAYER2_SELECT) @@ -339,13 +336,11 @@ static const T_Help_table helptable_help[] = HELP_LINK (" 6 : %s", SPECIAL_LAYER6_TOGGLE) HELP_LINK (" 7 : %s", SPECIAL_LAYER7_TOGGLE) HELP_LINK (" 8 : %s", SPECIAL_LAYER8_TOGGLE) -#else HELP_LINK (" Go to first: %s", 0x100+BUTTON_ANIM_FIRST_FRAME) HELP_LINK (" Go to previous: %s", 0x100+BUTTON_ANIM_PREV_FRAME) HELP_LINK (" Go to next: %s", 0x100+BUTTON_ANIM_NEXT_FRAME) HELP_LINK (" Go to last: %s", 0x100+BUTTON_ANIM_LAST_FRAME) HELP_LINK (" Set duration: %s", 0x100+BUTTON_ANIM_TIME) -#endif HELP_TEXT ("") HELP_LINK (" Format check : %s", SPECIAL_FORMAT_CHECKER) HELP_LINK (" Format check menu: %s", SPECIAL_FORMAT_CHECKER_MENU) @@ -3056,6 +3051,19 @@ T_Help_section Help_section[] = // Attention, keep the same order as BUTTON_NUMBERS: HELP_TABLE_DECLARATION(helptable_hide) + + HELP_TABLE_DECLARATION(helptable_layermenu) + HELP_TABLE_DECLARATION(helptable_animtime) + HELP_TABLE_DECLARATION(helptable_firstframe) + HELP_TABLE_DECLARATION(helptable_prevframe) + HELP_TABLE_DECLARATION(helptable_nextframe) + HELP_TABLE_DECLARATION(helptable_lastframe) + HELP_TABLE_DECLARATION(helptable_layeradd) + HELP_TABLE_DECLARATION(helptable_layerdel) + HELP_TABLE_DECLARATION(helptable_layerup) + HELP_TABLE_DECLARATION(helptable_layerdown) + HELP_TABLE_DECLARATION(helptable_animtime) // reserved for future button + HELP_TABLE_DECLARATION(helptable_layermenu) HELP_TABLE_DECLARATION(helptable_layertrans) HELP_TABLE_DECLARATION(helptable_layermerge) @@ -3063,15 +3071,8 @@ T_Help_section Help_section[] = HELP_TABLE_DECLARATION(helptable_layerdel) HELP_TABLE_DECLARATION(helptable_layerup) HELP_TABLE_DECLARATION(helptable_layerdown) - // Anim-specific - HELP_TABLE_DECLARATION(helptable_animtime) - HELP_TABLE_DECLARATION(helptable_firstframe) - HELP_TABLE_DECLARATION(helptable_prevframe) - HELP_TABLE_DECLARATION(helptable_nextframe) - HELP_TABLE_DECLARATION(helptable_lastframe) - HELP_TABLE_DECLARATION(helptable_animtime) // reserved for future button - // end of anim-specific HELP_TABLE_DECLARATION(helptable_layerselect) + HELP_TABLE_DECLARATION(helptable_paintbrush) HELP_TABLE_DECLARATION(helptable_adjust) HELP_TABLE_DECLARATION(helptable_draw) diff --git a/src/hotkeys.c b/src/hotkeys.c index 2b36a6f9..4ecd9b58 100644 --- a/src/hotkeys.c +++ b/src/hotkeys.c @@ -1940,6 +1940,6 @@ word Ordering[NB_SHORTCUTS]= 0x100+BUTTON_ANIM_LAST_FRAME, 0x100+BUTTON_ANIM_PREV_FRAME, 0x100+BUTTON_ANIM_NEXT_FRAME, - 0x100+BUTTON_ANIM_PLAY, + 0x100+BUTTON_ANIM_PLAY, // Unused at this time SPECIAL_HOLD_PAN, }; diff --git a/src/init.c b/src/init.c index 8f9d018c..d68af14d 100644 --- a/src/init.c +++ b/src/init.c @@ -376,14 +376,14 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx) return 1; if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Layerbar_block[0], 144, 10,"layer bar",0)) return 1; - cursor_y+= 10; + cursor_y+= Menu_bars[MENUBAR_LAYERS].Height; // Animbar if (GUI_seek_down(gui, &cursor_x, &cursor_y, neutral_color, "anim bar")) return 1; if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Animbar_block[0], 236, 14,"anim bar",0)) return 1; - cursor_y+= 14; + cursor_y+= Menu_bars[MENUBAR_ANIMATION].Height; // Status bar if (GUI_seek_down(gui, &cursor_x, &cursor_y, neutral_color, "status bar")) @@ -404,14 +404,14 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx) return 1; if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Layerbar_block[1], 144, 10,"selected layer bar",0)) return 1; - cursor_y+= 10; + cursor_y+= Menu_bars[MENUBAR_LAYERS].Height; // Animbar (selected) if (GUI_seek_down(gui, &cursor_x, &cursor_y, neutral_color, "selected anim bar")) return 1; if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Animbar_block[1], 236, 14,"selected anim bar",0)) return 1; - cursor_y+= 14; + cursor_y+= Menu_bars[MENUBAR_ANIMATION].Height; // Status bar (selected) if (GUI_seek_down(gui, &cursor_x, &cursor_y, neutral_color, "selected status bar")) @@ -1205,7 +1205,7 @@ void Init_buttons(void) FAMILY_INSTANT); // Layer bar -#ifndef NOLAYERS + Init_button(BUTTON_LAYER_MENU, "Layers manager ", 0,0, @@ -1278,9 +1278,10 @@ void Init_buttons(void) 0,0, Do_nothing, FAMILY_INSTANT); -#else + // Anim bar - Init_button(BUTTON_LAYER_MENU, + + Init_button(BUTTON_LAYER_MENU2, "Layers manager ", 0,0, 44,13, @@ -1334,8 +1335,8 @@ void Init_buttons(void) 0,0, Do_nothing, FAMILY_INSTANT); - Init_button(BUTTON_LAYER_ADD, - "Add layer ", + Init_button(BUTTON_ANIM_ADD_FRAME, + "Add frame ", 177,0, 13,13, BUTTON_SHAPE_RECTANGLE, @@ -1343,8 +1344,8 @@ void Init_buttons(void) 0,0, Do_nothing, FAMILY_INSTANT); - Init_button(BUTTON_LAYER_REMOVE, - "Drop layer ", + Init_button(BUTTON_ANIM_REMOVE_FRAME, + "Drop frame ", 191,0, 13,13, BUTTON_SHAPE_RECTANGLE, @@ -1352,8 +1353,8 @@ void Init_buttons(void) 0,0, Do_nothing, FAMILY_INSTANT); - Init_button(BUTTON_LAYER_DOWN, - "Lower layer ", + Init_button(BUTTON_ANIM_DOWN_FRAME, + "Move frame back ", 205,0, 13,13, BUTTON_SHAPE_RECTANGLE, @@ -1361,8 +1362,8 @@ void Init_buttons(void) 0,0, Do_nothing, FAMILY_INSTANT); - Init_button(BUTTON_LAYER_UP, - "Raise layer ", + Init_button(BUTTON_ANIM_UP_FRAME, + "Move frame forwards ", 219,0, 13,13, BUTTON_SHAPE_RECTANGLE, @@ -1370,7 +1371,7 @@ void Init_buttons(void) 0,0, Do_nothing, FAMILY_INSTANT); -#endif + // Status bar Init_button(BUTTON_HIDE, "Hide toolbars / Select ", @@ -2868,11 +2869,8 @@ void Set_current_skin(const char *skinfile, T_Gui_skin *gfx) for (i=0; i<3; i++) { Menu_bars[MENUBAR_TOOLS ].Skin[i] = (byte*)&(gfx->Menu_block[i]); -#ifndef NOLAYERS Menu_bars[MENUBAR_LAYERS].Skin[i] = (byte*)&(gfx->Layerbar_block[i]); -#else - Menu_bars[MENUBAR_LAYERS].Skin[i] = (byte*)&(gfx->Animbar_block[i]); -#endif + Menu_bars[MENUBAR_ANIMATION].Skin[i] = (byte*)&(gfx->Animbar_block[i]); Menu_bars[MENUBAR_STATUS].Skin[i] = (byte*)&(gfx->Statusbar_block[i]); } } diff --git a/src/layers.c b/src/layers.c index 430ff88d..a97ab14d 100644 --- a/src/layers.c +++ b/src/layers.c @@ -575,16 +575,6 @@ void Button_Anim_last_frame(void) Display_cursor(); } -void Button_Anim_play(void) -{ - Hide_cursor(); - - // - - Unselect_button(BUTTON_ANIM_PLAY); - Display_cursor(); -} - void Button_Anim_continuous_next(void) { Uint32 time_start; diff --git a/src/loadsave.c b/src/loadsave.c index a2025417..38dbcb43 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -1154,12 +1154,10 @@ void Emergency_backup(const char *fname, byte *source, int width, int height, T_ void Image_emergency_backup() { -#ifndef NOLAYERS if (Main_backups && Main_backups->Pages && Main_backups->Pages->Nb_layers == 1) Emergency_backup(SAFETYBACKUP_PREFIX_A "999999" BACKUP_FILE_EXTENSION,Main_screen, Main_image_width, Main_image_height, &Main_palette); if (Spare_backups && Spare_backups->Pages && Spare_backups->Pages->Nb_layers == 1) Emergency_backup(SAFETYBACKUP_PREFIX_B "999999" BACKUP_FILE_EXTENSION,Spare_visible_image.Image, Spare_image_width, Spare_image_height, &Spare_palette); -#endif } T_Format * Get_fileformat(byte format) diff --git a/src/pages.h b/src/pages.h index 5efacf03..684f970b 100644 --- a/src/pages.h +++ b/src/pages.h @@ -40,14 +40,12 @@ extern byte * FX_feedback_screen; /////////////////////////// BACKUP /////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// -#ifndef NOLAYERS /// The pixels of visible layers, flattened copy. extern T_Bitmap Main_visible_image; /// The pixels of visible layers, flattened copy, used for no-feedback effects. extern T_Bitmap Main_visible_image_backup; /// The index of visible pixels from ::Visible image. Points to the right layer. extern T_Bitmap Main_visible_image_depth_buffer; -#endif /// The pixels of visible layers for the spare page, flattened copy. extern T_Bitmap Spare_visible_image; diff --git a/src/readini.c b/src/readini.c index 9dd526fa..fb175b5e 100644 --- a/src/readini.c +++ b/src/readini.c @@ -36,6 +36,8 @@ #include "setup.h" #include "realpath.h" #include "io.h" +#include "windows.h" + void Load_INI_clear_string(char * str, byte keep_comments) { @@ -898,12 +900,13 @@ int Load_INI(T_Config * conf) // Optional, Menu bars visibility (> 2.1) if (!Load_INI_get_values (file, buffer,"Menubars_visible",1,values)) { - int index; - for (index=MENUBAR_STATUS+1; indexRight_click_colorpick=0; diff --git a/src/saveini.c b/src/saveini.c index 48f42242..cb4f0cc4 100644 --- a/src/saveini.c +++ b/src/saveini.c @@ -32,6 +32,7 @@ #include "misc.h" #include "saveini.h" #include "setup.h" +#include "windows.h" int Save_INI_reach_group(FILE * old_file,FILE * new_file,char * buffer,char * group) { @@ -665,15 +666,13 @@ int Save_INI(T_Config * conf) } values[0]=0; - for (index=0; index