[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41976] trunk/blender/source/blender/ editors/interface/interface_regions.c: Fix [#29018] Problem with multi-column dorpdown lists, when scrolling is enabled: the bottom-most elements are not shown.

Bastien Montagne montagne29 at wanadoo.fr
Sat Nov 19 00:10:57 CET 2011


Revision: 41976
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41976
Author:   mont29
Date:     2011-11-18 23:10:56 +0000 (Fri, 18 Nov 2011)
Log Message:
-----------
Fix [#29018] Problem with multi-column dorpdown lists, when scrolling is enabled: the bottom-most elements are not shown.

ui_popup_block_scrolltest needs to be aware whether uiblock is flip or not, to avoid hiding irrelevant items in multi-column scrolled menus...

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_regions.c

Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c	2011-11-18 21:19:03 UTC (rev 41975)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c	2011-11-18 23:10:56 UTC (rev 41976)
@@ -1446,6 +1446,8 @@
 void ui_popup_block_scrolltest(uiBlock *block)
 {
 	uiBut *bt;
+	/* Knowing direction is necessary for multi-column menus... */
+	int is_flip = (block->direction & UI_TOP) && !(block->flag & UI_BLOCK_NO_FLIP);
 	
 	block->flag &= ~(UI_BLOCK_CLIPBOTTOM|UI_BLOCK_CLIPTOP);
 	
@@ -1462,9 +1464,9 @@
 			block->flag |= UI_BLOCK_CLIPBOTTOM;
 			/* make space for arrow */
 			if(bt->y2 < block->miny +10) {
-				if(bt->next && bt->next->y1 > bt->y1)
+				if(is_flip && bt->next && bt->next->y1 > bt->y1)
 					bt->next->flag |= UI_SCROLLED;
-				if(bt->prev && bt->prev->y1 > bt->y1)
+				else if(!is_flip && bt->prev && bt->prev->y1 > bt->y1)
 					bt->prev->flag |= UI_SCROLLED;
 			}
 		}
@@ -1473,9 +1475,9 @@
 			block->flag |= UI_BLOCK_CLIPTOP;
 			/* make space for arrow */
 			if(bt->y1 > block->maxy -10) {
-				if(bt->next && bt->next->y2 < bt->y2)
+				if(!is_flip && bt->next && bt->next->y2 < bt->y2)
 					bt->next->flag |= UI_SCROLLED;
-				if(bt->prev && bt->prev->y2 < bt->y2)
+				else if(is_flip && bt->prev && bt->prev->y2 < bt->y2)
 					bt->prev->flag |= UI_SCROLLED;
 			}
 		}




More information about the Bf-blender-cvs mailing list