71 paint.setAntiAlias(
true);
76 for (
int i = 0; i < 256; ++i) {
78 table[i] = (n << 5) | (n << 2) | (n >> 1);
82 for (
int i = 0; i < 256; ++i) {
83 table[i] = i * i / 255;
87 for (
int i = 0; i < 256; ++i) {
88 float fi = i / 255.0f;
89 table[i] =
static_cast<uint8_t
>(sqrtf(fi) * 255);
155 for (
size_t bitmapMaker = 0; bitmapMaker < std::size(gBitmapMakers); ++bitmapMaker) {
157 gBitmapMakers[bitmapMaker](&bm);
171 for (
unsigned i = 1; i < std::size(gColorFilterMakers); ++i) {
173 paint.setColorFilter(gColorFilterMakers[i]());
177 paint.setColorFilter(
nullptr);
179 for (
unsigned i = 0; i < std::size(gColorFilterMakers); ++i) {
182 std::move(colorFilter1),
nullptr));
188 for (
unsigned j = 1; j < std::size(gColorFilterMakers); ++j) {
191 std::move(colorFilter2), imageFilter1,
nullptr));
192 paint.setImageFilter(std::move(imageFilter2));
204 using INHERITED =
GM;
221 : fColors(colors), fModes(modes),
fName(
name) {}
237 for (
int i = 0; i < MODE_COUNT; ++i) {
252 for (
int i = 0; i < MODES; ++i) {
253 paint.setColorFilter(filters[i]);
268 for (
int y = 0;
y < MODES; ++
y) {
270 for (
int x = 0;
x < MODES; ++
x) {
271 paint.setColorFilter(filters[
y]->makeComposed(filters[
x]));
@ kExclusion
rc = s + d - two(s*d), ra = kSrcOver
@ kColorBurn
darken destination to reflect source
@ kSrcOver
r = s + (1-sa)*d
@ kXor
r = s*(1-da) + d*(1-sa)
@ kOverlay
multiply or screen, depending on destination
@ kSrcATop
r = s*da + d*(1-sa)
@ kDarken
rc = s + d - max(s*da, d*sa), ra = kSrcOver
constexpr SkColor SK_ColorYELLOW
constexpr SkColor SK_ColorMAGENTA
constexpr SkColor SK_ColorCYAN
constexpr SkColor SK_ColorTRANSPARENT
constexpr SkColor SK_ColorBLUE
constexpr SkColor SK_ColorRED
constexpr SkColor SK_ColorBLACK
constexpr SkColor SK_ColorGREEN
constexpr SkColor SK_ColorWHITE
SkISize getISize() override
ComposeColorFilterGM(const SkColor colors[], const SkBlendMode modes[], const char *name)
SkString getName() const override
void onDraw(SkCanvas *canvas) override
sk_sp< SkImage > asImage() const
void allocN32Pixels(int width, int height, bool isOpaque=false)
void eraseColor(SkColor4f) const
void drawRect(const SkRect &rect, const SkPaint &paint)
void translate(SkScalar dx, SkScalar dy)
void drawColor(SkColor color, SkBlendMode mode=SkBlendMode::kSrcOver)
void drawPaint(const SkPaint &paint)
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius, const SkPaint &paint)
static sk_sp< SkColorFilter > Blend(const SkColor4f &c, sk_sp< SkColorSpace >, SkBlendMode mode)
static sk_sp< SkColorFilter > Table(const uint8_t table[256])
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 sk_sp< SkShader > MakeRadial(const SkPoint ¢er, SkScalar radius, const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
static sk_sp< SkShader > MakeLinear(const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
static sk_sp< SkImageFilter > ColorFilter(sk_sp< SkColorFilter > cf, sk_sp< SkImageFilter > input, const CropRect &cropRect={})
SkISize getISize() override
SkString getName() const override
void onDraw(SkCanvas *canvas) override
GM(SkColor backgroundColor=SK_ColorWHITE)
static constexpr SkPoint Make(float x, float y)
constexpr float height() const
constexpr float width() const
static constexpr SkRect MakeWH(float w, float h)
static void make_table0(uint8_t table[])
static void make_table2(uint8_t table[])
static sk_sp< SkColorFilter > make_null_cf()
static sk_sp< SkShader > make_shader1(int w, int h)
static sk_sp< SkShader > make_shader0(int w, int h)
static sk_sp< SkColorFilter > make_cf0()
static void make_bm0(SkBitmap *bm)
static sk_sp< SkColorFilter > make_cf1()
const SkBlendMode gModes0[]
static void make_table1(uint8_t table[])
static void make_bm1(SkBitmap *bm)
static sk_sp< SkColorFilter > make_cf3()
const SkBlendMode gModes1[]
static sk_sp< SkColorFilter > make_cf2()