diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 4483d23dea1..4d63e14ac87 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -119,7 +119,7 @@ typedef struct SpaceButs { short texnr; char texfrom, showgroup; - + short rectx, recty; /* preview render */ unsigned int *rect; short cury, modeltype; @@ -127,7 +127,8 @@ typedef struct SpaceButs { short scriptblock; short scaflag; short re_align, pad1; - int pad2; + + int oldkeypress; /* for keeping track of the sub tab key cycling */ char texact, tab[7]; /* storing tabs for each context */ diff --git a/source/blender/src/header_buttonswin.c b/source/blender/src/header_buttonswin.c index 48d814e3c91..7b992263bb7 100644 --- a/source/blender/src/header_buttonswin.c +++ b/source/blender/src/header_buttonswin.c @@ -132,6 +132,12 @@ void do_buts_buttons(short event) break; case B_BUTSPREVIEW: BIF_preview_changed(G.buts); + G.buts->oldkeypress = 0; + scrarea_queue_headredraw(curarea); + scrarea_queue_winredraw(curarea); + break; + case B_CONTEXT_SWITCH: + G.buts->oldkeypress = 0; scrarea_queue_headredraw(curarea); scrarea_queue_winredraw(curarea); break; @@ -599,12 +605,12 @@ void buts_buttons(void) // xco+=XIC; uiBlockBeginAlign(block); - uiDefIconButS(block, ROW, B_REDR, ICON_GAME, xco, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_LOGIC, 0, 0, "Logic (F4) "); - uiDefIconButS(block, ROW, B_REDR, ICON_SCRIPT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_SCRIPT, 0, 0, "Script "); - uiDefIconButS(block, ROW, B_REDR, ICON_MATERIAL_DEHLT,xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_SHADING, 0, 0, "Shading (F5) "); - uiDefIconButS(block, ROW, B_REDR, ICON_OBJECT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_OBJECT, 0, 0, "Object (F7) "); - uiDefIconButS(block, ROW, B_REDR, ICON_EDIT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_EDITING, 0, 0, "Editing (F9) "); - uiDefIconButS(block, ROW, B_REDR, ICON_SCENE_DEHLT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_SCENE, 0, 0, "Scene (F10) "); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_GAME, xco, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_LOGIC, 0, 0, "Logic (F4) "); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCRIPT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_SCRIPT, 0, 0, "Script "); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_MATERIAL_DEHLT,xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_SHADING, 0, 0, "Shading (F5) "); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_OBJECT, 0, 0, "Object (F7) "); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_EDIT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_EDITING, 0, 0, "Editing (F9) "); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE_DEHLT, xco+=XIC, 0, XIC, YIC, &(G.buts->mainb), 0.0, (float)CONTEXT_SCENE, 0, 0, "Scene (F10) "); xco+= XIC; @@ -613,15 +619,15 @@ void buts_buttons(void) switch(G.buts->mainb) { case CONTEXT_SCENE: uiBlockBeginAlign(block); - uiDefIconButC(block, ROW, B_REDR, ICON_SCENE, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_RENDER, 0, 0, "Render buttons "); - uiDefIconButC(block, ROW, B_REDR, ICON_ANIM, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_ANIM, 0, 0, "Anim/playback buttons"); - uiDefIconButC(block, ROW, B_REDR, ICON_SOUND, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_SOUND, 0, 0, "Sound block buttons"); + uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_RENDER, 0, 0, "Render buttons "); + uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_ANIM, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_ANIM, 0, 0, "Anim/playback buttons"); + uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_SOUND, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_SOUND, 0, 0, "Sound block buttons"); break; case CONTEXT_OBJECT: uiBlockBeginAlign(block); - uiDefIconButC(block, ROW, B_REDR, ICON_OBJECT, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_OBJECT, 0, 0, "Object buttons "); - uiDefIconButC(block, ROW, B_REDR, ICON_EFFECTS, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_PHYSICS, 0, 0, "Physics buttons"); + uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_OBJECT, 0, 0, "Object buttons "); + uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_EFFECTS, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_PHYSICS, 0, 0, "Physics buttons"); break; case CONTEXT_SHADING: @@ -629,7 +635,7 @@ void buts_buttons(void) uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_LAMP, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_LAMP, 0, 0, "Lamp buttons"); uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_MAT, 0, 0, "Material buttons"); uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_TEX, 0, 0, "Texture buttons(F6)"); - uiDefIconButC(block, ROW, B_REDR, ICON_RADIO,xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_RAD, 0, 0, "Radiosity buttons"); + uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_RADIO,xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_RAD, 0, 0, "Radiosity buttons"); uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_WORLD, xco+=XIC, t_base, XIC, YIC, &(G.buts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_WORLD, 0, 0, "World buttons"); break; diff --git a/source/blender/src/space.c b/source/blender/src/space.c index 5e361dfad69..32568446770 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -167,9 +167,6 @@ void free_soundspace(SpaceSound *ssound); /* *************************************** */ -int oldkeypress; /* temporary var for checking to cycle between context tabs in extern_set_butspace() */ - - /* don't know yet how the handlers will evolve, for simplicity i choose for an array with eventcodes, this saves in a file! */ @@ -3320,7 +3317,7 @@ void extern_set_butspace(int fkey) } /* if it's already in shading context, cycle between tabs with the same key */ - if (oldkeypress == F5KEY) { + if (sbuts->oldkeypress == F5KEY) { if (sbuts->tab[CONTEXT_SHADING]==TAB_SHADING_LAMP) sbuts->tab[CONTEXT_SHADING]=TAB_SHADING_MAT; @@ -3334,10 +3331,13 @@ void extern_set_butspace(int fkey) else if (sbuts->tab[CONTEXT_SHADING]==TAB_SHADING_WORLD) sbuts->tab[CONTEXT_SHADING]=TAB_SHADING_LAMP; } - else if (oldkeypress == F6KEY) { + else if (sbuts->oldkeypress == F6KEY) { sbuts->tab[CONTEXT_SHADING]=TAB_SHADING_MAT; } - else sbuts->mainb= CONTEXT_SHADING; + else { + sbuts->mainb= CONTEXT_SHADING; + sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT; + } } else if(fkey==F6KEY) { @@ -3346,7 +3346,7 @@ void extern_set_butspace(int fkey) } else if(fkey==F7KEY) { /* if it's already in object context, cycle between tabs with the same key */ - if (oldkeypress == F7KEY) { + if (sbuts->oldkeypress == F7KEY) { if (sbuts->tab[CONTEXT_OBJECT]==TAB_OBJECT_OBJECT) sbuts->tab[CONTEXT_OBJECT]=TAB_OBJECT_PHYSICS; @@ -3363,7 +3363,7 @@ void extern_set_butspace(int fkey) else if(fkey==F9KEY) sbuts->mainb= CONTEXT_EDITING; else if(fkey==F10KEY) { /* if it's already in scene context, cycle between tabs with the same key */ - if (oldkeypress == F10KEY) { + if (sbuts->oldkeypress == F10KEY) { if (sbuts->tab[CONTEXT_SCENE]==TAB_SCENE_RENDER) sbuts->tab[CONTEXT_SCENE]=TAB_SCENE_ANIM; @@ -3375,7 +3375,7 @@ void extern_set_butspace(int fkey) else sbuts->mainb= CONTEXT_SCENE; } - oldkeypress = fkey; + sbuts->oldkeypress = fkey; scrarea_queue_headredraw(sa); scrarea_queue_winredraw(sa);