1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2006 The Android Open Source Project 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h" 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorFilter.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorSpace.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMatrix.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/shaders/SkColorFilterShader.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/shaders/SkLocalMatrixShader.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/shaders/SkShaderBase.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/shaders/SkWorkingColorSpaceShader.h" 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker #include <utility> 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker class SkImage; 21*c8dee2aaSAndroid Build Coastguard Worker enum class SkTileMode; 22*c8dee2aaSAndroid Build Coastguard Worker isAImage(SkMatrix * localMatrix,SkTileMode xy[2]) const23*c8dee2aaSAndroid Build Coastguard WorkerSkImage* SkShader::isAImage(SkMatrix* localMatrix, SkTileMode xy[2]) const { 24*c8dee2aaSAndroid Build Coastguard Worker return as_SB(this)->onIsAImage(localMatrix, xy); 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker makeWithLocalMatrix(const SkMatrix & localMatrix) const27*c8dee2aaSAndroid Build Coastguard Workersk_sp<SkShader> SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const { 28*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix* lm = &localMatrix; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkShader> baseShader; 31*c8dee2aaSAndroid Build Coastguard Worker SkMatrix otherLocalMatrix; 32*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkShader> proxy = as_SB(this)->makeAsALocalMatrixShader(&otherLocalMatrix); 33*c8dee2aaSAndroid Build Coastguard Worker if (proxy) { 34*c8dee2aaSAndroid Build Coastguard Worker otherLocalMatrix = SkShaderBase::ConcatLocalMatrices(localMatrix, otherLocalMatrix); 35*c8dee2aaSAndroid Build Coastguard Worker lm = &otherLocalMatrix; 36*c8dee2aaSAndroid Build Coastguard Worker baseShader = proxy; 37*c8dee2aaSAndroid Build Coastguard Worker } else { 38*c8dee2aaSAndroid Build Coastguard Worker baseShader = sk_ref_sp(const_cast<SkShader*>(this)); 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker return sk_make_sp<SkLocalMatrixShader>(std::move(baseShader), *lm); 42*c8dee2aaSAndroid Build Coastguard Worker } 43*c8dee2aaSAndroid Build Coastguard Worker makeWithColorFilter(sk_sp<SkColorFilter> filter) const44*c8dee2aaSAndroid Build Coastguard Workersk_sp<SkShader> SkShader::makeWithColorFilter(sk_sp<SkColorFilter> filter) const { 45*c8dee2aaSAndroid Build Coastguard Worker return SkColorFilterShader::Make(sk_ref_sp(this), 1.0f, std::move(filter)); 46*c8dee2aaSAndroid Build Coastguard Worker } 47*c8dee2aaSAndroid Build Coastguard Worker makeWithWorkingColorSpace(sk_sp<SkColorSpace> workingSpace) const48*c8dee2aaSAndroid Build Coastguard Workersk_sp<SkShader> SkShader::makeWithWorkingColorSpace(sk_sp<SkColorSpace> workingSpace) const { 49*c8dee2aaSAndroid Build Coastguard Worker return SkWorkingColorSpaceShader::Make(sk_ref_sp(this), std::move(workingSpace)); 50*c8dee2aaSAndroid Build Coastguard Worker } 51