Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / rive-cpp / include / rive / math / color.hpp
1 #ifndef _RIVE_COLOR_HPP_
2 #define _RIVE_COLOR_HPP_
3
4 #include "rive/rive_types.hpp"
5
6 namespace rive {
7     class Color {
8     private:
9         float m_Buffer[4];
10
11     public:
12         Color() : m_Buffer{1.0f, 1.0f, 1.0f, 1.0f} {}
13
14         Color(float r, float g, float b) : m_Buffer{r, g, b, 1.0f} {}
15
16         Color(float r, float g, float b, float a) : m_Buffer{r, g, b, a} {}
17
18         Color(int r, int g, int b, int a) :
19             m_Buffer{r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f} {}
20
21         Color(int r, int g, int b) : m_Buffer{r / 255.0f, g / 255.0f, b / 255.0f, 1.0f} {}
22
23         Color(float rgba) : m_Buffer{rgba, rgba, rgba, rgba} {}
24
25         inline const float* values() const { return m_Buffer; }
26
27         float& operator[](std::size_t idx) { return m_Buffer[idx]; }
28         const float& operator[](std::size_t idx) const { return m_Buffer[idx]; }
29         bool operator==(const Color& b) const {
30             return m_Buffer[0] == b[0] && m_Buffer[1] == b[1] && m_Buffer[2] == b[2] &&
31                    m_Buffer[3] == b[3];
32         }
33
34         void set(float r, float g, float b, float a) {
35             m_Buffer[0] = r;
36             m_Buffer[1] = g;
37             m_Buffer[2] = b;
38             m_Buffer[3] = a;
39         }
40
41         void lerp(const Color& second, float amount) {
42             float iamount = 1.0f - amount;
43             for (int i = 0; i < 4; i++) {
44                 m_Buffer[i] = second.m_Buffer[i] * amount + m_Buffer[i] * iamount;
45             }
46         }
47
48         void multiply(const Color& second) {
49             for (int i = 0; i < 4; i++) {
50                 m_Buffer[i] *= second.m_Buffer[i];
51             }
52         }
53
54         void copy(const Color& second) {
55             for (int i = 0; i < 4; i++) {
56                 m_Buffer[i] = second.m_Buffer[i];
57             }
58         }
59
60         void red(float r) { m_Buffer[0] = r; }
61         void green(float r) { m_Buffer[1] = r; }
62         void blue(float r) { m_Buffer[2] = r; }
63         void alpha(float r) { m_Buffer[3] = r; }
64
65         float red() const { return m_Buffer[0]; }
66         float green() const { return m_Buffer[1]; }
67         float blue() const { return m_Buffer[2]; }
68         float alpha() const { return m_Buffer[3]; }
69
70         float r() const { return m_Buffer[0]; }
71         float g() const { return m_Buffer[1]; }
72         float b() const { return m_Buffer[2]; }
73         float a() const { return m_Buffer[3]; }
74     };
75 } // namespace rive
76 #endif