[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