summaryrefslogtreecommitdiff
path: root/src/gui/palette.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/palette.cpp')
-rw-r--r--src/gui/palette.cpp51
1 files changed, 34 insertions, 17 deletions
diff --git a/src/gui/palette.cpp b/src/gui/palette.cpp
index 6c6e6f06..948660d2 100644
--- a/src/gui/palette.cpp
+++ b/src/gui/palette.cpp
@@ -25,7 +25,6 @@
#include <cmath>
static constexpr double PI = 3.14159265;
-const gcn::Color Palette::BLACK = gcn::Color(0, 0, 0);
Timer Palette::mRainbowTimer;
Palette::Palettes Palette::mInstances;
@@ -47,23 +46,37 @@ Palette::Palette(int size) :
mInstances.insert(this);
}
+Palette::Palette(Palette &&pal)
+ : mColors(std::move(pal.mColors))
+ , mGradVector(std::move(pal.mGradVector))
+{
+ mInstances.insert(this);
+}
+
Palette::~Palette()
{
mInstances.erase(this);
}
-const gcn::Color &Palette::getColor(char c, bool &valid)
- {
- for (const auto &color : mColors)
+Palette &Palette::operator=(Palette &&pal)
+{
+ if (this != &pal)
{
- if (color.ch == c)
- {
- valid = true;
- return color.color;
- }
+ mColors = std::move(pal.mColors);
+ mGradVector = std::move(pal.mGradVector);
}
- valid = false;
- return BLACK;
+ return *this;
+}
+
+void Palette::setColor(int type,
+ const gcn::Color &color,
+ const std::optional<gcn::Color> &outlineColor,
+ GradientType grad,
+ int delay)
+{
+ auto &elem = mColors[type];
+ elem.set(type, color, grad, delay);
+ elem.outlineColor = outlineColor;
}
void Palette::advanceGradients()
@@ -97,17 +110,19 @@ void Palette::advanceGradient(int advance)
const int pos = elem->gradientIndex % delay;
const int colIndex = elem->gradientIndex / delay;
- if (elem->grad == PULSE)
- {
+ switch (elem->grad) {
+ case STATIC:
+ break;
+ case PULSE: {
const int colVal = (int) (255.0 * sin(PI * colIndex / numOfColors));
const gcn::Color &col = elem->testColor;
elem->color.r = ((colVal * col.r) / 255) % (col.r + 1);
elem->color.g = ((colVal * col.g) / 255) % (col.g + 1);
elem->color.b = ((colVal * col.b) / 255) % (col.b + 1);
+ break;
}
- if (elem->grad == SPECTRUM)
- {
+ case SPECTRUM: {
int colVal;
if (colIndex % 2)
@@ -129,9 +144,9 @@ void Palette::advanceGradient(int advance)
elem->color.b =
(colIndex == 3 || colIndex == 4) ? 255 :
(colIndex == 2 || colIndex == 5) ? colVal : 0;
+ break;
}
- else if (elem->grad == RAINBOW)
- {
+ case RAINBOW: {
const gcn::Color &startCol = RAINBOW_COLORS[colIndex];
const gcn::Color &destCol =
RAINBOW_COLORS[(colIndex + 1) % numOfColors];
@@ -147,6 +162,8 @@ void Palette::advanceGradient(int advance)
elem->color.b =(int)(startColVal * startCol.b +
destColVal * destCol.b);
+ break;
+ }
}
}
}