-
Notifications
You must be signed in to change notification settings - Fork 20
/
fxdefs.i
407 lines (337 loc) · 13.1 KB
/
fxdefs.i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
/***********************************************************************
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For further information please contact the author by e-mail
* at "lyle@lylejohnson.name".
***********************************************************************/
/******************************** Definitions ********************************/
// Truth values
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef MAYBE
#define MAYBE 2
#endif
#ifndef NULL
#define NULL 0
#endif
// FOX System Defined Selector Types
enum FXSelType {
SEL_NONE,
SEL_KEYPRESS, // Key
SEL_KEYRELEASE,
SEL_LEFTBUTTONPRESS, // Buttons
SEL_LEFTBUTTONRELEASE,
SEL_MIDDLEBUTTONPRESS,
SEL_MIDDLEBUTTONRELEASE,
SEL_RIGHTBUTTONPRESS,
SEL_RIGHTBUTTONRELEASE,
SEL_MOTION, // Mouse motion
SEL_ENTER,
SEL_LEAVE,
SEL_FOCUSIN,
SEL_FOCUSOUT,
SEL_KEYMAP,
SEL_UNGRABBED, // Lost the grab (Windows)
SEL_PAINT, // Must repaint window
SEL_CREATE,
SEL_DESTROY,
SEL_UNMAP, /// Window was hidden
SEL_MAP, /// Window was shown
SEL_CONFIGURE, /// Resize
SEL_SELECTION_LOST, /// Widget lost selection
SEL_SELECTION_GAINED, /// Widget gained selection
SEL_SELECTION_REQUEST, /// Inquire selection data
SEL_RAISED, /// Window to top of stack
SEL_LOWERED, /// Window to bottom of stack
SEL_CLOSE, /// Close window
SEL_DELETE, /// Delete window
SEL_MINIMIZE, /// Iconified
SEL_RESTORE, /// No longer iconified or maximized
SEL_MAXIMIZE, /// Maximized
SEL_UPDATE, /// GUI update
SEL_COMMAND, /// GUI command
SEL_CLICKED, /// Clicked
SEL_DOUBLECLICKED, /// Double-clicked
SEL_TRIPLECLICKED, /// Triple-clicked
SEL_MOUSEWHEEL, /// Mouse wheel
SEL_CHANGED, /// GUI has changed
SEL_VERIFY, /// Verify change
SEL_DESELECTED, /// Deselected
SEL_SELECTED, /// Selected
SEL_INSERTED, /// Inserted
SEL_REPLACED, /// Replaced
SEL_DELETED, /// Deleted
SEL_OPENED, /// Opened
SEL_CLOSED, /// Closed
SEL_EXPANDED, /// Expanded
SEL_COLLAPSED, /// Collapsed
SEL_BEGINDRAG, /// Start a drag
SEL_ENDDRAG, /// End a drag
SEL_DRAGGED, /// Dragged
SEL_LASSOED, /// Lassoed
SEL_TIMEOUT, /// Timeout occurred
SEL_SIGNAL, /// Signal received
SEL_CLIPBOARD_LOST, /// Widget lost clipboard
SEL_CLIPBOARD_GAINED, /// Widget gained clipboard
SEL_CLIPBOARD_REQUEST, /// Inquire clipboard data
SEL_CHORE, /// Background chore
SEL_FOCUS_SELF, /// Focus on widget itself
SEL_FOCUS_RIGHT, /// Focus moved right
SEL_FOCUS_LEFT, /// Focus moved left
SEL_FOCUS_DOWN, /// Focus moved down
SEL_FOCUS_UP, /// Focus moved up
SEL_FOCUS_NEXT, /// Focus moved to next widget
SEL_FOCUS_PREV, /// Focus moved to previous widget
SEL_DND_ENTER, /// Drag action entering potential drop target
SEL_DND_LEAVE, /// Drag action leaving potential drop target
SEL_DND_DROP, /// Drop on drop target
SEL_DND_MOTION, /// Drag position changed over potential drop target
SEL_DND_REQUEST, /// Inquire drag and drop data
SEL_IO_READ, /// Read activity on a pipe
SEL_IO_WRITE, /// Write activity on a pipe
SEL_IO_EXCEPT, /// Except activity on a pipe
SEL_PICKED, /// Picked some location
SEL_QUERY_TIP, /// Message inquiring about tooltip
SEL_QUERY_HELP, /// Message inquiring about statusline help
SEL_DOCKED, /// Toolbar docked
SEL_FLOATED, /// Toolbar floated
SEL_SPACEBALLMOTION, /// Moved space ball puck
SEL_SPACEBALLBUTTONPRESS, /// Pressed space ball button
SEL_SPACEBALLBUTTONRELEASE, /// Released space ball button
SEL_SESSION_NOTIFY, /// Session is about to close
SEL_SESSION_CLOSED, /// Session is closed
SEL_IME_START, /// IME mode
SEL_IME_END, /// IME mode
SEL_LAST
};
/// FOX Keyboard and Button states
enum {
SHIFTMASK = 0x001, /// Shift key is down
CAPSLOCKMASK = 0x002, /// Caps Lock key is down
CONTROLMASK = 0x004, /// Ctrl key is down
ALTMASK = 0x008, /// Alt key is down
METAMASK = 0x040, /// Meta key is down
NUMLOCKMASK = 0x010, /// Num Lock key is down
SCROLLLOCKMASK = 0x0E0, /// Scroll Lock key is down (seems to vary)
LEFTBUTTONMASK = 0x100, /// Left mouse button is down
MIDDLEBUTTONMASK = 0x200, /// Middle mouse button is down
RIGHTBUTTONMASK = 0x400 /// Right mouse button is down
};
/// FOX Mouse buttons
enum {
LEFTBUTTON = 1,
MIDDLEBUTTON = 2,
RIGHTBUTTON = 3
};
/// FOX window crossing modes
enum {
CROSSINGNORMAL, /// Normal crossing event
CROSSINGGRAB, /// Crossing due to mouse grab
CROSSINGUNGRAB /// Crossing due to mouse ungrab
};
/// FOX window visibility modes
enum {
VISIBILITYTOTAL,
VISIBILITYPARTIAL,
VISIBILITYNONE
};
/// Drag and drop actions
enum FXDragAction {
DRAG_REJECT = 0, /// Reject all drop actions
DRAG_ACCEPT = 1, /// Accept any drop action
DRAG_COPY = 2, /// Copy
DRAG_MOVE = 3, /// Move
DRAG_LINK = 4, /// Link
DRAG_PRIVATE = 5 /// Private
};
/// Origin of data
enum FXDNDOrigin {
FROM_SELECTION = 0, /// Primary selection
FROM_CLIPBOARD = 1, /// Clipboard
FROM_DRAGNDROP = 2 /// Drag and drop source
};
/// Exponent display
enum FXExponent {
EXP_NEVER=FALSE, /// Never use exponential notation
EXP_ALWAYS=TRUE, /// Always use exponential notation
EXP_AUTO=MAYBE /// Use exponential notation if needed
};
/// Search modes for search/replace dialogs
enum {
SEARCH_FORWARD = 0, /// Search forward (default)
SEARCH_BACKWARD = 1, /// Search backward
SEARCH_NOWRAP = 0, /// Don't wrap (default)
SEARCH_WRAP = 2, /// Wrap around to start
SEARCH_EXACT = 0, /// Exact match (default)
SEARCH_IGNORECASE = 4, /// Ignore case
SEARCH_REGEX = 8, /// Regular expression match
SEARCH_PREFIX = 16 /// Prefix of subject string
};
/********************************* Typedefs **********************************/
// Forward declarations
class FXObject;
class FXStream;
// Streamable types; these are fixed size!
typedef char FXchar;
typedef unsigned char FXuchar;
typedef bool FXbool;
typedef unsigned short FXushort;
typedef short FXshort;
typedef unsigned int FXuint;
typedef int FXint;
typedef float FXfloat;
typedef double FXdouble;
typedef FXObject *FXObjectPtr;
typedef unsigned long FXuval;
typedef unsigned int FXwchar;
// Time since January 1, 1970 (UTC)
typedef FXlong FXTime;
// Pixel type (could be color index)
typedef unsigned long FXPixel;
// RGBA pixel value
typedef FXuint FXColor;
// Hot key
typedef FXuint FXHotKey;
// Drag type
typedef unsigned int FXDragType;
// Input source handle type (see ruby-typemaps.i)
typedef FXint FXInputHandle;
/********************************** Macros ***********************************/
/// Make int out of two shorts
%rename(MKUINT) _MKUINT(FXushort l,FXushort h);
/// Make selector from message type and message id
%rename(FXSEL) _FXSEL(FXushort type,FXushort id);
/// Get type from selector
%rename(FXSELTYPE) _FXSELTYPE(FXuint s);
/// Get ID from selector
%rename(FXSELID) _FXSELID(FXuint s);
%inline %{
static FXuint _MKUINT(FXushort l,FXushort h){
return MKUINT(l,h);
}
static FXuint _FXSEL(FXushort type,FXushort id){
return FXSEL(type,id);
}
static FXushort _FXSELTYPE(FXuint s){
return FXSELTYPE(s);
}
static FXushort _FXSELID(FXuint s){
return FXSELID(s);
}
%}
/// Make RGB color
%rename(FXRGB) _FXRGB(FXuchar r,FXuchar g,FXuchar b);
/// Make RGBA color
%rename(FXRGBA) _FXRGBA(FXuchar r,FXuchar g,FXuchar b,FXuchar a);
/// Get red value from RGBA color
%rename(FXREDVAL) _FXREDVAL(FXuint rgba);
/// Get green value from RGBA color
%rename(FXGREENVAL) _FXGREENVAL(FXuint rgba);
/// Get blue value from RGBA color
%rename(FXBLUEVAL) _FXBLUEVAL(FXuint rgba);
/// Get alpha value from RGBA color
%rename(FXALPHAVAL) _FXALPHAVAL(FXuint rgba);
/// Get component value of RGBA color
%rename(FXRGBACOMPVAL) _FXRGBACOMPVAL(FXuint rgba,FXuchar comp);
// The order in memory is [R G B A] matches that in FXColor
%inline %{
static FXuint _FXRGB(FXuchar r,FXuchar g,FXuchar b){
return FXRGB(r,g,b);
}
static FXuint _FXRGBA(FXuchar r,FXuchar g,FXuchar b,FXuchar a){
return FXRGBA(r,g,b,a);
}
static FXuchar _FXREDVAL(FXuint rgba){
return FXREDVAL(rgba);
}
static FXuchar _FXGREENVAL(FXuint rgba){
return FXGREENVAL(rgba);
}
static FXuchar _FXBLUEVAL(FXuint rgba){
return FXBLUEVAL(rgba);
}
static FXuchar _FXALPHAVAL(FXuint rgba){
return FXALPHAVAL(rgba);
}
static FXuchar _FXRGBACOMPVAL(FXuint rgba,FXuchar comp){
return FXRGBACOMPVAL(rgba,comp);
}
%}
/********************************** Globals **********************************/
/// Sleep n microseconds
void fxsleep(unsigned int n);
/// Get highlight color
FXColor makeHiliteColor(FXColor clr);
/// Get shadow color
FXColor makeShadowColor(FXColor clr);
/// Get RGB value from color name
FXColor colorFromName(const FXString& colorname);
/// Get name of (closest) color to RGB
FXString nameFromColor(FXColor color);
%inline %{
/// Convert RGB to HSV
VALUE fxrgb_to_hsv(FXfloat r,FXfloat g,FXfloat b){
FXfloat h,s,v;
fxrgb_to_hsv(h,s,v,r,g,b);
VALUE ary=rb_ary_new();
rb_ary_push(ary,rb_float_new(h));
rb_ary_push(ary,rb_float_new(s));
rb_ary_push(ary,rb_float_new(v));
return ary;
}
/// Convert HSV to RGB
VALUE fxhsv_to_rgb(FXfloat h,FXfloat s,FXfloat v){
FXfloat r,g,b;
fxhsv_to_rgb(r,g,b,h,s,v);
VALUE ary=rb_ary_new();
rb_ary_push(ary,rb_float_new(r));
rb_ary_push(ary,rb_float_new(g));
rb_ary_push(ary,rb_float_new(b));
return ary;
}
%}
/// Parse geometry, a-la X11 geometry specification
%inline %{
VALUE fxparsegeometry(const FXchar *string){
FXint x,y,w,h;
FXint result=fxparsegeometry(string,x,y,w,h);
VALUE ary=rb_ary_new();
rb_ary_push(ary,INT2NUM(result));
rb_ary_push(ary,INT2NUM(x));
rb_ary_push(ary,INT2NUM(y));
rb_ary_push(ary,INT2NUM(w));
rb_ary_push(ary,INT2NUM(h));
return ary;
}
%}
/// True if executable with given path is a console application
FXbool fxisconsole(const FXchar *path);
%rename(fxversion) _fxversion();
%inline %{
/// Version number that the library has been compiled with
VALUE _fxversion(){
FXString version;
return rb_str_new2(version.value("%d.%d.%d",fxversion[0],fxversion[1],fxversion[2]).text());
}
%}
/// Controls tracing level
FXuint fxTraceLevel;