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