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