Patch by Matt Ebb: upgraded usablitiy of text button.
[blender.git] / source / blender / include / interface.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32
33 #ifndef INTERFACE_H
34 #define INTERFACE_H
35
36 #include "BIF_resources.h"
37
38 /* general defines */
39
40 #define UI_MAX_DRAW_STR 400
41 #define UI_MAX_NAME_STR 64
42 #define UI_ARRAY        29
43
44 /* uiBut->flag */
45 #define UI_SELECT               1
46 #define UI_MOUSE_OVER   2
47 #define UI_ACTIVE               4
48 #define UI_HAS_ICON             8
49 /* warn: rest of uiBut->flag in BIF_interface.c */
50
51
52 /* internal panel drawing defines */
53 #define PNL_GRID        4
54 #define PNL_DIST        8
55 #define PNL_SAFETY      8
56 #define PNL_HEADER  20
57
58 /* panel->flag */
59 #define PNL_SELECT      1
60 #define PNL_CLOSEDX     2
61 #define PNL_CLOSEDY     4
62 #define PNL_CLOSED      6
63 #define PNL_TABBED      8
64 #define PNL_OVERLAP     16
65
66 /* Button text selection:
67  * extension direction, selextend, inside ui_do_but_TEX */
68 #define EXTEND_LEFT             1
69 #define EXTEND_RIGHT    2
70 #define SELWIDTH                (but->selend - but->selsta)
71
72 typedef struct {
73         short xim, yim;
74         unsigned int *rect;
75         short xofs, yofs;
76 } uiIconImage;
77
78 typedef struct {
79         short mval[2];
80         short qual, val;
81         int event;
82 } uiEvent;
83
84 typedef struct {
85         void *xl, *large, *medium, *small;
86 } uiFont;
87
88 typedef struct uiLinkLine uiLinkLine;
89 struct uiLinkLine {                             /* only for draw/edit */
90         uiLinkLine *next, *prev;
91
92         short flag, pad;
93         
94         uiBut *from, *to;       
95 };
96
97 typedef struct {
98         void **poin;            /* pointer to original pointer */
99         void ***ppoin;          /* pointer to original pointer-array */
100         short *totlink;         /* if pointer-array, here is the total */
101         
102         short maxlink, pad;
103         short fromcode, tocode;
104         
105         ListBase lines;
106 } uiLink;
107
108 struct uiBut {
109         uiBut *next, *prev;
110         short type, pointype, bit, bitnr, retval, strwidth, ofs, pos, selsta, selend;
111         int flag;
112         
113         char *str;
114         char strdata[UI_MAX_NAME_STR];
115         char drawstr[UI_MAX_DRAW_STR];
116         
117         float x1, y1, x2, y2;
118
119         char *poin;
120         float min, max;
121         float a1, a2, hsv[3];   // hsv is temp memory for hsv buttons
122         float aspect;
123
124         void (*func)(void *, void *);
125         void *func_arg1;
126         void *func_arg2;
127
128         void (*embossfunc)(int , int , float, float, float, float, float, int);
129         void (*sliderfunc)(int , float, float, float, float, float, float, int);
130
131         void (*autocomplete_func)(char *, void *);
132         void *autofunc_arg;
133         
134         uiLink *link;
135         
136         char *tip, *lockstr;
137
138         int themecol;   /* themecolor id */
139         void *font;
140
141         BIFIconID icon;
142         short but_align;        /* aligning buttons, horiz/vertical */
143         short lock, win;
144         short iconadd, dt;
145
146                 /* IDPOIN data */
147         uiIDPoinFuncFP idpoin_func;
148         ID **idpoin_idpp;
149
150                 /* BLOCK data */
151         uiBlockFuncFP block_func;
152
153                 /* BUTM data */
154         void (*butm_func)(void *arg, int event);
155         void *butm_func_arg;
156         
157                 /* pointer back */
158         uiBlock *block;
159 };
160
161 struct uiBlock {
162         uiBlock *next, *prev;
163         
164         ListBase buttons;
165         Panel *panel;
166         
167         char name[UI_MAX_NAME_STR];
168         
169         float winmat[4][4];
170         
171         float minx, miny, maxx, maxy;
172         float aspect;
173
174         void (*butm_func)(void *arg, int event);
175         void *butm_func_arg;
176
177         void (*func)(void *arg1, void *arg2);
178         void *func_arg1;
179         void *func_arg2;
180         
181         /* extra draw function for custom blocks */
182         void (*drawextra)();
183
184         int themecol;   /* themecolor id */
185         
186         short font;     /* indices */
187         int afterval, flag;
188         void *curfont;
189         
190         short autofill, win, winq, direction, dt;
191         short needflush, auto_open, in_use, pad;  //flush see below
192         void *overdraw;
193         struct uiBlock *parent; // nested pulldowns
194         
195         float xofs, yofs;               // offset to parent button
196         rctf parentrct;                 // for pulldowns, rect the mouse is allowed outside of menu (parent button)
197         rctf safety;                    // pulldowns, to detect outside, can differ per case how it is created
198
199         rctf flush;                             // rect to be flushed to frontbuffer
200         int handler;                    // for panels in other windows than buttonswin... just event code
201 };
202
203 /* interface.c */
204
205 extern void ui_graphics_to_window(int win, float *x, float *y);
206 extern void ui_window_to_graphics(int win, float *x, float *y);
207
208 extern void ui_block_flush_back(uiBlock *block);
209 extern void ui_block_set_flush(uiBlock *block, uiBut *but);
210
211 extern void ui_check_but(uiBut *but);
212 extern double ui_get_but_val(uiBut *but);
213 extern void ui_get_but_vectorf(uiBut *but, float *vec);
214 extern void ui_set_but_vectorf(uiBut *but, float *vec);
215 extern void ui_autofill(uiBlock *block);
216
217 /* interface_panel.c */
218 extern void ui_draw_panel(uiBlock *block);
219 extern void ui_do_panel(uiBlock *block, uiEvent *uevent);
220 extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
221 extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
222
223 /* interface_draw.c */
224 extern void ui_set_embossfunc(uiBut *but, int drawtype);
225 extern void ui_draw_but(uiBut *but);
226 extern void ui_rasterpos_safe(float x, float y, float aspect);
227
228
229 #endif
230