]> git.vomp.tv Git - vompclient.git/blob - colour.h
Bitmap and VPictureBanner CWFs
[vompclient.git] / colour.h
1 /*
2     Copyright 2005 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP.  If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #ifndef COLOUR_H
21 #define COLOUR_H
22
23 #include "defines.h"
24
25 class Colour
26 {
27   public:
28     Colour()
29     { red = 0; green = 0; blue = 0; alpha = 255; }
30
31     Colour(int Tred, int Tgreen, int Tblue)
32     { red = Tred; green = Tgreen; blue = Tblue; alpha = 255; }
33
34     Colour(int Tred, int Tgreen, int Tblue, int Talpha)
35     { red = Tred; green = Tgreen; blue = Tblue; alpha = Talpha; }
36
37     Colour(unsigned int color)
38     {
39       red = (color & 0x00ff0000) >> 16;
40       green = (color & 0x0000ff00) >> 8;
41       blue = (color & 0x000000ff);
42       alpha = (color & 0xff000000) >> 24;
43     }
44
45     void set(int Tred, int Tgreen, int Tblue)
46     { red = Tred; green = Tgreen; blue = Tblue; alpha = 255; }
47
48     void set(int Tred, int Tgreen, int Tblue, int Talpha)
49     { red = Tred; green = Tgreen; blue = Tblue; alpha = Talpha; }
50
51     inline unsigned long rgba() const
52     {
53       return (alpha << 24) | (red << 16) | (green << 8) | blue;
54     }
55
56     int red;
57     int green;
58     int blue;
59     int alpha;
60 };
61
62
63 // TODO move to seperate File
64 class DrawStyle: public Colour
65 {
66   public:
67     DrawStyle()
68     { red = 0; green = 0; blue = 0; alpha = 255; ft = Color; ct = Global; }
69
70     DrawStyle(int Tred, int Tgreen, int Tblue)
71     { red = Tred; green = Tgreen; blue = Tblue; alpha = 255 ; ft = Color; ct = Global;  }
72
73     DrawStyle(int Tred, int Tgreen, int Tblue, int Talpha)
74     { red = Tred; green = Tgreen; blue = Tblue; alpha = Talpha; ft = Color; ct = Global;}
75     DrawStyle(unsigned int color)
76     {
77       red = (color & 0x00ff0000) >> 16;
78       green = (color & 0x0000ff00) >> 8;
79       blue = (color & 0x000000ff);
80       alpha = (color & 0xff000000) >> 24;
81       ft = Color; ct = Global;
82     }
83
84     DrawStyle(const Colour& c)
85     {
86       red = c.red;
87       green = c.green;
88       blue = c.blue;
89       alpha = c.alpha;
90       ft = Color; ct = Global;
91     }
92
93     enum FillType
94     {
95       Color,
96       GradientLinear,
97       GradientRadial,
98     };
99     enum CoordType
100     {
101       Global,
102       Local
103     };
104
105     enum FillType ft;
106     enum CoordType ct; //not implemented yet
107     float x1, y1, x2, y2, r; // Parameter for gradient either relative to object or to global coordinate system
108     int num_colors; //max is 4, min is 0
109     Colour grad_col[4];
110     float grad_pos[3]; //Last position is alway 1.0 and first 0.0
111
112     static DrawStyle BLACK;
113     static DrawStyle RED;
114     static DrawStyle GREEN;
115     static DrawStyle YELLOW;
116     static DrawStyle BLUE;
117     static DrawStyle GREY;
118     static DrawStyle DARKGREY;
119     static DrawStyle VIDEOBLUE;
120     static DrawStyle VIEWBACKGROUND;
121     static DrawStyle VIEWTRANSPARENTBACKGROUND;
122     static DrawStyle LIVETVSYMBOLS;
123     static DrawStyle PROGRESSBAR;
124     static DrawStyle OSDBACKGROUND;
125     static DrawStyle TABVIEWBACKGROUND;
126     static DrawStyle TITLEBARBACKGROUND;
127     static DrawStyle SELECTBACKGROUND;
128     static DrawStyle SELECTHIGHLIGHT;
129     static DrawStyle SELECTDARKHIGHLIGHT;
130     static DrawStyle LIGHTTEXT;
131     static DrawStyle DARKTEXT;
132     static DrawStyle DANGER;
133     static DrawStyle BUTTONBACKGROUND;
134     static DrawStyle PROGRAMMEA;
135     static DrawStyle PROGRAMMEB;
136     static DrawStyle NOPROGRAMME;
137     static DrawStyle WALLPAPER; // this one is special, if transparent it means picture
138 };
139
140 #define COMPARE_TEST(x) if (rhs.x != lhs.x) { return rhs.x < lhs.x; }
141
142 inline bool operator<(const DrawStyle& rhs, const DrawStyle& lhs)
143 {
144   COMPARE_TEST(rgba())
145   COMPARE_TEST(ft)
146
147   if (rhs.ft == DrawStyle::Color) return false;
148
149   COMPARE_TEST(num_colors)
150   COMPARE_TEST(x1)
151   COMPARE_TEST(x2)
152   COMPARE_TEST(y1)
153   COMPARE_TEST(y2)
154
155   if (rhs.ft == DrawStyle::GradientRadial) COMPARE_TEST(r)
156
157   for (int i = 0; i < lhs.num_colors; i++)
158   {
159     COMPARE_TEST(grad_col[i].rgba())
160
161     if (i > 0) COMPARE_TEST(grad_pos[i - 1])
162   }
163
164   COMPARE_TEST(ct)
165
166   return false;
167 }
168
169 #undef COMPARE_TEST
170
171
172 #define COMPARE_TEST(x) if (rhs.x!=lhs.x) return true;
173
174 inline bool operator!=(const DrawStyle& rhs, const DrawStyle& lhs)
175 {
176   COMPARE_TEST(rgba())
177   COMPARE_TEST(ft)
178
179   if (rhs.ft == DrawStyle::Color) return false;
180
181   COMPARE_TEST(num_colors)
182   COMPARE_TEST(x1)
183   COMPARE_TEST(x2)
184   COMPARE_TEST(y1)
185   COMPARE_TEST(y2)
186
187   if (rhs.ft == DrawStyle::GradientRadial) COMPARE_TEST(r)
188
189   for (int i = 0; i < lhs.num_colors; i++)
190   {
191     COMPARE_TEST(grad_col[i].rgba())
192
193     if (i > 0) COMPARE_TEST(grad_pos[i - 1])
194   }
195
196   COMPARE_TEST(ct)
197
198   return false;
199 }
200
201 #undef COMPARE_TEST
202
203
204 class SkinFactory
205 {
206   public:
207
208     enum SkinNames
209     {
210 #ifdef GRADIENT_DRAWING
211       NoopacityInspired,
212       ClassicEnhanced,
213 #endif
214       Classic,
215       MaxSkins
216     };
217
218     static int getNumberofSkins();
219     static const char ** getSkinNames();
220     static bool InitSkin(int n);
221
222   private:
223     static void InitDefaultSkin();
224     static void InitEnhancedSkin();
225     static void InitNoopacityInspiredSkin();
226 };
227
228 #endif