1/* 2 * Copyright 2006-2007, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan A��mus <superstippi@gmx.de> 7 */ 8#ifndef STYLE_H 9#define STYLE_H 10 11 12#ifdef ICON_O_MATIC 13# include "IconObject.h" 14# include "Observer.h" 15#endif 16 17#include "IconBuild.h" 18#include "IconRenderer.h" 19 // TODO: put GammaTable into its own file 20 21#include <GraphicsDefs.h> 22 23#include <agg_color_rgba.h> 24 25 26class BMessage; 27 28 29_BEGIN_ICON_NAMESPACE 30 31 32class Gradient; 33 34#ifdef ICON_O_MATIC 35class Style : public IconObject, 36 public Observer { 37#else 38class Style { 39#endif 40 public: 41 Style(); 42 Style(const Style& other); 43 Style(const rgb_color& color); 44 Style(BMessage* archive); 45 46 virtual ~Style(); 47 48#ifdef ICON_O_MATIC 49 // Observer interface 50 virtual void ObjectChanged(const Observable* object); 51 52 // Style 53 status_t Archive(BMessage* into, 54 bool deep = true) const; 55 56 bool operator==(const Style& other) const; 57#else 58 inline void Notify() {} 59#endif // ICON_O_MATIC 60 61 bool HasTransparency() const; 62 63 void SetColor(const rgb_color& color); 64 inline rgb_color Color() const 65 { return fColor; } 66 67 void SetGradient(const _ICON_NAMESPACE Gradient* 68 gradient); 69 _ICON_NAMESPACE Gradient* Gradient() const 70 { return fGradient; } 71 72 const agg::rgba8* Colors() const 73 { return fColors; } 74 75 const agg::rgba8* GammaCorrectedColors( 76 const GammaTable& table) const; 77 78 private: 79 rgb_color fColor; 80 _ICON_NAMESPACE Gradient* fGradient; 81 82 // hold gradient color array 83 agg::rgba8* fColors; 84 85 // for caching gamma corrected gradient color array 86 mutable agg::rgba8* fGammaCorrectedColors; 87 mutable bool fGammaCorrectedColorsValid; 88}; 89 90 91_END_ICON_NAMESPACE 92 93 94_USING_ICON_NAMESPACE 95 96 97#endif // STYLE_H 98