1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 Google Inc. 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 8*c8dee2aaSAndroid Build Coastguard Worker #include "include/android/SkAndroidFrameworkUtils.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/utils/SkPaintFilterCanvas.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkTLazy.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkDevice.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/image/SkSurface_Base.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/shaders/SkShaderBase.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker #include <log/log.h> 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GANESH) clipWithStencil(SkCanvas * canvas)21*c8dee2aaSAndroid Build Coastguard Workerbool SkAndroidFrameworkUtils::clipWithStencil(SkCanvas* canvas) { 22*c8dee2aaSAndroid Build Coastguard Worker return canvas->rootDevice()->android_utils_clipWithStencil(); 23*c8dee2aaSAndroid Build Coastguard Worker } 24*c8dee2aaSAndroid Build Coastguard Worker #endif 25*c8dee2aaSAndroid Build Coastguard Worker SafetyNetLog(const char * bugNumber)26*c8dee2aaSAndroid Build Coastguard Workervoid SkAndroidFrameworkUtils::SafetyNetLog(const char* bugNumber) { 27*c8dee2aaSAndroid Build Coastguard Worker android_errorWriteLog(0x534e4554, bugNumber); 28*c8dee2aaSAndroid Build Coastguard Worker } 29*c8dee2aaSAndroid Build Coastguard Worker getSurfaceFromCanvas(SkCanvas * canvas)30*c8dee2aaSAndroid Build Coastguard Workersk_sp<SkSurface> SkAndroidFrameworkUtils::getSurfaceFromCanvas(SkCanvas* canvas) { 31*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkSurface> surface(SkSafeRef(canvas->getSurfaceBase())); 32*c8dee2aaSAndroid Build Coastguard Worker return surface; 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker SaveBehind(SkCanvas * canvas,const SkRect * subset)35*c8dee2aaSAndroid Build Coastguard Workerint SkAndroidFrameworkUtils::SaveBehind(SkCanvas* canvas, const SkRect* subset) { 36*c8dee2aaSAndroid Build Coastguard Worker return canvas->only_axis_aligned_saveBehind(subset); 37*c8dee2aaSAndroid Build Coastguard Worker } 38*c8dee2aaSAndroid Build Coastguard Worker ResetClip(SkCanvas * canvas)39*c8dee2aaSAndroid Build Coastguard Workervoid SkAndroidFrameworkUtils::ResetClip(SkCanvas* canvas) { 40*c8dee2aaSAndroid Build Coastguard Worker canvas->internal_private_resetClip(); 41*c8dee2aaSAndroid Build Coastguard Worker } 42*c8dee2aaSAndroid Build Coastguard Worker getBaseWrappedCanvas(SkCanvas * canvas)43*c8dee2aaSAndroid Build Coastguard WorkerSkCanvas* SkAndroidFrameworkUtils::getBaseWrappedCanvas(SkCanvas* canvas) { 44*c8dee2aaSAndroid Build Coastguard Worker auto pfc = canvas->internal_private_asPaintFilterCanvas(); 45*c8dee2aaSAndroid Build Coastguard Worker auto result = canvas; 46*c8dee2aaSAndroid Build Coastguard Worker while (pfc) { 47*c8dee2aaSAndroid Build Coastguard Worker result = pfc->proxy(); 48*c8dee2aaSAndroid Build Coastguard Worker pfc = result->internal_private_asPaintFilterCanvas(); 49*c8dee2aaSAndroid Build Coastguard Worker } 50*c8dee2aaSAndroid Build Coastguard Worker return result; 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker ShaderAsALinearGradient(SkShader * shader,LinearGradientInfo * info)53*c8dee2aaSAndroid Build Coastguard Workerbool SkAndroidFrameworkUtils::ShaderAsALinearGradient(SkShader* shader, 54*c8dee2aaSAndroid Build Coastguard Worker LinearGradientInfo* info) { 55*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(shader); 56*c8dee2aaSAndroid Build Coastguard Worker SkTLazy<SkShaderBase::GradientInfo> baseInfo; 57*c8dee2aaSAndroid Build Coastguard Worker if (info) { 58*c8dee2aaSAndroid Build Coastguard Worker baseInfo.init(); 59*c8dee2aaSAndroid Build Coastguard Worker baseInfo->fColorCount = info->fColorCount; 60*c8dee2aaSAndroid Build Coastguard Worker baseInfo->fColors = info->fColors; 61*c8dee2aaSAndroid Build Coastguard Worker baseInfo->fColorOffsets = info->fColorOffsets; 62*c8dee2aaSAndroid Build Coastguard Worker } 63*c8dee2aaSAndroid Build Coastguard Worker if (as_SB(shader)->asGradient(baseInfo.getMaybeNull()) != SkShaderBase::GradientType::kLinear) { 64*c8dee2aaSAndroid Build Coastguard Worker return false; 65*c8dee2aaSAndroid Build Coastguard Worker } 66*c8dee2aaSAndroid Build Coastguard Worker if (info) { 67*c8dee2aaSAndroid Build Coastguard Worker info->fColorCount = baseInfo->fColorCount; // this is inout in asGradient() 68*c8dee2aaSAndroid Build Coastguard Worker info->fPoints[0] = baseInfo->fPoint[0]; 69*c8dee2aaSAndroid Build Coastguard Worker info->fPoints[1] = baseInfo->fPoint[1]; 70*c8dee2aaSAndroid Build Coastguard Worker info->fTileMode = baseInfo->fTileMode; 71*c8dee2aaSAndroid Build Coastguard Worker info->fGradientFlags = baseInfo->fGradientFlags; 72*c8dee2aaSAndroid Build Coastguard Worker } 73*c8dee2aaSAndroid Build Coastguard Worker return true; 74*c8dee2aaSAndroid Build Coastguard Worker } 75*c8dee2aaSAndroid Build Coastguard Worker 76*c8dee2aaSAndroid Build Coastguard Worker #endif // SK_BUILD_FOR_ANDROID_FRAMEWORK 77