/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "include/core/SkCanvas.h" #include "include/core/SkShader.h" #include "include/effects/SkGradientShader.h" #include "samplecode/DecodeFile.h" #include "samplecode/Sample.h" #include "tools/Resources.h" namespace { static sk_sp make_bitmapfade(const SkBitmap& bm) { SkPoint pts[2] = { {0, 0}, {0, (float)bm.height()}, }; SkColor colors[2] = { SkColorSetARGB(255, 0, 0, 0), SkColorSetARGB(0, 0, 0, 0), }; return SkShaders::Blend(SkBlendMode::kDstIn, bm.makeShader(), SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kClamp)); } static sk_sp make_blend_shader() { SkPoint pts[2]; SkColor colors[2]; pts[0].set(0, 0); pts[1].set(SkIntToScalar(100), 0); colors[0] = SK_ColorRED; colors[1] = SK_ColorBLUE; auto shaderA = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kClamp); pts[0].set(0, 0); pts[1].set(0, SkIntToScalar(100)); colors[0] = SK_ColorBLACK; colors[1] = SkColorSetARGB(0x80, 0, 0, 0); auto shaderB = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kClamp); return SkShaders::Blend(SkBlendMode::kDstIn, std::move(shaderA), std::move(shaderB)); } struct ShaderView : public Sample { sk_sp fShader; sk_sp fShaderFade; SkBitmap fBitmap; void onOnceBeforeDraw() override { decode_file(GetResourceAsData("images/dog.jpg"), &fBitmap); fShader = make_blend_shader(); fShaderFade = make_bitmapfade(fBitmap); } SkString name() override { return SkString("Shaders"); } void onDrawContent(SkCanvas* canvas) override { canvas->drawBitmap(fBitmap, 0, 0); canvas->translate(20, 120); SkPaint paint; paint.setColor(SK_ColorGREEN); canvas->drawRect(SkRect{0, 0, 100, 100}, paint); paint.setShader(fShader); canvas->drawRect(SkRect{0, 0, 100, 100}, paint); canvas->translate(SkIntToScalar(110), 0); paint.setShader(nullptr); canvas->drawRect(SkRect{0, 0, 120, 80}, paint); paint.setShader(fShaderFade); canvas->drawRect(SkRect{0, 0, 120, 80}, paint); } }; } // namespace DEF_SAMPLE( return new ShaderView(); )