xref: /haiku/headers/private/shared/BarberPole.h (revision 445d4fd926c569e7b9ae28017da86280aaecbae2)
1 /*
2  * Copyright 2017 Julian Harnath <julian.harnath@rwth-aachen.de>
3  * All rights reserved. Distributed under the terms of the MIT license.
4  */
5 #ifndef BARBER_POLE_H
6 #define BARBER_POLE_H
7 
8 
9 #include <View.h>
10 
11 #include <Polygon.h>
12 
13 
14 class BMessageRunner;
15 
16 
17 /*! Spinning barber pole progress indicator. Number and colors of the
18     color stripes are configurable. By default, it will be 2 colors,
19     chosen from the system color palette.
20 */
21 class BarberPole : public BView {
22 public:
23 	enum {
24 		// Message codes
25 		kRefreshMessage = 0x1001
26 	};
27 
28 public:
29 								BarberPole(const char* name);
30 								~BarberPole();
31 
32 	virtual	void				MessageReceived(BMessage* message);
33 	virtual void				Draw(BRect updateRect);
34 	virtual	void				FrameResized(float width, float height);
35 
36 	virtual	BSize				MinSize();
37 
38 			void				Start();
39 			void				Stop();
40 
41 			void				SetSpinSpeed(float speed);
42 			void				SetColors(const rgb_color* colors,
43 									uint32 numColors);
44 
45 private:
46 			void				_Spin();
47 			void				_DrawSpin(BRect updateRect);
48 			void				_DrawNonSpin(BRect updateRect);
49 private:
50 			bool				fIsSpinning;
51 			float				fSpinSpeed;
52 			const rgb_color*	fColors;
53 			uint32				fNumColors;
54 
55 			float				fScrollOffset;
56 			BPolygon			fStripe;
57 			float				fStripeWidth;
58 			uint32				fNumStripes;
59 };
60 
61 
62 #endif // BARBER_POLE_H
63