1 // RGBA.h: RGBA color handling.
3 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software
6 // This program 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 3 of the License, or
9 // (at your option) any later version.
11 // This program 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.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 #include <boost/cstdint.hpp>
34 /// This both represents a SWF RGBA record and is a basic Gnash type for
40 /// Construct default RGBA value.
42 /// Default value is 0xffffffff (solid white).
51 /// Construct an RGBA with the provided values
56 /// @param a Alpha (transparency)
57 rgba(boost::uint8_t r
, boost::uint8_t g
, boost::uint8_t b
,
67 /// Parse a 32-bit unsigned integer as three packed R,G,B bytes.
69 /// Alpha will be untouched.
70 /// Blue is the least significant byte.
72 /// This function is meant to be used to
73 /// parse ActionScript colors in numeric format.
74 void parseRGB(boost::uint32_t rgbCol
) {
75 m_r
= static_cast<boost::uint8_t>(rgbCol
>> 16);
76 m_g
= static_cast<boost::uint8_t>(rgbCol
>> 8);
77 m_b
= static_cast<boost::uint8_t>(rgbCol
);
80 /// Return a 32-bit unsigned integer as four packed R,G,B bytes.
82 /// Blue is the least significant byte. The most significant (alpha)
85 /// This function is meant to be used to output ActionScript colors
86 /// in numeric format.
87 boost::uint32_t toRGB() const {
88 return (m_r
<< 16) + (m_g
<< 8) + m_b
;
91 /// Return a 32-bit unsigned integer as four packed A,R,G,B bytes.
93 /// Blue is the least significant byte.
95 /// This function is meant to be used to output ActionScript colors
96 /// in numeric format.
97 boost::uint32_t toRGBA() const {
98 return toRGB() + (m_a
<< 24);
101 /// Set r, g, b, a values
102 void set(boost::uint8_t r
, boost::uint8_t g
, boost::uint8_t b
,
110 /// Used for morphing.
111 void set_lerp(const rgba
& a
, const rgba
& b
, float f
);
113 /// Neater string output (example: "0,0,0,255")
114 std::string
toShortString() const;
116 friend std::ostream
& operator<< (std::ostream
& os
, const rgba
& r
);
118 bool operator==(const rgba
& o
) const {
119 return m_r
== o
.m_r
&&
125 bool operator!=(const rgba
& o
) const {
126 return !(*this == o
);
129 boost::uint8_t m_r
, m_g
, m_b
, m_a
;
133 std::ostream
& operator<< (std::ostream
& os
, const rgba
& r
);
135 /// Create an RGBA value from a hex string (e.g. FF0000)
137 /// @param color A hex string in 'rrbbgg' format. This must contain only
138 /// a valid hexadecimal number. It is the caller's
139 /// responsibility to check it.
140 rgba
colorFromHexString(const std::string
& color
);
150 // indent-tabs-mode: t