// Copyright 2019 Google LLC
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#include "tools/fiddle/examples.h"
REG_FIDDLE(Dither_b, 256, 256, false, 0) {
void draw(SkCanvas* canvas) {
    canvas->clear(0);
    SkBitmap bm32;
    bm32.allocPixels(SkImageInfo::Make(20, 10, kN32_SkColorType, kPremul_SkAlphaType));
    SkCanvas c32(bm32);
    SkPoint points[] = {{0, 0}, {20, 0}};
    SkColor4f colors[] = {SkColor4f::FromColor(0xFF334455), SkColor4f::FromColor(0xFF662211) };
    SkPaint paint;
    paint.setShader(SkShaders::LinearGradient(
                     points, {{colors, {}, SkTileMode::kClamp}, {}}));
    paint.setDither(true);
    auto img = bm32.asImage();
    c32.drawPaint(paint);
    canvas->scale(12, 12);
    canvas->drawImage(img, 0, 0);
    paint.setBlendMode(SkBlendMode::kPlus);
    SkSamplingOptions sampling;
    canvas->drawImage(img, 0, 11, sampling, &paint);
    canvas->drawImage(img, 0, 11, sampling, &paint);
    canvas->drawImage(img, 0, 11, sampling, &paint);
}
}  // END FIDDLE
