ManaPlus
color.h
Go to the documentation of this file.
1 /*
2  * The ManaPlus Client
3  * Copyright (C) 2011-2019 The ManaPlus Developers
4  *
5  * This file is part of The ManaPlus Client.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 /* _______ __ __ __ ______ __ __ _______ __ __
22  * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
23  * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
24  * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
25  * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
26  * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
27  * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
28  *
29  * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
30  *
31  *
32  * Per Larsson a.k.a finalman
33  * Olof Naessén a.k.a jansem/yakslem
34  *
35  * Visit: http://guichan.sourceforge.net
36  *
37  * License: (BSD)
38  * Redistribution and use in source and binary forms, with or without
39  * modification, are permitted provided that the following conditions
40  * are met:
41  * 1. Redistributions of source code must retain the above copyright
42  * notice, this list of conditions and the following disclaimer.
43  * 2. Redistributions in binary form must reproduce the above copyright
44  * notice, this list of conditions and the following disclaimer in
45  * the documentation and/or other materials provided with the
46  * distribution.
47  * 3. Neither the name of Guichan nor the names of its contributors may
48  * be used to endorse or promote products derived from this software
49  * without specific prior written permission.
50  *
51  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
52  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
53  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
54  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
55  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
56  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
57  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
58  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
59  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
60  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
61  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
62  */
63 
64 #ifndef GUI_COLOR_H
65 #define GUI_COLOR_H
66 
67 #include "utils/cast.h"
68 
69 #include "localconsts.h"
70 
74 class Color final
75 {
76  public:
81  r(0U),
82  g(0U),
83  b(0U),
84  a(255U)
85  {
86  }
87 
101  explicit constexpr Color(const unsigned int color) :
102  r((color >> 16) & 0xFFU),
103  g((color >> 8) & 0xFFU),
104  b(color & 0xFFU),
105  a(255U)
106  {
107  }
108 
118  constexpr Color(const unsigned int ar,
119  const unsigned int ag,
120  const unsigned int ab,
121  const unsigned int aa) :
122  r(ar),
123  g(ag),
124  b(ab),
125  a(aa)
126  {
127  }
128 
129 
131 
132 
142  constexpr2 Color operator+(const Color& color) const
143  {
144  Color result(r + color.r,
145  g + color.g,
146  b + color.b,
147  255U);
148 
149  result.r = (result.r > 255U ? 255U : result.r);
150  result.g = (result.g > 255U ? 255U : result.g);
151  result.b = (result.b > 255U ? 255U : result.b);
152 
153  return result;
154  }
155 
166  constexpr2 Color operator-(const Color& color) const
167  {
168  Color result(r - color.r,
169  g - color.g,
170  b - color.b,
171  255U);
172 
173  result.r = (result.r > 255U ? 255U : result.r);
174  result.g = (result.g > 255U ? 255U : result.g);
175  result.b = (result.b > 255U ? 255U : result.b);
176 
177  return result;
178  }
179 
189  constexpr2 Color operator*(const float value) const
190  {
191  Color result(CAST_U32(static_cast<float>(r) * value),
192  CAST_U32(static_cast<float>(g) * value),
193  CAST_U32(static_cast<float>(b) * value),
194  a);
195 
196  result.r = (result.r > 255U ? 255U : result.r);
197  result.g = (result.g > 255U ? 255U : result.g);
198  result.b = (result.b > 255U ? 255U : result.b);
199 
200  return result;
201  }
202 
209  constexpr bool operator==(const Color& color) const
210  {
211  return r == color.r &&
212  g == color.g &&
213  b == color.b &&
214  a == color.a;
215  }
216 
223  constexpr bool operator!=(const Color& color) const
224  {
225  return !(r == color.r &&
226  g == color.g &&
227  b == color.b &&
228  a == color.a);
229  }
230 
234  unsigned int r;
235 
239  unsigned int g;
240 
244  unsigned int b;
245 
250  unsigned int a;
251 };
252 
253 #endif // GUI_COLOR_H
cast.h
Color::r
unsigned int r
Definition: color.h:234
Color::b
unsigned int b
Definition: color.h:244
Color::operator==
bool operator==(const Color &color) const
Definition: color.h:209
constexpr2
#define constexpr2
Definition: localconsts.h:48
CAST_U32
#define CAST_U32
Definition: cast.h:30
localconsts.h
A_DEFAULT_COPY
#define A_DEFAULT_COPY(func)
Definition: localconsts.h:40
Color::g
unsigned int g
Definition: color.h:239
final
#define final
Definition: localconsts.h:45
Color::operator*
Color operator*(const float value) const
Definition: color.h:189
Color::operator-
Color operator-(const Color &color) const
Definition: color.h:166
constexpr
#define constexpr
Definition: localconsts.h:47
Color::operator!=
bool operator!=(const Color &color) const
Definition: color.h:223
Color::Color
Color(const unsigned int color)
Definition: color.h:101
Color
Definition: color.h:74
Color::Color
Color(const unsigned int ar, const unsigned int ag, const unsigned int ab, const unsigned int aa)
Definition: color.h:118
Color::a
unsigned int a
Definition: color.h:250
Color::Color
Color()
Definition: color.h:80