- when pulldown menus get flipped, the arrow keys were not behaving OK.

also added that left/right arrow is handled, to prevent weird redraw.
This commit is contained in:
2004-01-23 20:54:26 +00:00
parent 23a3a51e16
commit e93e5d37da

View File

@@ -511,6 +511,7 @@ static void ui_positionblock(uiBlock *block, uiBut *but)
if(dir2==UI_RIGHT) block->safety.xmax= block->maxx+3;
if(dir2==UI_LEFT) block->safety.xmin= block->minx-3;
}
block->direction= dir1|dir2;
}
else {
block->safety.xmin= block->minx-40;
@@ -2553,6 +2554,10 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent)
}
switch(uevent->event) {
case LEFTARROWKEY: // later on implement opening/closing sublevels of pupmenus
case RIGHTARROWKEY:
break;
case PAD8: case PAD2:
case UPARROWKEY:
case DOWNARROWKEY:
@@ -2579,14 +2584,16 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent)
but->flag &= ~UI_ACTIVE;
ui_draw_but(but);
bt= ui_but_prev(but);
if(bt && event==UPARROWKEY) {
bt->flag |= UI_ACTIVE;
ui_draw_but(bt);
break;
if(event==UPARROWKEY) {
if(block->direction & UI_TOP) bt= ui_but_next(but);
else bt= ui_but_prev(but);
}
bt= ui_but_next(but);
if(bt && event==DOWNARROWKEY) {
else {
if(block->direction & UI_TOP) bt= ui_but_prev(but);
else bt= ui_but_next(but);
}
if(bt) {
bt->flag |= UI_ACTIVE;
ui_draw_but(bt);
break;
@@ -2598,9 +2605,14 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent)
/* nothing done */
if(but==NULL) {
if(event==UPARROWKEY) but= ui_but_last(block);
else but= ui_but_first(block);
if(event==UPARROWKEY) {
if(block->direction & UI_TOP) but= ui_but_first(block);
else but= ui_but_last(block);
}
else {
if(block->direction & UI_TOP) but= ui_but_last(block);
else but= ui_but_first(block);
}
if(but) {
but->flag |= UI_ACTIVE;
ui_draw_but(but);
@@ -4018,7 +4030,8 @@ void uiBlockSetDirection(uiBlock *block, int direction)
}
void uiBlockFlipOrder(uiBlock *block)
{
uiBut *but;
ListBase lb;
uiBut *but, *next;
float centy, miny=10000, maxy= -10000;
for(but= block->buttons.first; but; but= but->next) {
@@ -4032,6 +4045,17 @@ void uiBlockFlipOrder(uiBlock *block)
but->y2 = centy-(but->y2-centy);
SWAP(float, but->y1, but->y2);
}
/* also flip order in block itself, for example for arrowkey */
lb.first= lb.last= NULL;
but= block->buttons.first;
while(but) {
next= but->next;
BLI_remlink(&block->buttons, but);
BLI_addtail(&lb, but);
but= next;
}
block->buttons= lb;
}