diff options
Diffstat (limited to 'src/gui/palette.cpp')
-rw-r--r-- | src/gui/palette.cpp | 51 |
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; + } } } } |