1 #ifndef _RIVE_COLOR_HPP_
2 #define _RIVE_COLOR_HPP_
4 #include "rive/rive_types.hpp"
12 Color() : m_Buffer{1.0f, 1.0f, 1.0f, 1.0f} {}
14 Color(float r, float g, float b) : m_Buffer{r, g, b, 1.0f} {}
16 Color(float r, float g, float b, float a) : m_Buffer{r, g, b, a} {}
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} {}
21 Color(int r, int g, int b) : m_Buffer{r / 255.0f, g / 255.0f, b / 255.0f, 1.0f} {}
23 Color(float rgba) : m_Buffer{rgba, rgba, rgba, rgba} {}
25 inline const float* values() const { return m_Buffer; }
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] &&
34 void set(float r, float g, float b, float a) {
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;
48 void multiply(const Color& second) {
49 for (int i = 0; i < 4; i++) {
50 m_Buffer[i] *= second.m_Buffer[i];
54 void copy(const Color& second) {
55 for (int i = 0; i < 4; i++) {
56 m_Buffer[i] = second.m_Buffer[i];
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; }
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]; }
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]; }