1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2 #ifndef __rendertexture_hh
3 #define __rendertexture_hh
5 #include "rendercolor.hh"
9 //! Superclass for all the Textures
36 //! If true, the texture is not rendered at all, so all options are ignored
37 bool _parent_relative;
38 //! The relief type of the texture
40 //! The way the bevel should be drawn
42 //! If a flat border is drawn on the outside, ignored for all ReliefType
43 //! values except ReliefType::Flat
45 //! The type of gradient to fill the texture with (if any)
46 GradientType _gradient;
47 //! If interlace lines should be drawn over the texture
50 //! The base color for the texture, the only color when the texture is solid.
51 //! This must always be defined
52 const RenderColor *_color;
53 //! The secondary color for a gradient texture.
54 //! This is only defined for gradients
55 const RenderColor *_secondary_color;
56 //! The shadow color for the bevel. This must be defined if
57 //! RenderTexture::_relief is not RenderTexture::ReliefType::Flat
58 const RenderColor *_bevel_dark_color;
59 //! The light color for the bevel. This must be defined if
60 //! RenderTexture::_relief is not RenderTexture::ReliefType::Flat
61 const RenderColor *_bevel_light_color;
62 //! The color for the flat border if RenderTexture::_border is true. This
63 //! must be defined if it is true
64 const RenderColor *_border_color;
65 //! The color for the interlace lines if RenderTexture. This must be defined
67 const RenderColor *_interlace_color;
70 RenderTexture(int screen,
71 bool parent_relative, ReliefType relief, BevelType bevel,
72 bool border, GradientType gradient, bool interlaced,
74 const RGB &secondary_color,
75 const RGB &border_color,
76 const RGB &interlace_color)
78 _parent_relative(parent_relative),
83 _interlaced(interlaced),
84 _color(new RenderColor(screen, color)),
85 _secondary_color(new RenderColor(screen, secondary_color)),
87 _bevel_light_color(0),
88 _border_color(new RenderColor(screen, border_color)),
89 _interlace_color(new RenderColor(screen, interlace_color))
91 if (_relief != Flat) {
92 unsigned char r, g, b;
94 // calculate the light bevel color
95 r = _color->red() + _color->red() / 2;
96 g = _color->green() + _color->green() / 2;
97 b = _color->blue() + _color->blue() / 2;
98 // watch for wraparound
99 if (r < _color->red()) r = 0xff;
100 if (g < _color->green()) g = 0xff;
101 if (b < _color->blue()) b = 0xff;
102 _bevel_dark_color = new RenderColor(screen, r, g, b);
104 // calculate the dark bevel color
105 r = _color->red() / 4 + _color->red() / 2;
106 g = _color->green() / 4 + _color->green() / 2;
107 b = _color->blue() / 4 + _color->blue() / 2;
108 _bevel_light_color = new RenderColor(screen, r, g, b);
111 assert(_relief == Flat || (_bevel_dark_color && _bevel_light_color));
112 //assert(!_border || _border_color);
113 //assert(!_interlaced || _interlace_color);
115 assert(_secondary_color);
116 assert(_border_color);
117 assert(_interlace_color);
120 virtual ~RenderTexture() {
122 delete _secondary_color;
123 if (_bevel_dark_color) delete _bevel_dark_color;
124 if (_bevel_dark_color) delete _bevel_light_color;
125 delete _border_color;
126 delete _interlace_color;
129 //! If true, the texture is not rendered at all, so all options are ignored
130 inline bool parentRelative() const { return _parent_relative; }
131 //! The relief type of the texture
132 inline ReliefType relief() const { return _relief; }
133 //! The way the bevel should be drawn
134 inline BevelType bevel() const { return _bevel; }
135 //! If a flat border is drawn on the outside, ignored for all ReliefType
136 //! values except ReliefType::Flat
137 inline bool border() const { return _border; }
138 //! The type of gradient to fill the texture with (if any)
139 inline GradientType gradient() const { return _gradient; }
140 //! If interlace lines should be drawn over the texture
141 inline bool interlaced() const { return _interlaced; }
143 //! The base color for the texture, the only color when the texture is solid.
144 //! This must always be defined
145 inline const RenderColor& color() const { return *_color; }
146 //! The secondary color for gradient textures.
147 //! This is only defined for gradients
148 inline const RenderColor& secondary_color() const
149 { return *_secondary_color; }
150 //! The shadow color for the bevel. This must be defined if
151 //! RenderTexture::_relief is not RenderTexture::ReliefType::Flat
152 inline const RenderColor& bevelDarkColor() const
153 { return *_bevel_dark_color; }
154 //! The light color for the bevel. This must be defined if
155 //! RenderTexture::)relief is not RenderTexture::ReliefType::Flat
156 inline const RenderColor& bevelLightColor() const
157 { return *_bevel_light_color; }
158 //! The color for the flat border if RenderTexture::_border is true. This
159 //! must be defined if it is true
160 inline const RenderColor& borderColor() const { return *_border_color; }
161 //! The color for the interlace lines if RenderTexture. This must be defined
163 inline const RenderColor& interlaceColor() const
164 { return *_interlace_color; }
169 #endif // __rendertexture_hh