xgedit.h

Go to the documentation of this file.
00001 
00002 /* ///////////////////////////////////////////////////////////////////////// */
00003 /* This file is a part of the BSTools package                                */
00004 /* written by Przemyslaw Kiciak                                              */
00005 /* ///////////////////////////////////////////////////////////////////////// */
00006 /* (C) Copyright by Przemyslaw Kiciak, 2007, 2013                            */
00007 /* this package is distributed under the terms of the                        */
00008 /* Lesser GNU Public License, see the file COPYING.LIB                       */
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   /*1024*/ 1280
00041 #define xge_MAX_HEIGHT  /* 768*/  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 /* mouse button states */
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 /* message codes */
00075 #define xgemsg_NULL                              0
00076 #define xgemsg_INIT                          0x100
00077 
00078 /* user action messages */
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 /* commands sent by libxgedit procedures */
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 /* message sent when popups are removed */
00170 #define xgemsg_POPUP_REMOVED                 0x153
00171 #define xgemsg_POPUPS_REMOVED                0x154
00172 
00173 /* message sent after an error, warning or info message has been dismissed */
00174 #define xgemsg_USER_MESSAGE_DISMISSED        0x155
00175 
00176 /* message sent to the application by itself, to be delivered */
00177 /* when there is nothing else to do */
00178 #define xgemsg_IDLE_COMMAND                  0x156
00179 
00180 /* message sent to the application by a child process */
00181 #define xgemsg_CHILD_MESSAGE                 0x157
00182 /* message sent after the child process has been terminated */
00183 #define xgemsg_CHILD_FAILURE                 0x158
00184 
00185 /* additional application messages must be greater than xgemsg_LAST_MESSAGE */
00186 #define xgemsg_LAST_MESSAGE xgemsg_CHILD_FAILURE
00187 
00188 /* ///////////////////////////////////////////////////////////////////////// */
00189 /* States of the program. Others may be defined in applications. */
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 /* additional application states must be greater than xge_LAST_STATE */
00240 #define xgestate_LAST xgestate_LISTBOX_PICKING
00241 
00242 /* ///////////////////////////////////////////////////////////////////////// */
00243 /* cursor identifiers */
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 /* wrappers around XWindow drawing and some other procedures */
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;  /* window dimensions */
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 /* widgets */
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,  /* maximal string length */
00534           chdisp,     /* number of characters displayed */
00535           start,      /* first character displayed */
00536           pos;        /* text cursor position */
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;   /* number of positions displayed */
00563     char          maxitl;      /* maximal item length, in characters */
00564     short         nitems;      /* current number of list elements */
00565     short         fditem;      /* first displayed item */
00566     short         currentitem; /* current item */
00567     int           *itemind;    /* indexes to the item strings */
00568     char          *itemstr;    /* item strings */
00569     xgecolour_int bk0, bk1;    /* background colours for the items */
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;         /* this must be the first component */
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;         /* this must be the first component */
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 /* error and info message procedures */
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 /* The following procedures are intended for pure Xlib applications.         */
01183 /* In OpenGL (GLX) application use xgle_... procedures, whose headers are    */
01184 /* in the file xgledit.h.                                                    */
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 /*XGEDIT_H*/
01197