[Bf-committers] UI layout engine

GSR gsr.b3d at infernal-iceberg.com
Mon Nov 26 19:40:16 CET 2007


Hi,
theeth at yahoo.com (2007-11-26 at 0930.44 -0800):
> 
> --- Alexander Ewering <blender at instinctive.de> wrote:
> 
> > To summarize:
> > 
> > 1) Remove coordinates completely from uiDefBut*
> > 2) Instead, make containers which take PERCENTAGES
> > relative to parent
> >     as coordinates
> > 3) Auto-arrange buttons from uiDefBut in their
> > containers
> 
> I'll add:
> 
> 4) Fix the bugs with the alignment code (certain
> orders of subdivisions don't align properly).

Is this about four buttons in a row? I hit some strange behaviour with
them but quickly solved it by using proper values based in others and
having a document explaining the relation, instead of magic numbers
(with names, but still magic), so things really fit in place (no
overlap, no empty space). I even changed my local copy of the .h so I
stopped wondering what and, more importantly, why values were what
they were. You can see the diff, just in case any body wants it (no
warranties, it was RE for my own usage):

---8<---
Index: source/blender/include/BIF_butspace.h
===================================================================
--- source/blender/include/BIF_butspace.h	(revision 12669)
+++ source/blender/include/BIF_butspace.h	(working copy)
@@ -103,37 +103,87 @@
 
 
 /* buttons grid */
+/*
+   With this system rows can easily have 1 to 4 buttons
+   or create perfectly aligned 1 to 4 columns layouts
+
+     < - - -    PANEL_XMAX  - - - >|
+     < - - -      PANELX     - - - >
+
+      .--  XSPACE side padding  --.
+      |                           |
+      |.- All CLM1                |
+      ||     X2CLM2 -.  X3CLM3    |
+      ||             |    |       |
+     +v|-------------|----|-------v+
+     <-/             |    |        |
+     | [           But1          ] |     1 button of BUTW1 size 
+     <-             -/    |        |
+     | [   But1    ]=[   But2    ] |     2 buttons of BUTW2 size
+     <-                  -/        |
+  v  | [ But1  ]=[ But2 ]#[ But3 ] |     3 buttons of BUTW3 size
+  |  |                             |  v
+  ^  | [But1]#[But2]=[But3]#[But4] |  |  4 buttons of BUTW3 size
+  |  <-      ^      ^      -\      |  ^
+  |  +-------|------|-------|------+  |
+  |          |      |       |         |
+  '- YSPACE  '---.--'       '- X4CLM4 '- BUTH
+ (row to row)    |
+              Padding based in XSPACE (= normal, # +1 pix to make all match)
+
+   Calls like uiBlockBeginAlign/uiBlockEndAlign will make the button
+   to button space disappear if needed, forming a compact group, in some themes
+
+   TODO: Figure relations, meaning and usage of
+         PANELY, PANEL_YMAX, PANELW, PANELH
+ */
 #define PANELX		320
 #define PANELY		0
 #define PANELW		318
 #define PANELH		204
-  
-#define BUTW1		300
-#define BUTW2		145
+
+#define XSPACE		10
+#define YSPACE		6
+#define PANEL_XMAX	(PANELX - XSPACE)
+#define PANEL_YMAX	210
+
+/* The widths follow 300, 150, 100 and 75, which is nice (discarding spacing)
+   sadly spacers and integer rounding make 3 and 4 column complex cases
+   so they better be manually set and checked following the comments */
+#define BUTW1		(PANELX - (2 * XSPACE))
+#define BUTW2		((BUTW1 / 2) - XSPACE)
+/* Manual calc so BUTW3 + XSPACE + BUTW3 + (XSPACE+1) + BUTW3 = BUTW1 */
+/* Could be something like ((BUTW1/3)-(1+(2*XSPACE)) if starting with 300 */
 #define BUTW3		93
+/* This time BUTW4 + (XSPACE+1) + BUTW4 + XSPACE + BUTW4 + (XSPACE+1) + BUTW4 = BUTW1 */
+/* That would be ((BUTW1/4)-(2+(3*XSPACE)) if starting with 300 */
 #define BUTW4		67
+/* NOTE: Again, BUTW3 and BUTW4 values and formulas include manual tuning,
+   retune if base BUTW1 stops being 300 pixels. You have been warned */
 #define ICONBUTW	20
 #define BUTH		22
- 
-#define YSPACE		6
-#define XSPACE		10
-#define PANEL_YMAX	210
-#define PANEL_XMAX	310
- 
-#define X1CLM1		10
- 
+
+/* X axis start positions of column presets */
+/* First number declares how many columns total */
+/* Second number declares the exact column it controls */
+/* So X3CLM2 means X start position of 2nd button for a row of 3 buttons */
+#define X1CLM1		XSPACE
+
 #define X2CLM1		X1CLM1
-#define X2CLM2		165
+#define X2CLM2		(X2CLM1 + BUTW2 + XSPACE)
  
 #define X3CLM1		X1CLM1
-#define X3CLM2		113
-#define X3CLM3		217
+#define X3CLM2		(X3CLM1 + BUTW3 + XSPACE)
+/* By substracting from end we already get the extra 1 pix */
+#define X3CLM3		(PANEL_XMAX - BUTW3)
 
 #define X4CLM1		X1CLM1
-#define X4CLM2		77
-#define X4CLM3		165
-#define X4CLM4		232
- 
+/* Extra pix to reach the BUTW1 total size */
+#define X4CLM2		(X4CLM1 + BUTW4 + XSPACE + 1)
+#define X4CLM3		(X4CLM2 + BUTW4 + XSPACE)
+/* By substracting from end we already get the other extra 1 pix */
+#define X4CLM4		(PANEL_XMAX - BUTW4)
+/* end buttons grid */ 
 
 #endif
 
--->8---
 
GSR
 


More information about the Bf-committers mailing list