fixed spacing in the headers to get rid of some warnings and some other
[blender.git] / intern / img / intern / IMG_Color.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 /**
33
34  * $Id$
35  * Copyright (C) 2001 NaN Technologies B.V.
36  * Declaration of an RGB color with red, green and blue components.
37  * Declaration of an RGBA color with red, green, blue and alpha components.
38  * Components are stored as floats.
39  * @author      Maarten Gribnau
40  * @date        March 7, 2001
41  */
42
43 #ifndef _H_IMG_Color
44 #define _H_IMG_Color
45
46 class IMG_ColorRGBA;
47
48
49 class IMG_ColorRGB {
50 public:
51         /**
52          * Constructs a color with the given values.
53          * @param       r       requested red component of the color
54          * @param       g       requested green component of the color
55          * @param       b       requested blue component of the color
56          */
57         IMG_ColorRGB(float r=0, float g=0, float b=0)
58                 : m_r(r), m_g(g), m_b(b) {}
59
60         /**
61          * Copy constructor.
62          * @param       c       the color to copy.
63          */
64         IMG_ColorRGB(const IMG_ColorRGB& c)
65                 : m_r(c.m_r), m_g(c.m_g), m_b(c.m_b) {}
66
67         /**
68          * Constructs a color without alpha from one with.
69          * @param       c       the color to copy.
70          */
71         inline IMG_ColorRGB(const IMG_ColorRGBA& c);
72
73         /** Red component of the color */
74         float m_r;
75         /** Green component of the color */
76         float m_g;
77         /** Blue component of the color */
78         float m_b;
79 };
80
81
82 class IMG_ColorRGBA {
83 public:
84         /**
85          * Constructs a color with the given values.
86          * @param       r       requested red component of the color
87          * @param       g       requested green component of the color
88          * @param       b       requested blue component of the color
89          * @param       a       requested alpha component of the color
90          */
91         IMG_ColorRGBA(float r=0, float g=0, float b=0, float a=0)
92                 : m_r(r), m_g(g), m_b(b), m_a(a) {}
93
94         /**
95          * Copy constructor.
96          * @param       c       the color to copy.
97          */
98         IMG_ColorRGBA(const IMG_ColorRGBA& c)
99                 : m_r(c.m_r), m_g(c.m_g), m_b(c.m_b), m_a(c.m_a) {}
100
101         /**
102          * Constructs a color with alpha from one without.
103          * @param       c       the color to copy.
104          */
105         IMG_ColorRGBA(const IMG_ColorRGB& c)
106                 : m_r(c.m_r), m_g(c.m_g), m_b(c.m_b), m_a(0) {}
107
108         /**
109          * Blends the given color with this color.
110          * Uses the alpha of the given color for blending.
111          * The alpha of this color is left untouched.
112          * @param       c       the color to blend
113          */
114         inline void     blendColor(const IMG_ColorRGBA& c);
115
116         /** Red component of the color */
117         float m_r;
118         /** Green component of the color */
119         float m_g;
120         /** Blue component of the color */
121         float m_b;
122         /** Alpha component of the color */
123         float m_a;
124 };
125
126 inline IMG_ColorRGB::IMG_ColorRGB(const IMG_ColorRGBA& c)
127         : m_r(c.m_r), m_g(c.m_g), m_b(c.m_b) {}
128
129 inline void     IMG_ColorRGBA::blendColor(const IMG_ColorRGBA& c)
130 {
131         float r1 = 1 - c.m_a; /* The reverse of alpha */
132 #if IMG_REVERSED_ALPHA
133         m_r = c.m_a * m_r + r1 * c.m_r;
134         m_g = c.m_a * m_g + r1 * c.m_g;
135         m_b = c.m_a * m_b + r1 * c.m_b;
136 #else
137         m_r = r1 * m_r + c.m_a * c.m_r;
138         m_g = r1 * m_g + c.m_a * c.m_g;
139         m_b = r1 * m_b + c.m_a * c.m_b;
140 #endif
141 }
142
143 #endif /* _H_IMG_Color */
144