00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef XGEDIT_H
00012 #define XGEDIT_H
00013
00014 #ifndef _LIBC_LIMITS_H_
00015 #include <limits.h>
00016 #endif
00017
00018 #ifndef PKVARIA_H
00019 #include "pkvaria.h"
00020 #endif
00021 #ifndef PKNUM_H
00022 #include "pknum.h"
00023 #endif
00024 #ifndef PKGEOM_H
00025 #include "pkgeom.h"
00026 #endif
00027 #ifndef CAMERA_H
00028 #include "camera.h"
00029 #endif
00030
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034
00035 typedef unsigned int xgecolour_int;
00036
00037 #define xge_MAX_WINDOWS 8
00038 #define xge_MAX_CURSORS 16
00039
00040 #define xge_MAX_WIDTH 1280
00041 #define xge_MAX_HEIGHT 960
00042 #define xge_WIDTH 480
00043 #define xge_HEIGHT 360
00044
00045 #define XGE_AUTO_ASPECT
00046 #ifndef XGE_AUTO_ASPECT
00047 #define XGE_DEFAULT_ASPECT 1.0
00048 #endif
00049
00050 #define xge_CHAR_WIDTH 6
00051 #define xge_CHAR_HEIGHT 13
00052
00053 #define xge_RECT_NONE -1
00054 #define xge_MINDIST 8
00055
00056 #define xge_FOCUS_DEPTH 8
00057
00058 #define xge_MAX_STRING_LENGTH 512
00059
00060
00061
00062 #define xgemouse_LBUTTON_DOWN (1 << 0)
00063 #define xgemouse_LBUTTON_CHANGE (1 << 1)
00064 #define xgemouse_RBUTTON_DOWN (1 << 2)
00065 #define xgemouse_RBUTTON_CHANGE (1 << 3)
00066 #define xgemouse_MBUTTON_DOWN (1 << 4)
00067 #define xgemouse_MBUTTON_CHANGE (1 << 5)
00068 #define xgemouse_WHEELFW_DOWN (1 << 6)
00069 #define xgemouse_WHEELFW_CHANGE (1 << 7)
00070 #define xgemouse_WHEELBK_DOWN (1 << 8)
00071 #define xgemouse_WHEELBK_CHANGE (1 << 9)
00072
00073
00074
00075 #define xgemsg_NULL 0
00076 #define xgemsg_INIT 0x100
00077
00078
00079 #define xgemsg_KEY 0x101
00080 #define xgemsg_SPECIAL_KEY 0x102
00081 #define xgemsg_MMOVE 0x103
00082 #define xgemsg_MCLICK 0x104
00083 #define xgemsg_OTHEREVENT 0x105
00084
00085
00086 #define xgemsg_ENTERING 0x106
00087 #define xgemsg_EXITING 0x107
00088 #define xgemsg_RESIZE 0x108
00089 #define xgemsg_MOVE 0x109
00090
00091 #define xgemsg_BUTTON_COMMAND 0x10A
00092 #define xgemsg_SWITCH_COMMAND 0x10B
00093 #define xgemsg_SLIDEBAR_COMMAND 0x10C
00094 #define xgemsg_SLIDEBAR2_COMMAND 0x10D
00095 #define xgemsg_DIAL_COMMAND 0x10E
00096 #define xgemsg_TEXT_EDIT_VERIFY 0x10F
00097 #define xgemsg_TEXT_EDIT_ENTER 0x110
00098 #define xgemsg_TEXT_EDIT_ESCAPE 0x111
00099 #define xgemsg_INT_WIDGET_COMMAND 0x112
00100 #define xgemsg_LISTBOX_ITEM_SET 0x113
00101 #define xgemsg_LISTBOX_ITEM_PICK 0x114
00102 #define xgemsg_QUATROTBALL_COMMAND 0x115
00103 #define xgemsg_TEXT_WIDGET_CLICK 0x116
00104
00105 #define xgemsg_2DWIN_RESIZE 0x117
00106 #define xgemsg_2DWIN_PROJCHANGE 0x118
00107 #define xgemsg_2DWIN_PICK_POINT 0x119
00108 #define xgemsg_2DWIN_MOVE_POINT 0x11A
00109 #define xgemsg_2DWIN_SELECT_POINTS 0x11B
00110 #define xgemsg_2DWIN_UNSELECT_POINTS 0x11C
00111 #define xgemsg_2DWIN_SPECIAL_SELECT 0x11D
00112 #define xgemsg_2DWIN_SPECIAL_UNSELECT 0x11E
00113 #define xgemsg_2DWIN_CHANGE_TRANS 0x11F
00114 #define xgemsg_2DWIN_SAVE_POINTS 0x120
00115 #define xgemsg_2DWIN_TRANSFORM_POINTS 0x121
00116 #define xgemsg_2DWIN_TRANSFORM_SPECIAL 0x122
00117 #define xgemsg_2DWIN_FIND_REFBBOX 0x123
00118 #define xgemsg_2DWIN_UNDO 0x124
00119 #define xgemsg_2DWIN_KEY 0x125
00120 #define xgemsg_2DWIN_ERROR 0x126
00121
00122 #define xgemsg_3DWIN_RESIZE 0x127
00123 #define xgemsg_3DWIN_PROJCHANGE 0x128
00124 #define xgemsg_3DWIN_PICK_POINT 0x129
00125 #define xgemsg_3DWIN_MOVE_POINT 0x12A
00126 #define xgemsg_3DWIN_SELECT_POINTS 0x12B
00127 #define xgemsg_3DWIN_UNSELECT_POINTS 0x12C
00128 #define xgemsg_3DWIN_SPECIAL_SELECT 0x12D
00129 #define xgemsg_3DWIN_SPECIAL_UNSELECT 0x12E
00130 #define xgemsg_3DWIN_CHANGE_TRANS 0x12F
00131 #define xgemsg_3DWIN_SAVE_POINTS 0x130
00132 #define xgemsg_3DWIN_TRANSFORM_POINTS 0x131
00133 #define xgemsg_3DWIN_TRANSFORM_SPECIAL 0x132
00134 #define xgemsg_3DWIN_FIND_REFBBOX 0x133
00135 #define xgemsg_3DWIN_UNDO 0x134
00136 #define xgemsg_3DWIN_KEY 0x135
00137 #define xgemsg_3DWIN_ERROR 0x136
00138
00139 #define xgemsg_KNOTWIN_CHANGE_KNOT 0x137
00140 #define xgemsg_KNOTWIN_INSERT_KNOT 0x138
00141 #define xgemsg_KNOTWIN_REMOVE_KNOT 0x139
00142 #define xgemsg_KNOTWIN_CHANGE_ALTKNOT 0x13A
00143 #define xgemsg_KNOTWIN_INSERT_ALTKNOT 0x13B
00144 #define xgemsg_KNOTWIN_REMOVE_ALTKNOT 0x13C
00145 #define xgemsg_KNOTWIN_MCLICK 0x13D
00146 #define xgemsg_KNOTWIN_MMOVE 0x13E
00147 #define xgemsg_KNOTWIN_CHANGE_MAPPING 0x13F
00148 #define xgemsg_KNOTWIN_ERROR 0x140
00149
00150 #define xgemsg_T2KNOTWIN_RESIZE 0x141
00151 #define xgemsg_T2KNOTWIN_PROJCHANGE 0x142
00152 #define xgemsg_T2KNOTWIN_CHANGE_KNOT_U 0x143
00153 #define xgemsg_T2KNOTWIN_CHANGE_KNOT_V 0x144
00154 #define xgemsg_T2KNOTWIN_INSERT_KNOT_U 0x145
00155 #define xgemsg_T2KNOTWIN_INSERT_KNOT_V 0x146
00156 #define xgemsg_T2KNOTWIN_REMOVE_KNOT_U 0x147
00157 #define xgemsg_T2KNOTWIN_REMOVE_KNOT_V 0x148
00158 #define xgemsg_T2KNOTWIN_CHANGE_ALTKNOT_U 0x149
00159 #define xgemsg_T2KNOTWIN_CHANGE_ALTKNOT_V 0x14A
00160 #define xgemsg_T2KNOTWIN_INSERT_ALTKNOT_U 0x14B
00161 #define xgemsg_T2KNOTWIN_INSERT_ALTKNOT_V 0x14C
00162 #define xgemsg_T2KNOTWIN_REMOVE_ALTKNOT_U 0x14D
00163 #define xgemsg_T2KNOTWIN_REMOVE_ALTKNOT_V 0x14E
00164 #define xgemsg_T2KNOTWIN_SELECT_POINTS 0x14F
00165 #define xgemsg_T2KNOTWIN_UNSELECT_POINTS 0x150
00166 #define xgemsg_T2KNOTWIN_CHANGE_MAPPING 0x151
00167 #define xgemsg_T2KNOTWIN_ERROR 0x152
00168
00169
00170 #define xgemsg_POPUP_REMOVED 0x153
00171 #define xgemsg_POPUPS_REMOVED 0x154
00172
00173
00174 #define xgemsg_USER_MESSAGE_DISMISSED 0x155
00175
00176
00177
00178 #define xgemsg_IDLE_COMMAND 0x156
00179
00180
00181 #define xgemsg_CHILD_MESSAGE 0x157
00182
00183 #define xgemsg_CHILD_FAILURE 0x158
00184
00185
00186 #define xgemsg_LAST_MESSAGE xgemsg_CHILD_FAILURE
00187
00188
00189
00190 #define xgestate_NOTHING 0
00191 #define xgestate_BUTTON_DEFAULT 1
00192 #define xgestate_BUTTON_COMBO_0 2
00193 #define xgestate_BUTTON_COMBO_1 3
00194 #define xgestate_BUTTON_INACTIVE 4
00195 #define xgestate_MOVINGSLIDE 5
00196 #define xgestate_MOVINGSLIDE2A 6
00197 #define xgestate_MOVINGSLIDE2B 7
00198 #define xgestate_TURNINGDIAL 8
00199 #define xgestate_QUATROT_TURNING1 9
00200 #define xgestate_QUATROT_TURNING2 10
00201 #define xgestate_QUATROT_TURNING3 11
00202 #define xgestate_MESSAGE 12
00203 #define xgestate_RESIZING_X 13
00204 #define xgestate_RESIZING_Y 14
00205 #define xgestate_RESIZING_XY 15
00206 #define xgestate_TEXT_EDITING 16
00207 #define xgestate_2DWIN_MOVINGPOINT 17
00208 #define xgestate_2DWIN_PANNING 18
00209 #define xgestate_2DWIN_ZOOMING 19
00210 #define xgestate_2DWIN_SELECTING 20
00211 #define xgestate_2DWIN_UNSELECTING 21
00212 #define xgestate_2DWIN_MOVING_GEOM_WIDGET 22
00213 #define xgestate_2DWIN_USING_GEOM_WIDGET 23
00214 #define xgestate_2DWIN_ALTUSING_GEOM_WIDGET 24
00215 #define xgestate_2DWIN_USING_SPECIAL_WIDGET 25
00216 #define xgestate_3DWIN_MOVINGPOINT 26
00217 #define xgestate_3DWIN_PARPANNING 27
00218 #define xgestate_3DWIN_PARZOOMING 28
00219 #define xgestate_3DWIN_TURNING_VIEWER 29
00220 #define xgestate_3DWIN_PANNING 30
00221 #define xgestate_3DWIN_ZOOMING 31
00222 #define xgestate_3DWIN_SELECTING 32
00223 #define xgestate_3DWIN_UNSELECTING 33
00224 #define xgestate_3DWIN_MOVING_GEOM_WIDGET 34
00225 #define xgestate_3DWIN_USING_GEOM_WIDGET 35
00226 #define xgestate_3DWIN_ALTUSING_GEOM_WIDGET 36
00227 #define xgestate_3DWIN_USING_SPECIAL_WIDGET 37
00228 #define xgestate_KNOTWIN_MOVINGKNOT 38
00229 #define xgestate_KNOTWIN_PANNING 39
00230 #define xgestate_KNOTWIN_ZOOMING 40
00231 #define xgestate_T2KNOTWIN_MOVINGKNOT_U 41
00232 #define xgestate_T2KNOTWIN_MOVINGKNOT_V 42
00233 #define xgestate_T2KNOTWIN_MOVING_POINT 43
00234 #define xgestate_T2KNOTWIN_PANNING 44
00235 #define xgestate_T2KNOTWIN_ZOOMING 45
00236 #define xgestate_T2KNOTWIN_SELECTING 46
00237 #define xgestate_T2KNOTWIN_UNSELECTING 47
00238 #define xgestate_LISTBOX_PICKING 48
00239
00240 #define xgestate_LAST xgestate_LISTBOX_PICKING
00241
00242
00243
00244 #define xgeCURSOR_CROSSHAIR xgecursor[0]
00245 #define xgeCURSOR_HAND xgecursor[1]
00246 #define xgeCURSOR_PENCIL xgecursor[2]
00247 #define xgeCURSOR_FLEUR xgecursor[3]
00248 #define xgeCURSOR_ARROW xgecursor[4]
00249 #define xgeCURSOR_WATCH xgecursor[5]
00250 #define xgeCURSOR_CIRCLE xgecursor[6]
00251 #define xgeCURSOR_DEFAULT xgecursor[7]
00252 #define xgeCURSOR_INVISIBLE xgecursor[8]
00253
00254
00255 #ifndef XGERGB_H
00256 #include "xgergb.h"
00257 #endif
00258
00259 #define xgec_MENU_BACKGROUND xgec_Grey5
00260 #define xgec_INFOMSG_BACKGROUND xgec_Grey4
00261 #define xgec_ERRORMSG_BACKGROUND xgec_Red
00262 #define xgec_WARNINGMSG_BACKGROUND xgec_DarkMagenta
00263
00264
00265
00266 #define xgeSetBackground(colour) \
00267 XSetBackground(xgedisplay,xgegc,colour)
00268 #define xgeSetForeground(colour) \
00269 XSetForeground(xgedisplay,xgegc,colour)
00270 #define xgeSetLineAttributes(width,line_style,cap_style,join_style) \
00271 XSetLineAttributes(xgedisplay,xgegc,width,line_style,cap_style,join_style)
00272 #define xgeSetDashes(n,dash_list,offset) \
00273 XSetDashes(xgedisplay,xgegc,offset,dash_list,n)
00274
00275 #define xgeDrawRectangle(w,h,x,y) \
00276 XDrawRectangle(xgedisplay,xgepixmap,xgegc,x,y,w,h)
00277 #define xgeFillRectangle(w,h,x,y) \
00278 XFillRectangle(xgedisplay,xgepixmap,xgegc,x,y,w,h)
00279 #define xgeDrawString(string,x,y) \
00280 XDrawString(xgedisplay,xgepixmap,xgegc,x,y,string,strlen(string))
00281 #define xgeDrawLine(x0,y0,x1,y1) \
00282 XDrawLine(xgedisplay,xgepixmap,xgegc,x0,y0,x1,y1)
00283 #define xgeDrawLines(n,p) \
00284 XDrawLines(xgedisplay,xgepixmap,xgegc,p,n,CoordModeOrigin)
00285 #define xgeDrawArc(w,h,x,y,a0,a1) \
00286 XDrawArc(xgedisplay,xgepixmap,xgegc,x,y,w,h,a0,a1)
00287 #define xgeFillArc(w,h,x,y,a0,a1) \
00288 XFillArc(xgedisplay,xgepixmap,xgegc,x,y,w,h,a0,a1)
00289 #define xgeDrawPoint(x,y) \
00290 XDrawPoint(xgedisplay,xgepixmap,xgegc,x,y)
00291 #define xgeDrawPoints(n,p) \
00292 XDrawPoints(xgedisplay,xgepixmap,xgegc,p,n,CoordModeOrigin)
00293 #define xgeFillPolygon(shape,n,p) \
00294 XFillPolygon(xgedisplay,xgepixmap,xgegc,p,n,shape,CoordModeOrigin)
00295
00296 #define xgeCopyRectOnScreen(w,h,x,y) \
00297 XCopyArea(xgedisplay,xgepixmap,xgewindow,xgegc,x,y,w,h,x,y)
00298 #define xgeRaiseWindow() \
00299 XRaiseWindow(xgedisplay,xgewindow)
00300 #define xgeResizeWindow(w,h) \
00301 XResizeWindow(xgedisplay,xgewindow,w,h)
00302 #define xgeMoveWindow(x,y) \
00303 XMoveWindow(xgedisplay,xgewindow,x,y)
00304
00305
00306 typedef struct xge_widget {
00307 int id;
00308 short w, h, x, y;
00309 void *data0, *data1, *data2;
00310 short xofs, yofs;
00311 char rpos;
00312 char window_num;
00313 short state;
00314 boolean (*msgproc) ( struct xge_widget*, int, int, short, short );
00315 void (*redraw) ( struct xge_widget*, boolean );
00316 struct xge_widget *next, *prev, *up;
00317 } xge_widget;
00318
00319 typedef boolean (*xge_message_proc) ( struct xge_widget *er,
00320 int msg, int key, short x, short y );
00321 typedef void (*xge_redraw_proc) ( struct xge_widget *er, boolean onscreen );
00322
00323
00324 extern int xge_winnum;
00325 extern unsigned int xge_mouse_buttons;
00326 extern int xge_mouse_x, xge_mouse_y;
00327 extern short xge_xx, xge_yy;
00328
00329 extern Display *xgedisplay;
00330 extern XVisualInfo *xgevisualinfo;
00331 extern Colormap xgecolormap;
00332 extern int xgescreen;
00333 extern Window xgeroot;
00334 extern Window xgewindow;
00335 extern Pixmap xgepixmap;
00336 extern GC xgegc;
00337 extern Visual *xgevisual;
00338 extern XSizeHints xgehints;
00339 extern Cursor xgecursor[];
00340 extern KeySym xgekeysym;
00341 extern XEvent xgeevent;
00342
00343 typedef struct {
00344 unsigned short r_bits, g_bits, b_bits;
00345 char nr_bits, ng_bits, nb_bits;
00346 unsigned char r_shift, g_shift, b_shift;
00347 unsigned char r_mask, g_mask, b_mask;
00348 float ar, ag, ab;
00349 } xge_rgbmap_bits;
00350 extern xge_rgbmap_bits xge_rgbmap;
00351
00352 extern float xge_aspect;
00353
00354 extern unsigned int xge_current_width, xge_current_height;
00355
00356 extern char *xge_p_name;
00357 extern char xge_done;
00358 extern short xge_prevx, xge_prevy;
00359
00360 extern xgecolour_int xge_foreground, xge_background;
00361 extern int xge_nplanes;
00362 extern xgecolour_int *xge_palette;
00363 extern const char *xge_colour_name[];
00364 extern xge_widget *xge_null_widget;
00365
00366
00367
00368 xge_widget *xge_NewWidget (
00369 char window_num, xge_widget *prev, int id,
00370 short w, short h, short x, short y,
00371 void *data0, void *data1,
00372 boolean (*msgproc)(xge_widget*, int, int, short, short),
00373 void (*redraw)(xge_widget*, boolean) );
00374 void xge_SetWidgetPositioning ( xge_widget *edr,
00375 char rpos, short xofs, short yofs );
00376
00377 void xge_DrawEmpty ( xge_widget *er, boolean onscreen );
00378 boolean xge_EmptyMsg ( xge_widget *er, int msg, int key, short x, short y );
00379 xge_widget *xge_NewEmptyWidget ( char window_num, xge_widget *prev, int id,
00380 short w, short h, short x, short y );
00381
00382 void xge_DrawMenu ( xge_widget *er, boolean onscreen );
00383 boolean xge_MenuMsg ( xge_widget *er, int msg, int key, short x, short y );
00384 boolean xge_PopupMenuMsg ( xge_widget *er, int msg, int key, short x, short y );
00385 xge_widget *xge_NewMenu ( char window_num, xge_widget *prev, int id,
00386 short w, short h, short x, short y,
00387 xge_widget *widgetlist );
00388 void xge_DrawFMenu ( xge_widget *er, boolean onscreen );
00389 xge_widget *xge_NewFMenu ( char window_num, xge_widget *prev, int id,
00390 short w, short h, short x, short y,
00391 xge_widget *widgetlist );
00392 void xge_SetMenuWidgets ( xge_widget *menu, xge_widget *widgetlist,
00393 boolean redraw );
00394
00395 void xge_DrawSwitch ( xge_widget *er, boolean onscreen );
00396 boolean xge_SwitchMsg ( xge_widget *er, int msg, int key, short x, short y );
00397 xge_widget *xge_NewSwitch ( char window_num, xge_widget *prev, int id,
00398 short w, short h, short x, short y,
00399 char *title, boolean *sw );
00400
00401 void xge_DrawButton ( xge_widget *er, boolean onscreen );
00402 boolean xge_ButtonMsg ( xge_widget *er, int msg, int key, short x, short y );
00403 xge_widget *xge_NewButton ( char window_num, xge_widget *prev, int id,
00404 short w, short h, short x, short y,
00405 char *title );
00406
00407 void xge_DrawSlidebarf ( xge_widget *er, boolean onscreen );
00408 boolean xge_SlidebarfMsg ( xge_widget *er, int msg, int key, short x, short y );
00409 xge_widget *xge_NewSlidebarf ( char window_num, xge_widget *prev, int id,
00410 short w, short h, short x, short y,
00411 float *data );
00412
00413 void xge_DrawSlidebarfRGB ( xge_widget *er, boolean onscreen );
00414 xge_widget *xge_NewSlidebarfRGB ( char window_num, xge_widget *prev, int id,
00415 short w, short h, short x, short y,
00416 float *data );
00417
00418 void xge_DrawVSlidebarf ( xge_widget *er, boolean onscreen );
00419 boolean xge_VSlidebarfMsg ( xge_widget *er, int msg, int key, short x, short y );
00420 xge_widget *xge_NewVSlidebarf ( char window_num, xge_widget *prev, int id,
00421 short w, short h, short x, short y,
00422 float *data );
00423
00424 void xge_DrawSlidebar2f ( xge_widget *er, boolean onscreen );
00425 boolean xge_Slidebar2fMsg ( xge_widget *er, int msg, int key, short x, short y );
00426 xge_widget *xge_NewSlidebar2f ( char window_num, xge_widget *prev, int id,
00427 short w, short h, short x, short y,
00428 float *data );
00429
00430 void xge_DrawVSlidebar2f ( xge_widget *er, boolean onscreen );
00431 boolean xge_VSlidebar2fMsg ( xge_widget *er, int msg, int key, short x, short y );
00432 xge_widget *xge_NewVSlidebar2f ( char window_num, xge_widget *prev, int id,
00433 short w, short h, short x, short y,
00434 float *data );
00435
00436 float xge_LinSlidebarValuef ( float xmin, float xmax, float t );
00437 float xge_LogSlidebarValuef ( float xmin, float xmax, float t );
00438
00439 void xge_DrawSlidebard ( xge_widget *er, boolean onscreen );
00440 boolean xge_SlidebardMsg ( xge_widget *er, int msg, int key, short x, short y );
00441 xge_widget *xge_NewSlidebard ( char window_num, xge_widget *prev, int id,
00442 short w, short h, short x, short y,
00443 double *data );
00444
00445 void xge_DrawSlidebardRGB ( xge_widget *er, boolean onscreen );
00446 xge_widget *xge_NewSlidebardRGB ( char window_num, xge_widget *prev, int id,
00447 short w, short h, short x, short y,
00448 double *data );
00449
00450 void xge_DrawVSlidebard ( xge_widget *er, boolean onscreen );
00451 boolean xge_VSlidebardMsg ( xge_widget *er, int msg, int key, short x, short y );
00452 xge_widget *xge_NewVSlidebard ( char window_num, xge_widget *prev, int id,
00453 short w, short h, short x, short y,
00454 double *data );
00455
00456 void xge_DrawSlidebar2d ( xge_widget *er, boolean onscreen );
00457 boolean xge_Slidebar2dMsg ( xge_widget *er, int msg, int key, short x, short y );
00458 xge_widget *xge_NewSlidebar2d ( char window_num, xge_widget *prev, int id,
00459 short w, short h, short x, short y,
00460 double *data );
00461
00462 void xge_DrawVSlidebar2d ( xge_widget *er, boolean onscreen );
00463 boolean xge_VSlidebar2dMsg ( xge_widget *er, int msg, int key, short x, short y );
00464 xge_widget *xge_NewVSlidebar2d ( char window_num, xge_widget *prev, int id,
00465 short w, short h, short x, short y,
00466 double *data );
00467
00468 double xge_LinSlidebarValued ( double xmin, double xmax, double t );
00469 double xge_LogSlidebarValued ( double xmin, double xmax, double t );
00470
00471 void xge_DrawDialf ( xge_widget *er, boolean onscreen );
00472 boolean xge_DialfMsg ( xge_widget *er, int msg, int key, short x, short y );
00473 xge_widget *xge_NewDialf ( char window_num, xge_widget *prev, int id,
00474 short w, short h, short x, short y,
00475 char *title, float *data );
00476
00477 void xge_DrawDiald ( xge_widget *er, boolean onscreen );
00478 boolean xge_DialdMsg ( xge_widget *er, int msg, int key, short x, short y );
00479 xge_widget *xge_NewDiald ( char window_num, xge_widget *prev, int id,
00480 short w, short h, short x, short y,
00481 char *title, double *data );
00482
00483 typedef struct xge_quatrotballf {
00484 xge_widget *er;
00485 quaternionf *q;
00486 trans3f *tr;
00487 vector3f axis;
00488 short xc, yc, r1, r2, R;
00489 boolean axis_ok, insert;
00490 } xge_quatrotballf;
00491
00492 void xge_DrawQuatRotBallf ( xge_widget *er, boolean onscreen );
00493 boolean xge_QuatRotBallfMsg ( xge_widget *er, int msg, int key, short x, short y );
00494 xge_widget *xge_NewQuatRotBallf ( char window_num, xge_widget *prev, int id,
00495 short w, short h, short x, short y, short R,
00496 xge_quatrotballf *qball, quaternionf *q, trans3f *tr,
00497 char *title );
00498
00499 typedef struct xge_quatrotballd {
00500 xge_widget *er;
00501 quaterniond *q;
00502 trans3d *tr;
00503 vector3d axis;
00504 short xc, yc, r1, r2, R;
00505 boolean axis_ok, insert;
00506 } xge_quatrotballd;
00507
00508 void xge_DrawQuatRotBalld ( xge_widget *er, boolean onscreen );
00509 boolean xge_QuatRotBalldMsg ( xge_widget *er, int msg, int key, short x, short y );
00510 xge_widget *xge_NewQuatRotBalld ( char window_num, xge_widget *prev, int id,
00511 short w, short h, short x, short y, short R,
00512 xge_quatrotballd *qball, quaterniond *q, trans3d *tr,
00513 char *title );
00514
00515 void xge_DrawText ( xge_widget *er, boolean onscreen );
00516 boolean xge_TextWidgetMsg ( xge_widget *er, int msg, int key, short x, short y );
00517 xge_widget *xge_NewTextWidget ( char window_num, xge_widget *prev, int id,
00518 short w, short h, short x, short y,
00519 char *text );
00520
00521 void xge_DrawRGBSamplef ( xge_widget *er, boolean onscreen );
00522 xge_widget *xge_NewRGBSamplef ( char window_num, xge_widget *prev, int id,
00523 short w, short h, short x, short y,
00524 float *data );
00525
00526 void xge_DrawRGBSampled ( xge_widget *er, boolean onscreen );
00527 xge_widget *xge_NewRGBSampled ( char window_num, xge_widget *prev, int id,
00528 short w, short h, short x, short y,
00529 double *data );
00530
00531 typedef struct xge_string_ed {
00532 xge_widget *er;
00533 short maxlength,
00534 chdisp,
00535 start,
00536 pos;
00537 } xge_string_ed;
00538
00539 void xge_DrawStringEd ( xge_widget *er, boolean onscreen );
00540 boolean xge_StringEdMsg ( xge_widget *er, int msg, int key, short x, short y );
00541 xge_widget *xge_NewStringEd ( char window_num, xge_widget *prev, int id,
00542 short w, short h, short x, short y,
00543 short maxlength, char *text, xge_string_ed *ed );
00544
00545 typedef struct xge_int_widget {
00546 xge_widget *er;
00547 int minvalue, maxvalue;
00548 char *title;
00549 } xge_int_widget;
00550
00551 void xge_DrawIntWidget ( xge_widget *er, boolean onscreen );
00552 boolean xge_IntWidgetMsg ( xge_widget *er, int msg, int key, short x, short y );
00553 xge_widget *xge_NewIntWidget ( char window_num, xge_widget *prev, int id,
00554 short w, short h, short x, short y,
00555 int minvalue, int maxvalue,
00556 xge_int_widget *iw, char *title, int *valptr );
00557
00558 #define xge_LISTDIST 16
00559
00560 typedef struct xge_listbox {
00561 xge_widget *er;
00562 char dlistnpos;
00563 char maxitl;
00564 short nitems;
00565 short fditem;
00566 short currentitem;
00567 int *itemind;
00568 char *itemstr;
00569 xgecolour_int bk0, bk1;
00570 } xge_listbox;
00571
00572 void xge_DrawListBox ( xge_widget *er, boolean onscreen );
00573 boolean xge_ListBoxMsg ( xge_widget *er, int msg, int key, short x, short y );
00574 xge_widget *xge_NewListBox ( char window_num, xge_widget *prev, int id,
00575 short w, short h, short x, short y,
00576 xge_listbox *listbox );
00577 void xge_ClearListBox ( xge_listbox *lbox );
00578 void xge_ShortenString ( const char *s, char *buf, int maxlen );
00579 boolean xge_GetCurrentListBoxString ( xge_listbox *lbox, char *string );
00580 int xge_MoveInListBox ( xge_listbox *lbox, short amount );
00581
00582 boolean xge_SetupFileList ( xge_listbox *lbox, const char *dir,
00583 const char *filter );
00584 boolean xge_SetupDirList ( xge_listbox *lbox, const char *dir,
00585 const char *filter, const char *prevdir );
00586 boolean xge_FilterMatches ( const char *name, const char *filter );
00587
00588
00589 #define xge_2DWIN_MIN_ZOOM 0.01
00590 #define xge_2DWIN_MAX_ZOOM 100.0
00591
00592 #define xge_2DWIN_NO_TOOL 0
00593 #define xge_2DWIN_MOVING_TOOL 1
00594 #define xge_2DWIN_SCALING_TOOL 2
00595 #define xge_2DWIN_ROTATING_TOOL 3
00596 #define xge_2DWIN_SHEAR_TOOL 4
00597 #define xge_2DWIN_SELECTING_TOOL 5
00598 #define xge_2DWIN_PANNING_TOOL 6
00599 #define xge_2DWIN_SPECIAL_SELECTING_TOOL 7
00600 #define xge_2DWIN_SPECIAL_TRANS_TOOL 8
00601
00602 typedef struct xge_2Dwinf {
00603 xge_widget *er;
00604 CameraRecf CPos;
00605 Box2f DefBBox, RefBBox;
00606 boolean panning, selecting_mode, special_selecting_mode;
00607 boolean display_coord, inside;
00608 boolean moving_tool, scaling_tool, rotating_tool, shear_tool,
00609 special_trans_tool;
00610 char current_tool;
00611 char tool_mode;
00612 int current_tab, current_point;
00613 short xx, yy;
00614 float zoom;
00615 Box2s selection_rect;
00616 point2f saved_centre;
00617 point2f scaling_centre;
00618 vector2f scaling_factors;
00619 short scaling_size;
00620 point2f rotating_centre;
00621 short rotating_radius;
00622 vector2f trans_params;
00623 point2f shear_centre;
00624 vector2f shear_axis[2];
00625 float shear_radius;
00626 trans2f gwtrans;
00627 } xge_2Dwinf;
00628
00629 boolean xge_2DwinfMsg ( xge_widget *er, int msg, int key, short x, short y );
00630 xge_widget *xge_New2Dwinf ( char window_num, xge_widget *prev, int id,
00631 short w, short h, short x, short y,
00632 xge_2Dwinf *_2Dwin,
00633 void (*redraw)(xge_widget*, boolean) );
00634
00635 void xge_2DwinfSetDefBBox ( xge_2Dwinf *_2Dwin,
00636 float x0, float x1, float y0, float y1 );
00637 void xge_2DwinfSetupProjection ( xge_2Dwinf *_2Dwin );
00638 void xge_2DwinfPan ( xge_widget *er, short x, short y );
00639 void xge_2DwinfZoom ( xge_widget *er, short y );
00640 void xge_2DwinfInitProjection ( xge_2Dwinf *_2Dwin,
00641 float x0, float x1, float y0, float y1 );
00642 void xge_2DwinfResetGeomWidgets ( xge_2Dwinf *_2Dwin );
00643 void xge_2DwinfResetGeomWidgetPos ( xge_2Dwinf *_2Dwin );
00644 void xge_2DwinfEnableGeomWidget ( xge_2Dwinf *_2Dwin, char tool );
00645 void xge_2DwinfDrawGeomWidgets ( xge_widget *er );
00646 char xge_2DwinfIsItAGeomWidget ( xge_2Dwinf *_2Dwin, int key, short x, short y );
00647 void xge_2DwinfMoveGeomWidget ( xge_2Dwinf *_2Dwin, short x, short y );
00648 boolean xge_2DwinfApplyGeomWidget ( xge_2Dwinf *_2Dwin, short x, short y,
00649 boolean alt );
00650 void xge_2DwinfExitWidgetMode ( xge_2Dwinf *_2Dwin );
00651 void xge_2DwinfResetGeomWidget ( xge_2Dwinf *_2Dwin );
00652 void xge_2DwinfDrawCursorPos ( xge_2Dwinf *_2Dwin, short x, short y );
00653
00654
00655 typedef struct xge_2Dwind {
00656 xge_widget *er;
00657 CameraRecd CPos;
00658 Box2d DefBBox, RefBBox;
00659 boolean panning, selecting_mode, special_selecting_mode;
00660 boolean display_coord, inside;
00661 boolean moving_tool, scaling_tool, rotating_tool, shear_tool,
00662 special_trans_tool;
00663 char current_tool;
00664 char tool_mode;
00665 int current_tab, current_point;
00666 short xx, yy;
00667 double zoom;
00668 Box2s selection_rect;
00669 point2d saved_centre;
00670 point2d scaling_centre;
00671 vector2d scaling_factors;
00672 short scaling_size;
00673 point2d rotating_centre;
00674 short rotating_radius;
00675 vector2d trans_params;
00676 point2d shear_centre;
00677 vector2d shear_axis[2];
00678 double shear_radius;
00679 trans2d gwtrans;
00680 } xge_2Dwind;
00681
00682 boolean xge_2DwindMsg ( xge_widget *er, int msg, int key, short x, short y );
00683 xge_widget *xge_New2Dwind ( char window_num, xge_widget *prev, int id,
00684 short w, short h, short x, short y,
00685 xge_2Dwind *_2Dwin,
00686 void (*redraw)(xge_widget*, boolean) );
00687
00688 void xge_2DwindSetDefBBox ( xge_2Dwind *_2Dwin,
00689 double x0, double x1, double y0, double y1 );
00690 void xge_2DwindSetupProjection ( xge_2Dwind *_2Dwin );
00691 void xge_2DwindPan ( xge_widget *er, short x, short y );
00692 void xge_2DwindZoom ( xge_widget *er, short y );
00693 void xge_2DwindInitProjection ( xge_2Dwind *_2Dwin,
00694 double x0, double x1, double y0, double y1 );
00695 void xge_2DwindResetGeomWidgets ( xge_2Dwind *_2Dwin );
00696 void xge_2DwindResetGeomWidgetPos ( xge_2Dwind *_2Dwin );
00697 void xge_2DwindEnableGeomWidget ( xge_2Dwind *_2Dwin, char tool );
00698 void xge_2DwindDrawGeomWidgets ( xge_widget *er );
00699 char xge_2DwindIsItAGeomWidget ( xge_2Dwind *_2Dwin, int key, short x, short y );
00700 void xge_2DwindMoveGeomWidget ( xge_2Dwind *_2Dwin, short x, short y );
00701 boolean xge_2DwindApplyGeomWidget ( xge_2Dwind *_2Dwin, short x, short y,
00702 boolean alt );
00703 void xge_2DwindExitWidgetMode ( xge_2Dwind *_2Dwin );
00704 void xge_2DwindResetGeomWidget ( xge_2Dwind *_2Dwin );
00705 void xge_2DwindDrawCursorPos ( xge_2Dwind *_2Dwin, short x, short y );
00706
00707
00708 typedef struct xge_fourww {
00709 xge_widget *er;
00710 xge_widget *win[4];
00711 float xsfr, ysfr;
00712 short splitx, splity;
00713 boolean resized;
00714 char zoomwin;
00715 } xge_fourww;
00716
00717 boolean xge_CompSizeFourWW ( xge_widget *er, char cs );
00718 void xge_DrawFourWW ( xge_widget *er, boolean onscreen );
00719 boolean xge_FourWWMsg ( xge_widget *er, int msg, int key, short x, short y );
00720 xge_widget *xge_NewFourWW ( char window_num, xge_widget *prev, int id,
00721 short w, short h, short x, short y,
00722 xge_widget *ww, xge_fourww *fwwdata );
00723
00724
00725 #define xge_3DWIN_MIN_PARZOOM 0.01
00726 #define xge_3DWIN_MAX_PARZOOM 100.0
00727 #define xge_3DWIN_MIN_ZOOM 0.1
00728 #define xge_3DWIN_MAX_ZOOM 1000.0
00729
00730 #define xge_3DWIN_NO_TOOL xge_2DWIN_NO_TOOL
00731 #define xge_3DWIN_MOVING_TOOL xge_2DWIN_MOVING_TOOL
00732 #define xge_3DWIN_SCALING_TOOL xge_2DWIN_SCALING_TOOL
00733 #define xge_3DWIN_ROTATING_TOOL xge_2DWIN_ROTATING_TOOL
00734 #define xge_3DWIN_SHEAR_TOOL xge_2DWIN_SHEAR_TOOL
00735 #define xge_3DWIN_SELECTING_TOOL xge_2DWIN_SELECTING_TOOL
00736 #define xge_3DWIN_PANNING_TOOL xge_2DWIN_PANNING_TOOL
00737 #define xge_3DWIN_SPECIAL_SELECTING_TOOL xge_2DWIN_SPECIAL_SELECTING_TOOL
00738 #define xge_3DWIN_SPECIAL_TRANS_TOOL xge_2DWIN_SPECIAL_TRANS_TOOL
00739
00740 typedef struct xge_3Dwinf {
00741 xge_fourww fww;
00742 xge_widget *cwin[4];
00743 CameraRecf CPos[5];
00744 Box3f DefBBox, RefBBox, WinBBox, PerspBBox;
00745 boolean panning, selecting_mode, special_selecting_mode;
00746 boolean display_coord;
00747 signed char CoordWin;
00748 boolean moving_tool, scaling_tool, rotating_tool, shear_tool,
00749 special_trans_tool;
00750 char current_tool;
00751 char tool_mode;
00752 int current_tab, current_point;
00753 short xx, yy;
00754 float perspzoom;
00755 Box2s selection_rect;
00756 point3f saved_centre;
00757 point3f scaling_centre;
00758 vector3f scaling_factors;
00759 short scaling_size;
00760 point3f rotating_centre;
00761 short rotating_radius;
00762 vector3f trans_params;
00763 point3f shear_centre;
00764 vector3f shear_axis[3];
00765 float shear_radius;
00766 trans3f gwtrans;
00767 } xge_3Dwinf;
00768
00769 xge_widget *xge_New3Dwinf ( char window_num, xge_widget *prev, int id,
00770 short w, short h, short x, short y,
00771 xge_3Dwinf *_3Dwin,
00772 void (*pararedraw)(xge_widget*, boolean),
00773 void (*perspredraw)(xge_widget*, boolean) );
00774
00775 void xge_3DwinfSetDefBBox ( xge_3Dwinf *_3Dwin, float x0, float x1,
00776 float y0, float y1, float z0, float z1 );
00777 void xge_3DwinfSetupParProj ( xge_3Dwinf *_3Dwin, Box3f *bbox );
00778 void xge_3DwinfSetupPerspProj ( xge_3Dwinf *_3Dwin, boolean resetpos );
00779 void xge_3DwinfUpdatePerspProj ( xge_3Dwinf *_3Dwin );
00780 void xge_3DwinfPanParWindows ( xge_widget *er, short x, short y );
00781 void xge_3DwinfZoomParWindows ( xge_widget *er, short y );
00782 void xge_3DwinfPanPerspWindow ( xge_widget *er, short x, short y );
00783 void xge_3DwinfInitProjections ( xge_3Dwinf *_3Dwin,
00784 float x0, float x1, float y0, float y1, float z0, float z1 );
00785 void xge_3DwinfResetGeomWidgets ( xge_3Dwinf *_3Dwin );
00786 void xge_3DwinfResetGeomWidgetPos ( xge_3Dwinf *_3Dwin );
00787 void xge_3DwinfEnableGeomWidget ( xge_3Dwinf *_3Dwin, char tool );
00788 void xge_3DwinfDrawCursorPos ( xge_3Dwinf *_3Dwin,
00789 int id, short x, short y );
00790 void xge_3DwinfDrawSelectionRect ( xge_widget *er );
00791 void xge_3DwinfDrawGeomWidgets ( xge_widget *er );
00792 char xge_3DwinfIsItAGeomWidget ( xge_3Dwinf *_3Dwin, int id,
00793 int key, short x, short y );
00794 void xge_3DwinfMoveGeomWidget ( xge_3Dwinf *_3Dwin, int id, short x, short y );
00795 boolean xge_3DwinfApplyGeomWidget ( xge_3Dwinf *_3Dwin, int id, short x, short y,
00796 boolean alt );
00797 void xge_3DwinfExitWidgetMode ( xge_3Dwinf *_3Dwin );
00798 void xge_3DwinfResetGeomWidget ( xge_3Dwinf *_3Dwin );
00799 void xge_3DwinfSavePerspCamera ( xge_3Dwinf *_3Dwin );
00800 void xge_3DwinfSwapPerspCameras ( xge_3Dwinf *_3Dwin );
00801
00802
00803 typedef struct xge_3Dwind {
00804 xge_fourww fww;
00805 xge_widget *cwin[4];
00806 CameraRecd CPos[5];
00807 Box3d DefBBox, RefBBox, WinBBox, PerspBBox;
00808 boolean panning, selecting_mode, special_selecting_mode;
00809 boolean display_coord;
00810 signed char CoordWin;
00811 boolean moving_tool, scaling_tool, rotating_tool, shear_tool,
00812 special_trans_tool;
00813 char current_tool;
00814 char tool_mode;
00815 int current_tab, current_point;
00816 short xx, yy;
00817 double perspzoom;
00818 Box2s selection_rect;
00819 point3d saved_centre;
00820 point3d scaling_centre;
00821 vector3d scaling_factors;
00822 short scaling_size;
00823 point3d rotating_centre;
00824 short rotating_radius;
00825 vector3d trans_params;
00826 point3d shear_centre;
00827 vector3d shear_axis[3];
00828 double shear_radius;
00829 trans3d gwtrans;
00830 } xge_3Dwind;
00831
00832 xge_widget *xge_New3Dwind ( char window_num, xge_widget *prev, int id,
00833 short w, short h, short x, short y,
00834 xge_3Dwind *_3Dwin,
00835 void (*pararedraw)(xge_widget*, boolean),
00836 void (*perspredraw)(xge_widget*, boolean) );
00837
00838 void xge_3DwindSetDefBBox ( xge_3Dwind *_3Dwin, double x0, double x1,
00839 double y0, double y1, double z0, double z1 );
00840 void xge_3DwindSetupParProj ( xge_3Dwind *_3Dwin, Box3d *bbox );
00841 void xge_3DwindSetupPerspProj ( xge_3Dwind *_3Dwin, boolean resetpos );
00842 void xge_3DwindUpdatePerspProj ( xge_3Dwind *_3Dwin );
00843 void xge_3DwindPanParWindows ( xge_widget *er, short x, short y );
00844 void xge_3DwindZoomParWindows ( xge_widget *er, short y );
00845 void xge_3DwindPanPerspWindow ( xge_widget *er, short x, short y );
00846 void xge_3DwindInitProjections ( xge_3Dwind *_3Dwin,
00847 double x0, double x1, double y0, double y1, double z0, double z1 );
00848 void xge_3DwindResetGeomWidgets ( xge_3Dwind *_3Dwin );
00849 void xge_3DwindResetGeomWidgetPos ( xge_3Dwind *_3Dwin );
00850 void xge_3DwindEnableGeomWidget ( xge_3Dwind *_3Dwin, char tool );
00851 void xge_3DwindDrawCursorPos ( xge_3Dwind *_3Dwin,
00852 int id, short x, short y );
00853 void xge_3DwindDrawSelectionRect ( xge_widget *er );
00854 void xge_3DwindDrawGeomWidgets ( xge_widget *er );
00855 char xge_3DwindIsItAGeomWidget ( xge_3Dwind *_3Dwin, int id,
00856 int key, short x, short y );
00857 void xge_3DwindMoveGeomWidget ( xge_3Dwind *_3Dwin, int id, short x, short y );
00858 boolean xge_3DwindApplyGeomWidget ( xge_3Dwind *_3Dwin, int id, short x, short y,
00859 boolean alt );
00860 void xge_3DwindExitWidgetMode ( xge_3Dwind *_3Dwin );
00861 void xge_3DwindResetGeomWidget ( xge_3Dwind *_3Dwin );
00862 void xge_3DwindSavePerspCamera ( xge_3Dwind *_3Dwin );
00863 void xge_3DwindSwapPerspCameras ( xge_3Dwind *_3Dwin );
00864
00865
00866 #define xge_KNOTWIN_MIN_SCALE 0.01
00867 #define xge_KNOTWIN_MAX_SCALE 100.0
00868 #define xge_KNOT_EPS 1.0e-4
00869
00870 typedef struct {
00871 xge_widget *er;
00872 boolean panning, display_coord, moving_many, locked;
00873 boolean closed, altkn, switchkn;
00874 float akm, bkm, umin, umax, knotscf, knotshf;
00875 int clcK;
00876 float clcT;
00877 unsigned char current_mult;
00878 short xx;
00879 int maxknots, lastknot, degree;
00880 float *knots;
00881 int maxaltknots, lastaltknot, altdegree;
00882 float *altknots;
00883 float newknot;
00884 int current_knot;
00885 } xge_KnotWinf;
00886
00887 void xge_DrawKnotWinf ( xge_widget *er, boolean onscreen );
00888 boolean xge_KnotWinfMsg ( xge_widget *er, int msg, int key, short x, short y );
00889 xge_widget *xge_NewKnotWinf ( char window_num, xge_widget *prev, int id,
00890 short w, short h, short x, short y,
00891 xge_KnotWinf *knw, int maxknots, float *knots );
00892
00893 void xge_KnotWinfDrawCursorPos ( xge_KnotWinf *knw );
00894 void xge_KnotWinfDrawAxis ( xge_KnotWinf *knw );
00895 void xge_KnotWinfDrawKnots ( xge_KnotWinf *knw );
00896 void xge_KnotWinfInitMapping ( xge_KnotWinf *knw, float umin, float umax );
00897 void xge_KnotWinfZoom ( xge_KnotWinf *knw, float scf );
00898 void xge_KnotWinfPan ( xge_KnotWinf *knw, int dxi );
00899 void xge_KnotWinfFindMapping ( xge_KnotWinf *knw );
00900 void xge_KnotWinfResetMapping ( xge_KnotWinf *knw );
00901 short xge_KnotWinfMapKnot ( xge_KnotWinf *knw, float u );
00902 float xge_KnotWinfUnmapKnot ( xge_KnotWinf *knw, short xi );
00903 boolean xge_KnotWinfFindNearestKnot ( xge_KnotWinf *knw, int x, int y );
00904 boolean xge_KnotWinfSetKnot ( xge_KnotWinf *knw, short x );
00905 boolean xge_KnotWinfInsertKnot ( xge_KnotWinf *knw, short x );
00906 boolean xge_KnotWinfRemoveKnot ( xge_KnotWinf *knw );
00907 void xge_KnotWinfSetAltKnots ( xge_KnotWinf *knw,
00908 int altmaxkn, int lastaltkn, int altdeg, float *altknots );
00909 void xge_KnotWinfSwitchAltKnots ( xge_KnotWinf *knw );
00910
00911
00912 typedef struct {
00913 xge_widget *er;
00914 boolean panning, display_coord, moving_many, locked;
00915 boolean closed, altkn, switchkn;
00916 double akm, bkm, umin, umax, knotscf, knotshf;
00917 int clcK;
00918 double clcT;
00919 unsigned char current_mult;
00920 short xx;
00921 int maxknots, lastknot, degree;
00922 double *knots;
00923 int maxaltknots, lastaltknot, altdegree;
00924 double *altknots;
00925 double newknot;
00926 int current_knot;
00927 } xge_KnotWind;
00928
00929 void xge_DrawKnotWind ( xge_widget *er, boolean onscreen );
00930 boolean xge_KnotWindMsg ( xge_widget *er, int msg, int key, short x, short y );
00931 xge_widget *xge_NewKnotWind ( char window_num, xge_widget *prev, int id,
00932 short w, short h, short x, short y,
00933 xge_KnotWind *knw, int maxknots, double *knots );
00934
00935 void xge_KnotWindDrawCursorPos ( xge_KnotWind *knw );
00936 void xge_KnotWindDrawAxis ( xge_KnotWind *knw );
00937 void xge_KnotWindDrawKnots ( xge_KnotWind *knw );
00938 void xge_KnotWindInitMapping ( xge_KnotWind *knw, double umin, double umax );
00939 void xge_KnotWindZoom ( xge_KnotWind *knw, double scf );
00940 void xge_KnotWindPan ( xge_KnotWind *knw, int dxi );
00941 void xge_KnotWindFindMapping ( xge_KnotWind *knw );
00942 void xge_KnotWindResetMapping ( xge_KnotWind *knw );
00943 short xge_KnotWindMapKnot ( xge_KnotWind *knw, double u );
00944 double xge_KnotWindUnmapKnot ( xge_KnotWind *knw, short xi );
00945 boolean xge_KnotWindFindNearestKnot ( xge_KnotWind *knw, int x, int y );
00946 boolean xge_KnotWindSetKnot ( xge_KnotWind *knw, short x );
00947 boolean xge_KnotWindInsertKnot ( xge_KnotWind *knw, short x );
00948 boolean xge_KnotWindRemoveKnot ( xge_KnotWind *knw );
00949 void xge_KnotWindSetAltKnots ( xge_KnotWind *knw,
00950 int altmaxkn, int lastaltkn, int altdeg, double *altknots );
00951 void xge_KnotWindSwitchAltKnots ( xge_KnotWind *knw );
00952
00953
00954 typedef struct {
00955 xge_widget *er;
00956 CameraRecf CPos;
00957 Box2f DefBBox, RefBBox;
00958 point3f centre;
00959 boolean panning, selecting_mode, moving_many, locked_u, locked_v;
00960 boolean display_coord, inside;
00961 unsigned char current_mult;
00962 int current_item;
00963 short knot_margin;
00964 short xx, yy;
00965 Box2s selection_rect;
00966 boolean closed_u, closed_v;
00967 int clcKu, clcKv;
00968 float clcTu, clcTv;
00969 int maxknots_u, lastknot_u, degree_u;
00970 float *knots_u;
00971 int maxknots_v, lastknot_v, degree_v;
00972 float *knots_v;
00973 float newknot;
00974 boolean altknu, switchknu, altknv, switchknv;
00975 int altmaxknots_u, altlastknot_u, altdeg_u;
00976 float *altknots_u;
00977 int altmaxknots_v, altlastknot_v, altdeg_v;
00978 float *altknots_v;
00979 } xge_T2KnotWinf;
00980
00981 boolean xge_T2KnotWinfMsg ( xge_widget *er, int msg, int key, short x, short y );
00982 xge_widget *xge_NewT2KnotWinf ( char window_num, xge_widget *prev, int id,
00983 short w, short h, short x, short y,
00984 short knot_margin,
00985 xge_T2KnotWinf *T2win,
00986 void (*redraw)(xge_widget*, boolean),
00987 int maxknots_u, float *knots_u,
00988 int maxknots_v, float *knots_v );
00989
00990 void xge_T2KnotWinfDrawKnots ( xge_T2KnotWinf *T2win );
00991 void xge_T2KnotWinfSetupMapping ( xge_T2KnotWinf *T2win );
00992 void xge_T2KnotWinfInitMapping ( xge_T2KnotWinf *T2win,
00993 float umin, float umax, float vmin, float vmax );
00994 void xge_T2KnotWinfZoom ( xge_T2KnotWinf *T2win, short y );
00995 boolean xge_T2KnotWinfPan ( xge_T2KnotWinf *T2win, short x, short y );
00996 void xge_T2KnotWinfFindMapping ( xge_T2KnotWinf *T2win );
00997 void xge_T2KnotWinfResetMapping ( xge_T2KnotWinf *T2win );
00998
00999 char xge_T2KnotWinfFindDomWinRegion ( xge_T2KnotWinf *T2win, int x, int y );
01000 char xge_T2KnotWinfFindNearestKnot ( xge_T2KnotWinf *T2win, int x, int y );
01001 short xge_T2KnotWinfMapKnotU ( xge_T2KnotWinf *T2win, float u );
01002 float xge_T2KnotWinfUnmapKnotU ( xge_T2KnotWinf *T2win, short xi );
01003 short xge_T2KnotWinfMapKnotV ( xge_T2KnotWinf *T2win, float v );
01004 float xge_T2KnotWinfUnmapKnotV ( xge_T2KnotWinf *T2win, short eta );
01005 boolean xge_T2KnotWinfSetKnotU ( xge_T2KnotWinf *T2win, short x );
01006 boolean xge_T2KnotWinfInsertKnotU ( xge_T2KnotWinf *T2win, short x );
01007 boolean xge_T2KnotWinfRemoveKnotU ( xge_T2KnotWinf *T2win );
01008 boolean xge_T2KnotWinfSetKnotV ( xge_T2KnotWinf *T2win, short y );
01009 boolean xge_T2KnotWinfInsertKnotV ( xge_T2KnotWinf *T2win, short y );
01010 boolean xge_T2KnotWinfRemoveKnotV ( xge_T2KnotWinf *T2win );
01011 void xge_T2KnotWinfSelect ( xge_T2KnotWinf *T2win,
01012 short x0, short x1, short y0, short y1 );
01013 void xge_T2KnotWinfUnselect ( xge_T2KnotWinf *T2win,
01014 short x0, short x1, short y0, short y1 );
01015
01016 void xge_T2KnotWinfSetAltKnots ( xge_T2KnotWinf *T2win,
01017 int altmaxknu, int lastaltknu, int altdegu, float *altknotsu,
01018 int altmaxknv, int lastaltknv, int altdegv, float *altknotsv );
01019 void xge_T2KnotWinfSwitchAltKnots ( xge_T2KnotWinf *T2win,
01020 boolean altu, boolean altv );
01021 void xge_T2KnotWinfDrawCursorPos ( xge_T2KnotWinf *T2win, short x, short y );
01022
01023
01024 typedef struct {
01025 xge_widget *er;
01026 CameraRecd CPos;
01027 Box2d DefBBox, RefBBox;
01028 point3d centre;
01029 boolean panning, selecting_mode, moving_many, locked_u, locked_v;
01030 boolean display_coord, inside;
01031 unsigned char current_mult;
01032 int current_item;
01033 short knot_margin;
01034 short xx, yy;
01035 Box2s selection_rect;
01036 boolean closed_u, closed_v;
01037 int clcKu, clcKv;
01038 double clcTu, clcTv;
01039 int maxknots_u, lastknot_u, degree_u;
01040 double *knots_u;
01041 int maxknots_v, lastknot_v, degree_v;
01042 double *knots_v;
01043 double newknot;
01044 boolean altknu, switchknu, altknv, switchknv;
01045 int altmaxknots_u, altlastknot_u, altdeg_u;
01046 double *altknots_u;
01047 int altmaxknots_v, altlastknot_v, altdeg_v;
01048 double *altknots_v;
01049 } xge_T2KnotWind;
01050
01051 boolean xge_T2KnotWindMsg ( xge_widget *er, int msg, int key, short x, short y );
01052 xge_widget *xge_NewT2KnotWind ( char window_num, xge_widget *prev, int id,
01053 short w, short h, short x, short y,
01054 short knot_margin,
01055 xge_T2KnotWind *T2win,
01056 void (*redraw)(xge_widget*, boolean),
01057 int maxknots_u, double *knots_u,
01058 int maxknots_v, double *knots_v );
01059
01060 void xge_T2KnotWindDrawKnots ( xge_T2KnotWind *T2win );
01061 void xge_T2KnotWindSetupMapping ( xge_T2KnotWind *T2win );
01062 void xge_T2KnotWindInitMapping ( xge_T2KnotWind *T2win,
01063 double umin, double umax, double vmin, double vmax );
01064 void xge_T2KnotWindZoom ( xge_T2KnotWind *T2win, short y );
01065 boolean xge_T2KnotWindPan ( xge_T2KnotWind *T2win, short x, short y );
01066 void xge_T2KnotWindFindMapping ( xge_T2KnotWind *T2win );
01067 void xge_T2KnotWindResetMapping ( xge_T2KnotWind *T2win );
01068
01069 char xge_T2KnotWindFindDomWinRegion ( xge_T2KnotWind *T2win, int x, int y );
01070 char xge_T2KnotWindFindNearestKnot ( xge_T2KnotWind *T2win, int x, int y );
01071 short xge_T2KnotWindMapKnotU ( xge_T2KnotWind *T2win, double u );
01072 double xge_T2KnotWindUnmapKnotU ( xge_T2KnotWind *T2win, short xi );
01073 short xge_T2KnotWindMapKnotV ( xge_T2KnotWind *T2win, double v );
01074 double xge_T2KnotWindUnmapKnotV ( xge_T2KnotWind *T2win, short eta );
01075 boolean xge_T2KnotWindSetKnotU ( xge_T2KnotWind *T2win, short x );
01076 boolean xge_T2KnotWindInsertKnotU ( xge_T2KnotWind *T2win, short x );
01077 boolean xge_T2KnotWindRemoveKnotU ( xge_T2KnotWind *T2win );
01078 boolean xge_T2KnotWindSetKnotV ( xge_T2KnotWind *T2win, short y );
01079 boolean xge_T2KnotWindInsertKnotV ( xge_T2KnotWind *T2win, short y );
01080 boolean xge_T2KnotWindRemoveKnotV ( xge_T2KnotWind *T2win );
01081 void xge_T2KnotWindSelect ( xge_T2KnotWind *T2win,
01082 short x0, short x1, short y0, short y1 );
01083 void xge_T2KnotWindUnselect ( xge_T2KnotWind *T2win,
01084 short x0, short x1, short y0, short y1 );
01085
01086 void xge_T2KnotWindSetAltKnots ( xge_T2KnotWind *T2win,
01087 int altmaxknu, int lastaltknu, int altdegu, double *altknotsu,
01088 int altmaxknv, int lastaltknv, int altdegv, double *altknotsv );
01089 void xge_T2KnotWindSwitchAltKnots ( xge_T2KnotWind *T2win,
01090 boolean altu, boolean altv );
01091 void xge_T2KnotWindDrawCursorPos ( xge_T2KnotWind *T2win, short x, short y );
01092
01093
01094 typedef struct {
01095 xge_widget *er;
01096 xge_widget *contents, *clipw, *xsl, *ysl;
01097 float x, y;
01098 boolean xslon, yslon;
01099 } xge_scroll_widget;
01100
01101 void xge_SetupScrollWidgetPos ( xge_widget *er );
01102 void xge_DrawScrollWidget ( xge_widget *er, boolean onscreen );
01103 boolean xge_ScrollWidgetMsg ( xge_widget *er, int msg, int key, short x, short y );
01104 xge_widget *xge_NewScrollWidget ( char window_num, xge_widget *prev, int id,
01105 short w, short h, short x, short y,
01106 xge_scroll_widget *sw, xge_widget *contents );
01107
01108
01109 void xge_AddPopup ( xge_widget *er );
01110 void xge_RemovePopup ( boolean redraw );
01111 void xge_RemovePopups ( boolean redraw );
01112 boolean xge_IsPopupOn ( xge_widget *er );
01113
01114
01115
01116 void _xge_DisplayErrorMessage ( char *message, xgecolour_int bk, int key );
01117 void xge_DisplayErrorMessage ( char *message, int key );
01118 void xge_DisplayWarningMessage ( char *message, int key );
01119 void xge_DisplayInfoMessage ( char **msglines, int key );
01120
01121
01122 void xge_OutPixels ( const xpoint *buf, int n );
01123 void xge_DrawBC2f ( int n, const point2f *cp );
01124 void xge_DrawBC2Rf ( int n, const point3f *cp );
01125 void xge_DrawBC2d ( int n, const point2d *cp );
01126 void xge_DrawBC2Rd ( int n, const point3d *cp );
01127
01128 int xge_NewWindow ( char *title );
01129 boolean xge_SetWindow ( int win );
01130 int xge_CurrentWindow ( void );
01131 void xge_SetWinEdRect ( xge_widget *edr );
01132
01133 int xge_NewCursor ( int shape );
01134 void xge_SetWindowCursor ( int win, Cursor cursor );
01135 void xge_SetCurrentWindowCursor ( Cursor cursor );
01136 void xge_SetOtherWindowsCursor ( Cursor cursor );
01137
01138 void xge_RedrawPopups ( void );
01139 void xge_Redraw ( void );
01140 void xge_RedrawAll ( void );
01141
01142 boolean xge_PointInRect ( xge_widget *edr, short x, short y );
01143 void xge_BoundPoint ( xge_widget *er, short *x, short *y );
01144 boolean xge_RectanglesIntersect ( short wa, short ha, short xa, short ya,
01145 short wb, short hb, short xb, short yb );
01146
01147 boolean xge_IntersectXRectangles ( XRectangle *r1, XRectangle *r2 );
01148 boolean xge_SetClipping ( xge_widget *edr );
01149 void xge_ResetClipping ( void );
01150
01151 void xge_RepositionWidgets ( short w, short h, short x, short y,
01152 xge_widget *edr );
01153
01154 xgecolour_int xge_PixelColourf ( float r, float g, float b );
01155 xgecolour_int xge_PixelColour ( byte r, byte g, byte b );
01156 void xge_GetPixelColour ( xgecolour_int pixel, byte *r, byte *g, byte *b );
01157 void xge_GetPixelColourf ( xgecolour_int pixel, float *r, float *g, float *b );
01158
01159 void xge_DrawVShadedRect ( short w, short h, short x, short y,
01160 xgecolour_int c0, xgecolour_int c1, short nb );
01161 void xge_DrawHShadedRect ( short w, short h, short x, short y,
01162 xgecolour_int c0, xgecolour_int c1, short nb );
01163
01164 void xge_OrderSelectionRect ( Box2s *sel_rect );
01165 void xge_DrawGeomWinBackground ( xge_widget *er );
01166 void xge_DrawGeomWinFrame ( xge_widget *er, boolean onscreen );
01167 void xge_DrawGeomWinSelectionRect ( xge_widget *er, Box2s *sel_rect );
01168
01169 void xge_GrabFocus ( xge_widget *er, boolean all );
01170 void xge_ReleaseFocus ( xge_widget *er );
01171 xge_widget *xge_GetFocusWidget ( char win );
01172
01173 void xge_GetWindowSize ( void );
01174 void xge_MessageLoop ( void );
01175 void xge_PostIdleCommand ( unsigned int key, short x, short y );
01176 void xge_FlushFromAThread ( void );
01177
01178 void xge_dispatch_message ( unsigned int msg, unsigned int key, short x, short y );
01179 void xge_get_message ( unsigned int *msg, unsigned int *key, short *x, short *y );
01180
01181
01182
01183
01184
01185 #ifndef XGLEDIT_H
01186 void xge_Init ( int argc, char *argv[],
01187 int (*callback)(xge_widget*,int,int,short,short),
01188 char *title );
01189 void xge_Cleanup ( void );
01190 #endif
01191
01192 #ifdef __cplusplus
01193 }
01194 #endif
01195
01196 #endif
01197