libSDL2pp  0.16.0
C++11 bindings/wrapper for SDL2
Color.hh
1  /*
2  libSDL2pp - C++11 bindings/wrapper for SDL2
3  Copyright (C) 2017 Vraiment <jemc44@gmail.com>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20  */
21 
22 #ifndef SDL2PP_COLOR_HH
23 #define SDL2PP_COLOR_HH
24 
25 #include <ostream>
26 
27 #include <SDL_pixels.h>
28 
29 #include <SDL2pp/Export.hh>
30 
31 namespace SDL2pp {
32 
48 class SDL2PP_EXPORT Color : public SDL_Color {
49 public:
56  constexpr Color() : SDL_Color{0, 0, 0, 0} {
57  }
58 
65  constexpr Color(const SDL_Color& color) : SDL_Color{color.r, color.g, color.b, color.a} {
66  }
67 
76  constexpr Color(Uint8 r, Uint8 g, Uint8 b) : SDL_Color{r, g, b, SDL_ALPHA_OPAQUE} {
77  }
78 
88  constexpr Color(Uint8 r, Uint8 g, Uint8 b, Uint8 a) : SDL_Color{r, g, b, a} {
89  }
90 
95  Color(const Color&) noexcept = default;
96 
101  Color(Color&&) noexcept = default;
102 
109  Color& operator=(const Color&) noexcept = default;
110 
117  Color& operator=(Color&&) noexcept = default;
118 
125  constexpr Uint8 GetRed() const {
126  return r;
127  }
128 
137  Color& SetRed(int nr) {
138  r = nr;
139  return *this;
140  }
141 
148  constexpr Uint8 GetGreen() const {
149  return g;
150  }
151 
160  Color& SetGreen(int ng) {
161  g = ng;
162  return *this;
163  }
164 
171  constexpr Uint8 GetBlue() const {
172  return b;
173  }
174 
183  Color& SetBlue(int nb) {
184  b = nb;
185  return *this;
186  }
187 
194  constexpr Uint8 GetAlpha() const {
195  return a;
196  }
197 
206  Color& SetAlpha(int na) {
207  a = na;
208  return *this;
209  }
210 };
211 
212 }
213 
223 constexpr bool operator==(const SDL2pp::Color& a, const SDL2pp::Color& b) {
224  return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a;
225 }
226 
236 constexpr bool operator!=(const SDL2pp::Color& a, const SDL2pp::Color& b) {
237  return !(a == b);
238 }
239 
249 SDL2PP_EXPORT std::ostream& operator<<(std::ostream& stream, const SDL2pp::Color& color);
250 
251 namespace std {
252 
257 template<>
258 struct hash<SDL2pp::Color> {
267  size_t operator()(const SDL2pp::Color& c) const {
268  size_t seed = std::hash<int>()(c.r);
269  seed ^= std::hash<int>()(c.g) + 0x9e3779b9 + (seed<<6) + (seed>>2);
270  seed ^= std::hash<int>()(c.b) + 0x9e3779b9 + (seed<<6) + (seed>>2);
271  seed ^= std::hash<int>()(c.a) + 0x9e3779b9 + (seed<<6) + (seed>>2);
272  return seed;
273  }
274 };
275 
276 }
277 
278 #endif
Color & SetBlue(int nb)
Set the blue component from the color.
Definition: Color.hh:183
size_t operator()(const SDL2pp::Color &c) const
Hash function for SDL2pp::Color.
Definition: Color.hh:267
Definition: Color.hh:251
constexpr Color()
Default constructor.
Definition: Color.hh:56
Color & SetGreen(int ng)
Set the green component from the color.
Definition: Color.hh:160
constexpr Uint8 GetBlue() const
Get the blue component from the color.
Definition: Color.hh:171
constexpr Color(const SDL_Color &color)
Construct a color from existing SDL_Color.
Definition: Color.hh:65
Color & SetRed(int nr)
Set the red component from the color.
Definition: Color.hh:137
RGB color with Alpha.
Definition: Color.hh:48
Definition: AudioDevice.cc:27
Color & SetAlpha(int na)
Set the alpha component from the color.
Definition: Color.hh:206
constexpr Color(Uint8 r, Uint8 g, Uint8 b)
Construct the color from given RGB, alpha is opaque.
Definition: Color.hh:76
constexpr Color(Uint8 r, Uint8 g, Uint8 b, Uint8 a)
Construct the color from given RGB and alpha values.
Definition: Color.hh:88
constexpr Uint8 GetGreen() const
Get the green component from the color.
Definition: Color.hh:148
constexpr Uint8 GetAlpha() const
Get the alpha component from the color.
Definition: Color.hh:194