// Copyright 2020 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(shader_alphaimage, 256, 256, false, 0) {
sk_sp<SkImage> alpha_image() {
    auto s = SkSurfaces::Raster(SkImageInfo::MakeA8(128, 128));
    s->getCanvas()->clear(SkColorSetARGB(0xF0, 0x00, 0x00, 0x00));
    return s->makeImageSnapshot();
}
sk_sp<SkShader> linear_gradient() {
    SkPoint gpts[2] = {{0, 0}, {256, 256}};
    SkColor4f gc[6] = {
        SkColors::kCyan, SkColors::kBlue,   SkColors::kMagenta,
        SkColors::kRed,  SkColors::kYellow, SkColors::kGreen
    };
    return SkShaders::LinearGradient(gpts, {{gc, {}, SkTileMode::kClamp}, {}});
}

void draw(SkCanvas* canvas) {
    canvas->clear(SK_ColorLTGRAY);
    SkPaint p;
    p.setShader(linear_gradient());
    auto i = alpha_image();
    canvas->drawImage(i.get(), 128, 0, SkSamplingOptions(), &p);
    canvas->drawRect({0, 128, 128, 256}, p);
}
}  // END FIDDLE
