• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "include/android/SkAndroidFrameworkUtils.h"
9 #include "include/core/SkCanvas.h"
10 #include "include/utils/SkPaintFilterCanvas.h"
11 #include "src/core/SkDevice.h"
12 #include "src/image/SkSurface_Base.h"
13 #include "src/shaders/SkShaderBase.h"
14 
15 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
16 
17 #include <log/log.h>
18 
19 #if defined(SK_GANESH)
clipWithStencil(SkCanvas * canvas)20 bool SkAndroidFrameworkUtils::clipWithStencil(SkCanvas* canvas) {
21     return canvas->baseDevice()->android_utils_clipWithStencil();
22 }
23 #endif
24 
SafetyNetLog(const char * bugNumber)25 void SkAndroidFrameworkUtils::SafetyNetLog(const char* bugNumber) {
26     android_errorWriteLog(0x534e4554, bugNumber);
27 }
28 
getSurfaceFromCanvas(SkCanvas * canvas)29 sk_sp<SkSurface> SkAndroidFrameworkUtils::getSurfaceFromCanvas(SkCanvas* canvas) {
30     sk_sp<SkSurface> surface(SkSafeRef(canvas->getSurfaceBase()));
31     return surface;
32 }
33 
SaveBehind(SkCanvas * canvas,const SkRect * subset)34 int SkAndroidFrameworkUtils::SaveBehind(SkCanvas* canvas, const SkRect* subset) {
35     return canvas->only_axis_aligned_saveBehind(subset);
36 }
37 
ResetClip(SkCanvas * canvas)38 void SkAndroidFrameworkUtils::ResetClip(SkCanvas* canvas) {
39     canvas->internal_private_resetClip();
40 }
41 
getBaseWrappedCanvas(SkCanvas * canvas)42 SkCanvas* SkAndroidFrameworkUtils::getBaseWrappedCanvas(SkCanvas* canvas) {
43     auto pfc = canvas->internal_private_asPaintFilterCanvas();
44     auto result = canvas;
45     while (pfc) {
46         result = pfc->proxy();
47         pfc = result->internal_private_asPaintFilterCanvas();
48     }
49     return result;
50 }
51 
ShaderAsALinearGradient(SkShader * shader,LinearGradientInfo * info)52 bool SkAndroidFrameworkUtils::ShaderAsALinearGradient(SkShader* shader,
53                                                       LinearGradientInfo* info) {
54     SkASSERT(shader);
55     SkTLazy<SkShaderBase::GradientInfo> baseInfo;
56     if (info) {
57         baseInfo.init();
58         baseInfo->fColorCount   = info->fColorCount;
59         baseInfo->fColors       = info->fColors;
60         baseInfo->fColorOffsets = info->fColorOffsets;
61     }
62     if (as_SB(shader)->asGradient(baseInfo.getMaybeNull()) != SkShaderBase::GradientType::kLinear) {
63         return false;
64     }
65     if (info) {
66         info->fColorCount    = baseInfo->fColorCount;  // this is inout in asGradient()
67         info->fPoints[0]     = baseInfo->fPoint[0];
68         info->fPoints[1]     = baseInfo->fPoint[1];
69         info->fTileMode      = baseInfo->fTileMode;
70         info->fGradientFlags = baseInfo->fGradientFlags;
71     }
72     return true;
73 }
74 
75 #endif // SK_BUILD_FOR_ANDROID_FRAMEWORK
76