initial commit

This commit is contained in:
2026-02-12 00:45:31 -08:00
commit 5f168f370b
3024 changed files with 804889 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
#pragma once
#include "fl/colorutils.h"
#include "fl/function.h"
#include "fl/span.h"
#include "fl/type_traits.h"
#include "fl/variant.h"
namespace fl {
class CRGBPalette16;
class CRGBPalette32;
class CRGBPalette256;
class GradientInlined;
class Gradient {
public:
using GradientFunction = fl::function<CRGB(u8 index)>;
Gradient() = default;
Gradient(const GradientInlined &other);
template <typename T> Gradient(T *palette);
Gradient(const Gradient &other);
Gradient &operator=(const Gradient &other);
Gradient(Gradient &&other) noexcept;
// non template allows carefull control of what can be set.
void set(const CRGBPalette16 *palette);
void set(const CRGBPalette32 *palette);
void set(const CRGBPalette256 *palette);
void set(const GradientFunction &func);
CRGB colorAt(u8 index) const;
void fill(span<const u8> input, span<CRGB> output) const;
private:
using GradientVariant =
Variant<const CRGBPalette16 *, const CRGBPalette32 *,
const CRGBPalette256 *, GradientFunction>;
GradientVariant mVariant;
};
class GradientInlined {
public:
using GradientFunction = fl::function<CRGB(u8 index)>;
using GradientVariant =
Variant<CRGBPalette16, CRGBPalette32, CRGBPalette256, GradientFunction>;
GradientInlined() = default;
template <typename T> GradientInlined(const T &palette) { set(palette); }
GradientInlined(const GradientInlined &other) = default;
GradientInlined &operator=(const GradientInlined &other) = default;
void set(const CRGBPalette16 &palette) { mVariant = palette; }
void set(const CRGBPalette32 &palette) { mVariant = palette; }
void set(const CRGBPalette256 &palette) { mVariant = palette; }
void set(const GradientFunction &func) { mVariant = func; }
CRGB colorAt(u8 index) const;
void fill(span<const u8> input, span<CRGB> output) const;
GradientVariant &variant() { return mVariant; }
const GradientVariant &variant() const { return mVariant; }
private:
GradientVariant mVariant;
};
} // namespace fl