]> git.decadent.org.uk Git - ion3.git/blob - ioncore/sizepolicy.h
4e7ff547e17766de4910cfc956d8fda4853c0e3d
[ion3.git] / ioncore / sizepolicy.h
1 /*
2  * ion/ioncore/sizepolicy.h
3  *
4  * Copyright (c) Tuomo Valkonen 1999-2008. 
5  *
6  * See the included file LICENSE for details.
7  */
8
9 #ifndef ION_IONCORE_SIZEPOLICY_H
10 #define ION_IONCORE_SIZEPOLICY_H
11
12 #include "common.h"
13 #include "region.h"
14
15 /* Modifiers for some policies */
16 #define SIZEPOLICY_VERT_NONE    0x0000
17 #define SIZEPOLICY_VERT_TOP     0x0100
18 #define SIZEPOLICY_VERT_BOTTOM  0x0200
19 #define SIZEPOLICY_VERT_CENTER  0x0300
20 #define SIZEPOLICY_VERT_MASK    0x0300
21
22 #define SIZEPOLICY_HORIZ_NONE   0x0000
23 #define SIZEPOLICY_HORIZ_LEFT   0x0400
24 #define SIZEPOLICY_HORIZ_RIGHT  0x0800
25 #define SIZEPOLICY_HORIZ_CENTER 0x0c00
26 #define SIZEPOLICY_HORIZ_MASK   0x0c00
27
28 #define SIZEPOLICY_SHRUNK       0x1000
29
30 /* The policies */
31 #define SIZEPOLICY_MASK           0xff
32 #define SIZEPOLICY_DEFAULT        0x00
33 #define SIZEPOLICY_FULL_EXACT     0x01
34 #define SIZEPOLICY_FULL_BOUNDS    0x02
35 #define SIZEPOLICY_FREE           0x03
36 #define SIZEPOLICY_GRAVITY        0x04 /* uses vert/horiz flags */
37 #define SIZEPOLICY_FREE_GLUE      0x05 /* stateful; modifies v/h flags */
38 #define SIZEPOLICY_STRETCH_LEFT   0x06
39 #define SIZEPOLICY_STRETCH_RIGHT  0x07
40 #define SIZEPOLICY_STRETCH_TOP    0x08
41 #define SIZEPOLICY_STRETCH_BOTTOM 0x09
42 #define SIZEPOLICY_UNCONSTRAINED  0x10
43
44 #define SIZEPOLICY_GRAVITY_NORTHWEST (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_LEFT)
45 #define SIZEPOLICY_GRAVITY_NORTH     (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_CENTER)
46 #define SIZEPOLICY_GRAVITY_NORTHEAST (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_RIGHT)
47 #define SIZEPOLICY_GRAVITY_WEST      (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_LEFT)
48 #define SIZEPOLICY_GRAVITY_CENTER    (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_CENTER)
49 #define SIZEPOLICY_GRAVITY_EAST      (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_RIGHT)
50 #define SIZEPOLICY_GRAVITY_SOUTHWEST (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_LEFT)
51 #define SIZEPOLICY_GRAVITY_SOUTH     (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_CENTER)
52 #define SIZEPOLICY_GRAVITY_SOUTHEAST (SIZEPOLICY_GRAVITY|SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_RIGHT)
53
54 #define SIZEPOLICY_FREE_GLUE__NORTHWEST (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_LEFT)
55 #define SIZEPOLICY_FREE_GLUE__NORTH     (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_CENTER)
56 #define SIZEPOLICY_FREE_GLUE__NORTHEAST (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_TOP|SIZEPOLICY_HORIZ_RIGHT)
57 #define SIZEPOLICY_FREE_GLUE__WEST      (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_LEFT)
58 #define SIZEPOLICY_FREE_GLUE__CENTER    (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_CENTER)
59 #define SIZEPOLICY_FREE_GLUE__EAST      (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_CENTER|SIZEPOLICY_HORIZ_RIGHT)
60 #define SIZEPOLICY_FREE_GLUE__SOUTHWEST (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_LEFT)
61 #define SIZEPOLICY_FREE_GLUE__SOUTH     (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_CENTER)
62 #define SIZEPOLICY_FREE_GLUE__SOUTHEAST (SIZEPOLICY_FREE_GLUE|SIZEPOLICY_VERT_BOTTOM|SIZEPOLICY_HORIZ_RIGHT)
63
64 typedef uint WSizePolicy;
65
66
67 extern void sizepolicy(WSizePolicy *szplcy, WRegion *reg,
68                        const WRectangle *rq_geom, int rq_flags,
69                        WFitParams *fp);
70
71
72 extern bool string2sizepolicy(const char *szplcy, WSizePolicy *value);
73 extern const char *sizepolicy2string(WSizePolicy szplcy);
74
75 #endif /* ION_IONCORE_SIZEPOLICY_H */