]> Dogcows Code - chaz/openbox/blob - otk/rendertexture.hh
doc the state functions better
[chaz/openbox] / otk / rendertexture.hh
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
2 #ifndef __rendertexture_hh
3 #define __rendertexture_hh
4
5 #include "rendercolor.hh"
6
7 namespace otk {
8
9 //! Superclass for all the Textures
10 class RenderTexture {
11 public:
12 enum ReliefType {
13 Flat,
14 Raised,
15 Sunken
16 };
17 enum BevelType {
18 Bevel1,
19 Bevel2
20 };
21 enum GradientType {
22 Solid,
23 Horizontal,
24 Vertical,
25 Diagonal,
26 CrossDiagonal,
27 PipeCross,
28 Rectangle,
29 Pyramid,
30 Elliptic
31 };
32
33 private:
34 int _screen;
35
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
39 ReliefType _relief;
40 //! The way the bevel should be drawn
41 BevelType _bevel;
42 //! If a flat border is drawn on the outside, ignored for all ReliefType
43 //! values except ReliefType::Flat
44 bool _border;
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
48 bool _interlaced;
49
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
66 //! if it is true
67 const RenderColor *_interlace_color;
68
69 public:
70 RenderTexture(int screen,
71 bool parent_relative, ReliefType relief, BevelType bevel,
72 bool border, GradientType gradient, bool interlaced,
73 const RGB &color,
74 const RGB &secondary_color,
75 const RGB &border_color,
76 const RGB &interlace_color)
77 : _screen(screen),
78 _parent_relative(parent_relative),
79 _relief(relief),
80 _bevel(bevel),
81 _border(border),
82 _gradient(gradient),
83 _interlaced(interlaced),
84 _color(new RenderColor(screen, color)),
85 _secondary_color(new RenderColor(screen, secondary_color)),
86 _bevel_dark_color(0),
87 _bevel_light_color(0),
88 _border_color(new RenderColor(screen, border_color)),
89 _interlace_color(new RenderColor(screen, interlace_color))
90 {
91 if (_relief != Flat) {
92 unsigned char r, g, b;
93
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);
103
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);
109 }
110
111 assert(_relief == Flat || (_bevel_dark_color && _bevel_light_color));
112 //assert(!_border || _border_color);
113 //assert(!_interlaced || _interlace_color);
114 assert(_color);
115 assert(_secondary_color);
116 assert(_border_color);
117 assert(_interlace_color);
118 }
119
120 virtual ~RenderTexture() {
121 delete _color;
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;
127 }
128
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; }
142
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
162 //! if it is true
163 inline const RenderColor& interlaceColor() const
164 { return *_interlace_color; }
165 };
166
167 }
168
169 #endif // __rendertexture_hh
This page took 0.045889 seconds and 4 git commands to generate.