1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef SkAndroidFrameworkUtils_DEFINED 9cb93a386Sopenharmony_ci#define SkAndroidFrameworkUtils_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 12cb93a386Sopenharmony_ci#include "include/core/SkTypes.h" 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK 15cb93a386Sopenharmony_ci 16cb93a386Sopenharmony_ciclass SkCanvas; 17cb93a386Sopenharmony_cistruct SkIRect; 18cb93a386Sopenharmony_cistruct SkRect; 19cb93a386Sopenharmony_ciclass SkSurface; 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ci/** 22cb93a386Sopenharmony_ci * SkAndroidFrameworkUtils expose private APIs used only by Android framework. 23cb93a386Sopenharmony_ci */ 24cb93a386Sopenharmony_ciclass SkAndroidFrameworkUtils { 25cb93a386Sopenharmony_cipublic: 26cb93a386Sopenharmony_ci 27cb93a386Sopenharmony_ci#if SK_SUPPORT_GPU 28cb93a386Sopenharmony_ci /** 29cb93a386Sopenharmony_ci * clipWithStencil draws the current clip into a stencil buffer with reference value and mask 30cb93a386Sopenharmony_ci * set to 0x1. This function works only on a GPU canvas. 31cb93a386Sopenharmony_ci * 32cb93a386Sopenharmony_ci * @param canvas A GPU canvas that has a non-empty clip. 33cb93a386Sopenharmony_ci * 34cb93a386Sopenharmony_ci * @return true on success or false if clip is empty or not a GPU canvas. 35cb93a386Sopenharmony_ci */ 36cb93a386Sopenharmony_ci static bool clipWithStencil(SkCanvas* canvas); 37cb93a386Sopenharmony_ci#endif //SK_SUPPORT_GPU 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci static void SafetyNetLog(const char*); 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci static sk_sp<SkSurface> getSurfaceFromCanvas(SkCanvas* canvas); 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci static int SaveBehind(SkCanvas* canvas, const SkRect* subset); 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci // Operating within the canvas' clip stack, this resets the geometry of the clip to be wide 46cb93a386Sopenharmony_ci // open modula any device clip restriction that was set outside of the clip stack. 47cb93a386Sopenharmony_ci static void ResetClip(SkCanvas* canvas); 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci /** 50cb93a386Sopenharmony_ci * Unrolls a chain of nested SkPaintFilterCanvas to return the base wrapped canvas. 51cb93a386Sopenharmony_ci * 52cb93a386Sopenharmony_ci * @param canvas A SkPaintFilterCanvas or any other SkCanvas subclass. 53cb93a386Sopenharmony_ci * 54cb93a386Sopenharmony_ci * @return SkCanvas that was found in the innermost SkPaintFilterCanvas. 55cb93a386Sopenharmony_ci */ 56cb93a386Sopenharmony_ci static SkCanvas* getBaseWrappedCanvas(SkCanvas* canvas); 57cb93a386Sopenharmony_ci}; 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci#endif // SK_BUILD_FOR_ANDROID_ANDROID 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci#endif // SkAndroidFrameworkUtils_DEFINED 62