cfd204a785
AndroidFramework uses both their own custom display list (which could handle resetClip with android-side changes) AND conventional picture recording. In order for replace op emulation to work when they have been recorded into a picture, we need to make it virtual and supported in SkPicture. This also renames the API to ResetClip() from ReplaceClip() and does not have any additional arguments. Based on AF's usage pattern, it only n needs to reset the clip to the surface bounds or the device clip restriction, it seems best to reduce the API as much as possible before it's adopted. Bug: skia:10209 Change-Id: I37adb097c84a642f4254b8c0f9d4c7fea8d9abdf Reviewed-on: https://skia-review.googlesource.com/c/skia/+/430897 Reviewed-by: Mike Reed <reed@google.com> Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
/*
|
|
* Copyright 2017 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkAndroidFrameworkUtils_DEFINED
|
|
#define SkAndroidFrameworkUtils_DEFINED
|
|
|
|
#include "include/core/SkRefCnt.h"
|
|
#include "include/core/SkTypes.h"
|
|
|
|
#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
|
|
|
|
class SkCanvas;
|
|
struct SkIRect;
|
|
struct SkRect;
|
|
class SkSurface;
|
|
|
|
/**
|
|
* SkAndroidFrameworkUtils expose private APIs used only by Android framework.
|
|
*/
|
|
class SkAndroidFrameworkUtils {
|
|
public:
|
|
|
|
#if SK_SUPPORT_GPU
|
|
/**
|
|
* clipWithStencil draws the current clip into a stencil buffer with reference value and mask
|
|
* set to 0x1. This function works only on a GPU canvas.
|
|
*
|
|
* @param canvas A GPU canvas that has a non-empty clip.
|
|
*
|
|
* @return true on success or false if clip is empty or not a GPU canvas.
|
|
*/
|
|
static bool clipWithStencil(SkCanvas* canvas);
|
|
#endif //SK_SUPPORT_GPU
|
|
|
|
static void SafetyNetLog(const char*);
|
|
|
|
static sk_sp<SkSurface> getSurfaceFromCanvas(SkCanvas* canvas);
|
|
|
|
static int SaveBehind(SkCanvas* canvas, const SkRect* subset);
|
|
|
|
// Operating within the canvas' clip stack, this resets the geometry of the clip to be wide
|
|
// open modula any device clip restriction that was set outside of the clip stack.
|
|
static void ResetClip(SkCanvas* canvas);
|
|
|
|
/**
|
|
* Unrolls a chain of nested SkPaintFilterCanvas to return the base wrapped canvas.
|
|
*
|
|
* @param canvas A SkPaintFilterCanvas or any other SkCanvas subclass.
|
|
*
|
|
* @return SkCanvas that was found in the innermost SkPaintFilterCanvas.
|
|
*/
|
|
static SkCanvas* getBaseWrappedCanvas(SkCanvas* canvas);
|
|
};
|
|
|
|
#endif // SK_BUILD_FOR_ANDROID_ANDROID
|
|
|
|
#endif // SkAndroidFrameworkUtils_DEFINED
|