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