1 /* 2 * Copyright 2006-2007, 2023, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan Aßmus <superstippi@gmx.de> 7 * Zardshard 8 */ 9 #ifndef STYLE_H 10 #define STYLE_H 11 12 13 #ifdef ICON_O_MATIC 14 # include "IconObject.h" 15 # include "Observer.h" 16 #endif 17 18 #include "IconBuild.h" 19 #include "IconRenderer.h" 20 // TODO: put GammaTable into its own file 21 22 #include <GraphicsDefs.h> 23 24 #include <agg_color_rgba.h> 25 26 27 class BMessage; 28 29 30 _BEGIN_ICON_NAMESPACE 31 32 33 class Gradient; 34 class Shape; 35 36 // TODO: This class can represent solid colors, gradients, and bitmaps. It 37 // should probably be split into subclasses. 38 #ifdef ICON_O_MATIC 39 class Style : public IconObject, 40 public Observer { 41 #else 42 class Style { 43 #endif 44 public: 45 Style(); 46 Style(const Style& other); 47 Style(const rgb_color& color); 48 #ifdef ICON_O_MATIC 49 Style(BBitmap* image); 50 // transfers ownership of the image 51 #endif 52 Style(BMessage* archive); 53 54 virtual ~Style(); 55 56 #ifdef ICON_O_MATIC 57 // Observer interface 58 virtual void ObjectChanged(const Observable* object); 59 60 // Style 61 status_t Archive(BMessage* into, 62 bool deep = true) const; 63 64 bool operator==(const Style& other) const; 65 #else 66 inline void Notify() {} 67 #endif // ICON_O_MATIC 68 69 bool HasTransparency() const; 70 71 void SetColor(const rgb_color& color); 72 inline rgb_color Color() const 73 { return fColor; } 74 75 void SetGradient(const _ICON_NAMESPACE Gradient* 76 gradient); 77 _ICON_NAMESPACE Gradient* Gradient() const 78 { return fGradient; } 79 80 #ifdef ICON_O_MATIC 81 void SetBitmap(BBitmap* image); 82 // transfers ownership of the image 83 BBitmap* Bitmap() const 84 { return fImage; } 85 86 // alpha only applies to bitmaps 87 void SetAlpha(uint8 alpha) 88 { fAlpha = alpha; Notify(); } 89 uint8 Alpha() 90 { return fAlpha; } 91 #endif // ICON_O_MATIC 92 93 const agg::rgba8* Colors() const 94 { return fColors; } 95 96 const agg::rgba8* GammaCorrectedColors( 97 const GammaTable& table) const; 98 99 private: 100 rgb_color fColor; 101 102 _ICON_NAMESPACE Gradient* fGradient; 103 104 // hold gradient color array 105 agg::rgba8* fColors; 106 107 #ifdef ICON_O_MATIC 108 BBitmap* fImage; 109 uint8 fAlpha; 110 #endif 111 112 // for caching gamma corrected gradient color array 113 mutable agg::rgba8* fGammaCorrectedColors; 114 mutable bool fGammaCorrectedColorsValid; 115 }; 116 117 118 _END_ICON_NAMESPACE 119 120 121 _USING_ICON_NAMESPACE 122 123 124 #endif // STYLE_H 125