1// SuperTux
2// Copyright (C) 2006 Matthias Braun <matze@braunis.de>
3//
4// This program is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17#include "video/color.hpp"
18
19#include <assert.h>
20
21const Color Color::BLACK(0.0, 0.0, 0.0);
22const Color Color::RED(1.0, 0.0, 0.0);
23const Color Color::GREEN(0.0, 1.0, 0.0);
24const Color Color::BLUE(0.0, 0.0, 1.0);
25const Color Color::CYAN(0.0, 1.0, 1.0);
26const Color Color::MAGENTA(1.0, 0.0, 1.0);
27const Color Color::YELLOW(1.0, 1.0, 0.0);
28const Color Color::WHITE(1.0, 1.0, 1.0);
29
30Color::Color() :
31 red(0),
32 green(0),
33 blue(0),
34 alpha(1.0f)
35{}
36
37Color::Color(float red_, float green_, float blue_, float alpha_) :
38 red(red_),
39 green(green_),
40 blue(blue_),
41 alpha(alpha_)
42{
43 assert(0 <= red && red <= 1.0f);
44 assert(0 <= green && green <= 1.0f);
45 assert(0 <= blue && blue <= 1.0f);
46}
47
48Color::Color(const std::vector<float>& vals) :
49 red(),
50 green(),
51 blue(),
52 alpha()
53{
54 if (vals.size() < 3) {
55 red = 0;
56 green = 0;
57 blue = 0;
58 alpha = 0;
59 return;
60 }
61 red = vals[0];
62 green = vals[1];
63 blue = vals[2];
64 if (vals.size() > 3)
65 alpha = vals[3];
66 else
67 alpha = 1.0;
68 assert(0 <= red && red <= 1.0f);
69 assert(0 <= green && green <= 1.0f);
70 assert(0 <= blue && blue <= 1.0f);
71}
72
73bool
74Color::operator==(const Color& other) const
75{
76 return red == other.red && green == other.green && blue == other.blue
77 && alpha == other.alpha;
78}
79
80bool
81Color::operator!=(const Color& other) const
82{
83 return !(operator==(other));
84}
85
86float
87Color::greyscale() const
88{
89 return red * 0.30f + green * 0.59f + blue * 0.11f;
90}
91
92bool
93Color::operator < (const Color& other) const
94{
95 return greyscale() < other.greyscale();
96}
97
98std::vector<float>
99Color::toVector()
100{
101 std::vector<float> result;
102 result.clear();
103 result.push_back(red);
104 result.push_back(green);
105 result.push_back(blue);
106 result.push_back(alpha);
107 return result;
108}
109
110/* EOF */
111