xref: /haiku/src/apps/glteapot/ObjectView.h (revision 1deede7388b04dbeec5af85cae7164735ea9e70d)
1 /*
2  * Copyright 2008 Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  */
6 
7 /*
8 	Copyright 1999, Be Incorporated.   All Rights Reserved.
9 	This file may be used under the terms of the Be Sample Code License.
10 */
11 
12 #ifndef OBJECT_VIEW_H
13 #define OBJECT_VIEW_H
14 
15 #include <GL/glu.h>
16 #include <GLView.h>
17 
18 #define kMsgFPS			'fps '
19 #define kMsgAddModel	'addm'
20 #define kMsgGouraud		'gour'
21 #define kMsgZBuffer		'zbuf'
22 #define kMsgCulling		'cull'
23 #define kMsgTextured	'txtr'
24 #define kMsgFog			'fog '
25 #define kMsgLighting	'lite'
26 #define kMsgLights		'lits'
27 #define kMsgFilled		'fill'
28 #define kMsgPerspective	'prsp'
29 
30 enum lights {
31 	lightNone = 0,
32 	lightWhite,
33 	lightYellow,
34 	lightRed,
35 	lightBlue,
36 	lightGreen
37 };
38 
39 #define HISTSIZE 10
40 
41 class ResScroll;
42 class GLObject;
43 
44 struct TrackingInfo {
45 	float		lastX;
46 	float		lastY;
47 	float		lastDx;
48 	float		lastDy;
49 	bool		isTracking;
50 	GLObject	*pickedObject;
51 	uint32		buttons;
52 };
53 
54 class ObjectView : public BGLView {
55 	public:
56 						ObjectView(BRect rect, const char* name,
57 							ulong resizingMode, ulong options);
58 						~ObjectView();
59 
60 		virtual	void	MouseDown(BPoint point);
61 		virtual	void	MouseUp(BPoint point);
62 		virtual	void	MouseMoved(BPoint point, uint32 transit, const BMessage *msg);
63 
64 		virtual	void	MessageReceived(BMessage* msg);
65 		virtual	void	AttachedToWindow();
66 		virtual	void	DetachedFromWindow();
67 		virtual	void	FrameResized(float width, float height);
68 				bool	SpinIt();
69 				int		ObjectAtPoint(const BPoint &point);
70 		virtual	void	DrawFrame(bool noPause);
71 		virtual	void	Pulse();
72 				void	EnforceState();
73 				bool	RepositionView();
74 
75 		sem_id			drawEvent;
76 		sem_id			quittingSem;
77 
78 	private:
79 		thread_id		fDrawThread;
80 		ResScroll*		fResScroll;
81 		BList			fObjects;
82 		BLocker			fObjListLock;
83 		uint64			fLastFrame;
84 		int32			fHistEntries,fOldestEntry;
85 		bool			fFps, fLastGouraud, fGouraud;
86 		bool			fLastZbuf, fZbuf, fLastCulling, fCulling;
87 		bool			fLastLighting, fLighting, fLastFilled, fFilled;
88 		bool			fLastPersp, fPersp, fLastTextured, fTextured;
89 		bool			fLastFog, fFog, fForceRedraw;
90 		float			fLastYXRatio, fYxRatio, fFpsHistory[HISTSIZE];
91 		float			fObjectDistance, fLastObjectDistance;
92 		TrackingInfo	fTrackingInfo;
93 };
94 
95 #endif // OBJECT_VIEW_H
96