1 /***********************************************************
2 * Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
4 * This program is freely distributable without licensing fees
5 * and is provided without guarantee or warrantee expressed or
6 * implied. This program is -not- in the public domain.
11 * DESCRIPTION: the GlutWindow class saves all events for
12 * handling by main thread
13 ***********************************************************/
15 /***********************************************************
17 ***********************************************************/
22 /***********************************************************
25 * INHERITS FROM: BGLView (NOT BWindow!)
27 * DESCRIPTION: all information needed for windows and
28 * subwindows (handled as similarly as possible)
29 ***********************************************************/
30 class GlutWindow
: public BGLView
{
32 GlutWindow(GlutWindow
*nparent
, char *name
, int x
, int y
, int width
,
33 int height
, ulong options
);
35 void KeyDown(const char *bytes
, int32 numBytes
);
36 void MouseDown(BPoint point
);
37 void MouseMoved(BPoint point
, uint32 transit
, const BMessage
*message
);
38 void FrameResized(float width
, float height
);
39 void Draw(BRect updateRect
);
40 void Pulse(); // needed since MouseUp() is broken
41 void MouseCheck(); // check for button state changes
42 void ErrorCallback(GLenum errorCode
);
44 static long MenuThread(void *menu
);
46 int num
; // window number returned to user
47 int cursor
; // my cursor
48 #define GLUT_MAX_MENUS 3
49 int menu
[GLUT_MAX_MENUS
]; // my popup menus
50 int m_width
, m_height
; // the last width and height reported to GLUT
51 uint32 m_buttons
; // the last mouse button state
53 /* Window relationship state. */
54 GlutWindow
*parent
; /* parent window */
55 GlutWindow
*children
; /* first child window */
56 GlutWindow
*siblings
; /* next sibling */
58 // leave out buttons and dials callbacks that we don't support
59 GLUTdisplayCB display
; /* redraw */
60 GLUTreshapeCB reshape
; /* resize (width,height) */
61 GLUTmouseCB mouse
; /* mouse (button,state,x,y) */
62 GLUTmotionCB motion
; /* motion (x,y) */
63 GLUTpassiveCB passive
; /* passive motion (x,y) */
64 GLUTentryCB entry
; /* window entry/exit (state) */
65 GLUTkeyboardCB keyboard
; /* keyboard (ASCII,x,y) */
66 GLUTvisibilityCB visibility
; /* visibility */
67 GLUTspecialCB special
; /* special key */
68 GLUTwindowStatusCB windowStatus
; /* window status */
70 bool anyevents
; // were any events received?
71 bool displayEvent
; // call display
72 bool reshapeEvent
; // call reshape
73 bool mouseEvent
; // call mouse
74 bool motionEvent
; // call motion
75 bool passiveEvent
; // call passive
76 bool entryEvent
; // call entry
77 bool keybEvent
; // call keyboard
78 bool windowStatusEvent
; // call visibility
79 bool specialEvent
; // call special
80 bool statusEvent
; // menu status changed
81 bool menuEvent
; // menu selected
83 int button
, mouseState
; // for mouse callback
84 int mouseX
, mouseY
; // for mouse callback
85 int motionX
, motionY
; // for motion callback
86 int passiveX
, passiveY
; // for passive callback
87 int entryState
; // for entry callback
88 unsigned char key
; // for keyboard callback
89 int keyX
, keyY
; // for keyboard callback
90 int visState
; // for visibility callback
91 int specialKey
; // for special key callback
92 int specialX
, specialY
; // for special callback
93 int modifierKeys
; // modifier key state
94 int menuStatus
; // for status callback
95 int statusX
, statusY
; // for status callback
96 int menuNumber
; // for menu and status callbacks
97 int menuValue
; // for menu callback
98 bool visible
; // for visibility callback
101 /***********************************************************
104 * INHERITS FROM: BDirectWindow
106 * DESCRIPTION: basically a BWindow that won't quit
107 ***********************************************************/
108 class GlutBWindow
: public BDirectWindow
{
110 GlutBWindow(BRect frame
, char *name
);
112 void DirectConnected(direct_buffer_info
*info
);
113 bool QuitRequested(); // exits app
114 void Minimize(bool minimized
); // minimized windows are not visible
118 bool fConnectionDisabled
;