blob: ed1264f92b5862ae234c71f65f34f7cb5730851d [file] [log] [blame]
/*
* Copyright 2025 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef PaintOptionsBuilder_DEFINED
#define PaintOptionsBuilder_DEFINED
#include "include/gpu/graphite/precompile/PaintOptions.h"
namespace PaintOptionsUtils {
enum ImgColorInfo {
kAlpha,
kAlphaSRGB,
kPremul,
kSRGB,
};
enum ImgTileModeOptions {
kNone,
kClamp,
kRepeat,
};
// This enum directly maps to YUVImageShaderFlags but, crucially, is more compact.
enum YUVSamplingOptions {
kNoCubic, // YUVImageShaderFlags::kExcludeCubic
kHWAndShader, // YUVImageShaderFlags::kNoCubicNoNonSwizzledHW
};
enum LinearGradientOptions {
kSmall,
kComplex, // idiosyncratic case - c.f. Builder::linearGrad
};
// This is a minimal builder object that allows for compact construction of the most common
// PaintOptions combinations - eliminating a lot of boilerplate.
class Builder {
public:
Builder() {}
// Shaders
Builder& hwImg(ImgColorInfo ci, ImgTileModeOptions tmOptions = kNone);
Builder& yuv(YUVSamplingOptions options);
Builder& linearGrad(LinearGradientOptions options);
Builder& blend();
// ColorFilters
Builder& matrixCF();
Builder& porterDuffCF();
// Blendmodes
Builder& clear() { return this->addBlendMode(SkBlendMode::kClear); }
Builder& dstIn() { return this->addBlendMode(SkBlendMode::kDstIn); }
Builder& src() { return this->addBlendMode(SkBlendMode::kSrc); }
Builder& srcOver() { return this->addBlendMode(SkBlendMode::kSrcOver); }
// Misc settings
Builder& transparent() { fPaintOptions.setPaintColorIsOpaque(false); return *this; }
Builder& dither() { fPaintOptions.setDither(true); return *this; }
operator skgpu::graphite::PaintOptions() const { return fPaintOptions; }
private:
skgpu::graphite::PaintOptions fPaintOptions;
Builder& addBlendMode(SkBlendMode bm) {
fPaintOptions.addBlendMode(bm);
return *this;
}
};
} // namespace PaintOptionsUtils
#endif // PaintOptionsBuilder_DEFINED