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