00001
00002 #ifndef __rendertexture_hh
00003 #define __rendertexture_hh
00004
00005 #include "rendercolor.hh"
00006
00007 namespace otk {
00008
00009
00010 class RenderTexture {
00011 public:
00012 enum ReliefType {
00013 Flat,
00014 Raised,
00015 Sunken
00016 };
00017 enum BevelType {
00018 Bevel1,
00019 Bevel2
00020 };
00021 enum GradientType {
00022 Solid,
00023 Horizontal,
00024 Vertical,
00025 Diagonal,
00026 CrossDiagonal,
00027 PipeCross,
00028 Rectangle,
00029 Pyramid,
00030 Elliptic
00031 };
00032
00033 private:
00034 int _screen;
00035
00036
00037 bool _parent_relative;
00038
00039 ReliefType _relief;
00040
00041 BevelType _bevel;
00042
00043
00044 bool _border;
00045
00046 GradientType _gradient;
00047
00048 bool _interlaced;
00049
00050
00051
00052 const RenderColor *_color;
00053
00054
00055 const RenderColor *_secondary_color;
00056
00057
00058 const RenderColor *_bevel_dark_color;
00059
00060
00061 const RenderColor *_bevel_light_color;
00062
00063
00064 const RenderColor *_border_color;
00065
00066
00067 const RenderColor *_interlace_color;
00068
00069 public:
00070 RenderTexture(int screen,
00071 bool parent_relative, ReliefType relief, BevelType bevel,
00072 bool border, GradientType gradient, bool interlaced,
00073 const RGB &color,
00074 const RGB &secondary_color,
00075 const RGB &border_color,
00076 const RGB &interlace_color)
00077 : _screen(screen),
00078 _parent_relative(parent_relative),
00079 _relief(relief),
00080 _bevel(bevel),
00081 _border(border),
00082 _gradient(gradient),
00083 _interlaced(interlaced),
00084 _color(new RenderColor(screen, color)),
00085 _secondary_color(new RenderColor(screen, secondary_color)),
00086 _bevel_dark_color(0),
00087 _bevel_light_color(0),
00088 _border_color(new RenderColor(screen, border_color)),
00089 _interlace_color(new RenderColor(screen, interlace_color))
00090 {
00091 if (_relief != Flat) {
00092 unsigned char r, g, b;
00093
00094
00095 r = _color->red() + _color->red() / 2;
00096 g = _color->green() + _color->green() / 2;
00097 b = _color->blue() + _color->blue() / 2;
00098
00099 if (r < _color->red()) r = 0xff;
00100 if (g < _color->green()) g = 0xff;
00101 if (b < _color->blue()) b = 0xff;
00102 _bevel_dark_color = new RenderColor(screen, r, g, b);
00103
00104
00105 r = _color->red() / 4 + _color->red() / 2;
00106 g = _color->green() / 4 + _color->green() / 2;
00107 b = _color->blue() / 4 + _color->blue() / 2;
00108 _bevel_light_color = new RenderColor(screen, r, g, b);
00109 }
00110
00111 assert(_relief == Flat || (_bevel_dark_color && _bevel_light_color));
00112
00113
00114 assert(_color);
00115 assert(_secondary_color);
00116 assert(_border_color);
00117 assert(_interlace_color);
00118 }
00119
00120 virtual ~RenderTexture() {
00121 delete _color;
00122 delete _secondary_color;
00123 if (_bevel_dark_color) delete _bevel_dark_color;
00124 if (_bevel_dark_color) delete _bevel_light_color;
00125 delete _border_color;
00126 delete _interlace_color;
00127 }
00128
00129
00130 inline bool parentRelative() const { return _parent_relative; }
00131
00132 inline ReliefType relief() const { return _relief; }
00133
00134 inline BevelType bevel() const { return _bevel; }
00135
00136
00137 inline bool border() const { return _border; }
00138
00139 inline GradientType gradient() const { return _gradient; }
00140
00141 inline bool interlaced() const { return _interlaced; }
00142
00143
00144
00145 inline const RenderColor& color() const { return *_color; }
00146
00147
00148 inline const RenderColor& secondary_color() const
00149 { return *_secondary_color; }
00150
00151
00152 inline const RenderColor& bevelDarkColor() const
00153 { return *_bevel_dark_color; }
00154
00155
00156 inline const RenderColor& bevelLightColor() const
00157 { return *_bevel_light_color; }
00158
00159
00160 inline const RenderColor& borderColor() const { return *_border_color; }
00161
00162
00163 inline const RenderColor& interlaceColor() const
00164 { return *_interlace_color; }
00165 };
00166
00167 }
00168
00169 #endif // __rendertexture_hh