1 /* Public domain */
2
3 #ifndef _AGAR_WIDGET_BOX_H_
4 #define _AGAR_WIDGET_BOX_H_
5
6 #include <agar/gui/widget.h>
7
8 #include <agar/gui/begin.h>
9
10 enum ag_box_type {
11 AG_BOX_HORIZ,
12 AG_BOX_VERT
13 };
14
15 enum ag_box_align {
16 AG_BOX_LEFT = 0,
17 AG_BOX_TOP = 0,
18 AG_BOX_CENTER = 1,
19 AG_BOX_MIDDLE = 1,
20 AG_BOX_RIGHT = 2,
21 AG_BOX_BOTTOM = 2
22 };
23
24 struct ag_label;
25
26 typedef struct ag_box {
27 struct ag_widget wid;
28 enum ag_box_type type;
29 Uint flags;
30 #define AG_BOX_HOMOGENOUS 0x01 /* Divide space evenly */
31 #define AG_BOX_HFILL 0x02 /* Expand to fill available width */
32 #define AG_BOX_VFILL 0x04 /* Expand to fill available height */
33 #define AG_BOX_FRAME 0x08 /* Display a frame by default */
34 #define AG_BOX_EXPAND (AG_BOX_HFILL|AG_BOX_VFILL)
35 int padding; /* Padding around widgets */
36 int spacing; /* Spacing between widgets */
37 int depth; /* Depth of frame (for AG_BOX_FRAME) */
38 struct ag_label *lbl; /* Optional text label */
39 enum ag_box_align hAlign, vAlign; /* Widget alignment */
40 } AG_Box;
41
42 #define AGBOX(p) ((AG_Box *)(p))
43
44 __BEGIN_DECLS
45 extern AG_WidgetClass agBoxClass;
46
47 AG_Box *AG_BoxNew(void *, enum ag_box_type, Uint);
48
49 void AG_BoxSetLabel(AG_Box *, const char *, ...);
50 void AG_BoxSetLabelS(AG_Box *, const char *);
51 void AG_BoxSetHomogenous(AG_Box *, int);
52 void AG_BoxSetPadding(AG_Box *, int);
53 void AG_BoxSetSpacing(AG_Box *, int);
54 void AG_BoxSetDepth(AG_Box *, int);
55 void AG_BoxSetType(AG_Box *, enum ag_box_type);
56 void AG_BoxSetHorizAlign(AG_Box *, enum ag_box_align);
57 void AG_BoxSetVertAlign(AG_Box *, enum ag_box_align);
58
59 #define AG_BoxNewHoriz(p,f) AG_BoxNew((p),AG_BOX_HORIZ,(f))
60 #define AG_BoxNewVert(p,f) AG_BoxNew((p),AG_BOX_VERT,(f))
61
62 static __inline__ AG_Box *
AG_BoxNewHorizNS(void * p,Uint flags)63 AG_BoxNewHorizNS(void *p, Uint flags)
64 {
65 AG_Box *hBox = AG_BoxNewHoriz(p, flags);
66 AG_BoxSetSpacing(hBox, 0);
67 AG_BoxSetPadding(hBox, 0);
68 return (hBox);
69 }
70 static __inline__ AG_Box *
AG_BoxNewVertNS(void * p,Uint flags)71 AG_BoxNewVertNS(void *p, Uint flags)
72 {
73 AG_Box *vBox = AG_BoxNewVert(p, flags);
74 AG_BoxSetSpacing(vBox, 0);
75 AG_BoxSetPadding(vBox, 0);
76 return (vBox);
77 }
78 __END_DECLS
79
80 #include <agar/gui/close.h>
81 #endif /* _AGAR_WIDGET_BOX_H_ */
82