softpipe: use the polygon stipple utility module
[mesa.git] / src / glut / beos / glutWindow.h
1 /***********************************************************
2 * Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
3 *
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.
7 *
8 *
9 * FILE: glutWindow.h
10 *
11 * DESCRIPTION: the GlutWindow class saves all events for
12 * handling by main thread
13 ***********************************************************/
14
15 /***********************************************************
16 * Headers
17 ***********************************************************/
18 #include <GL/glut.h>
19 #include <Window.h>
20 #include <GLView.h>
21
22 /***********************************************************
23 * CLASS: GlutWindow
24 *
25 * INHERITS FROM: BGLView (NOT BWindow!)
26 *
27 * DESCRIPTION: all information needed for windows and
28 * subwindows (handled as similarly as possible)
29 ***********************************************************/
30 class GlutWindow : public BGLView {
31 public:
32 GlutWindow(GlutWindow *nparent, char *name, int x, int y, int width,
33 int height, ulong options);
34
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);
43
44 static long MenuThread(void *menu);
45
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
52
53 /* Window relationship state. */
54 GlutWindow *parent; /* parent window */
55 GlutWindow *children; /* first child window */
56 GlutWindow *siblings; /* next sibling */
57
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 */
69
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
82
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
99 };
100
101 /***********************************************************
102 * CLASS: GlutBWindow
103 *
104 * INHERITS FROM: BDirectWindow
105 *
106 * DESCRIPTION: basically a BWindow that won't quit
107 ***********************************************************/
108 class GlutBWindow : public BDirectWindow {
109 public:
110 GlutBWindow(BRect frame, char *name);
111 ~GlutBWindow();
112 void DirectConnected(direct_buffer_info *info);
113 bool QuitRequested(); // exits app
114 void Minimize(bool minimized); // minimized windows are not visible
115 void Hide();
116 void Show();
117 GlutWindow *bgl;
118 bool fConnectionDisabled;
119 };