1/*
2 * Copyright 2007-2014 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan A��mus, superstippi@gmx.de
7 */
8#ifndef SPIDER_SAVER_H
9#define SPIDER_SAVER_H
10
11
12#include <Locker.h>
13#include <ScreenSaver.h>
14#include <View.h>
15
16
17enum {
18	RED							= 1,
19	GREEN						= 2,
20	BLUE						= 3,
21	YELLOW						= 4,
22	PURPLE						= 5,
23	CYAN						= 6,
24	GRAY						= 7,
25};
26
27
28#define MIN_POLY_POINTS 3
29#define MAX_POLY_POINTS 10
30#define MIN_QUEUE_DEPTH 40
31#define MAX_QUEUE_DEPTH 160
32#define MAX_QUEUE_NUMBER 40
33
34
35
36class BSlider;
37class BMenuField;
38class Polygon;
39class PolygonQueue;
40class SpiderView;
41
42
43class SpiderSaver : public BScreenSaver {
44public:
45								SpiderSaver(BMessage *message,
46											image_id image);
47	virtual						~SpiderSaver();
48
49								// BScreenSaver
50	virtual	void				StartConfig(BView *view);
51	virtual	status_t			StartSaver(BView *view, bool preview);
52	virtual	void				StopSaver();
53	virtual	void				Draw(BView* view, int32 frame);
54	virtual	status_t			SaveState(BMessage* into) const;
55
56								// SpiderSaver
57			void				SetQueueNumber(uint32 number);
58			void				SetQueueDepth(uint32 maxDepth);
59			void				SetPolyPoints(uint32 maxPoints);
60			void				SetColor(uint32 color);
61
62private:
63			void				_Init(BRect bounds);
64			void				_Cleanup();
65			void				_AllocBackBitmap(float width, float height);
66			void				_FreeBackBitmap();
67			void				_DrawInto(BView *view);
68			void				_DrawPolygon(Polygon* polygon, BView *view);
69
70			BBitmap*			fBackBitmap;
71			BView*				fBackView;
72
73			PolygonQueue**		fQueues;
74			uint32				fQueueNumber;
75			uint32				fMaxPolyPoints;
76			uint32				fMaxQueueDepth;
77			uint32				fColor;
78
79			bool				fPreview;
80			BRect				fBounds;
81
82			BLocker				fLocker;
83};
84
85
86#endif	//	SPIDER_SAVER_H
87