69 std::move(
color), mode))
91 return Make(std::move(child), { std::move(c0), std::move(c1) });
96 return (child && colors.size() > 1)
103 , fColors(
std::move(colors)) {
104 for (
const auto&
color : fColors) {
110 for (
const auto&
color : fColors) {
121 const auto dR = c1.fR - c0.fR,
153 const float tint_matrix[] = {
165 uint8_t rTable[256], gTable[256], bTable[256];
168 const auto span_count =
colors.size() - 1;
170 size_t span_start = 0;
171 for (
size_t i = 0; i < span_count; ++i) {
172 const auto span_stop =
static_cast<size_t>(std::round((i + 1) * 255.0f / span_count)),
173 span_size = span_stop - span_start;
174 if (span_start > span_stop) {
182 c1 =
colors[i + 1]->getColor();
186 const float dR = (
SkColorGetR(c1) - r) / span_size,
190 for (
size_t j = span_start; j <= span_stop; ++j) {
191 rTable[j] =
static_cast<uint8_t
>(std::round(r));
192 gTable[j] =
static_cast<uint8_t
>(std::round(g));
193 bTable[j] =
static_cast<uint8_t
>(std::round(
b));
200 span_start = span_stop + 1;
204 const float luminance_matrix[] = {
218 for (
const auto&
color : fColors) {
227 auto gradientCF = (fColors.size() > 2) ? MakeNColorGradient(fColors)
228 : Make2ColorGradient(fColors[0], fColors[1]);
#define SkColorGetR(color)
#define SkColorGetG(color)
#define SkColorGetB(color)
#define INHERITED(method,...)
sk_sp< SkColorFilter > makeComposed(sk_sp< SkColorFilter > inner) const
static sk_sp< SkColorFilter > Blend(const SkColor4f &c, sk_sp< SkColorSpace >, SkBlendMode mode)
static sk_sp< SkColorFilter > Matrix(const SkColorMatrix &)
static sk_sp< SkColorFilter > Lerp(float t, sk_sp< SkColorFilter > dst, sk_sp< SkColorFilter > src)
static sk_sp< SkColorFilter > TableARGB(const uint8_t tableA[256], const uint8_t tableR[256], const uint8_t tableG[256], const uint8_t tableB[256])
static const SkMatrix & I()
const RenderNode * onNodeAt(const SkPoint &) const final
virtual sk_sp< SkColorFilter > onRevalidateFilter()=0
ColorFilter(sk_sp< RenderNode >)
SkRect onRevalidate(InvalidationController *, const SkMatrix &) final
void onRender(SkCanvas *, const RenderContext *) const final
const RenderNode * onNodeAt(const SkPoint &) const override
void onRender(SkCanvas *, const RenderContext *) const override
SkRect onRevalidate(InvalidationController *, const SkMatrix &) override
~ExternalColorFilter() override
void onRender(SkCanvas *, const RenderContext *) const override
static sk_sp< ExternalColorFilter > Make(sk_sp< RenderNode > child)
sk_sp< SkColorFilter > onRevalidateFilter() override
static sk_sp< GradientColorFilter > Make(sk_sp< RenderNode > child, sk_sp< Color > c0, sk_sp< Color > c1)
~GradientColorFilter() override
~ModeColorFilter() override
sk_sp< SkColorFilter > onRevalidateFilter() override
static sk_sp< ModeColorFilter > Make(sk_sp< RenderNode > child, sk_sp< Color > color, SkBlendMode mode)
void observeInval(const sk_sp< Node > &)
void unobserveInval(const sk_sp< Node > &)
ScopedRenderContext && modulateColorFilter(sk_sp< SkColorFilter >)
PODArray< SkColor > colors
static SkRGBA4f FromColor(SkColor color)