|  | /* | 
|  | * Copyright (C) 2021 The Android Open Source Project | 
|  | * | 
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | * you may not use this file except in compliance with the License. | 
|  | * You may obtain a copy of the License at | 
|  | * | 
|  | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | * See the License for the specific language governing permissions and | 
|  | * limitations under the License. | 
|  | */ | 
|  | #pragma once | 
|  |  | 
|  | #include "GrRecordingContext.h" | 
|  | #include <effects/StretchEffect.h> | 
|  | #include <SkSurface.h> | 
|  | #include "SkiaDisplayList.h" | 
|  |  | 
|  | namespace android::uirenderer { | 
|  |  | 
|  | /** | 
|  | * Helper class used to create/cache an SkSurface instance | 
|  | * to create a mask that is used to draw a stretched hole punch | 
|  | */ | 
|  | class StretchMask { | 
|  | public: | 
|  | /** | 
|  | * Release the current surface used for the stretch mask | 
|  | */ | 
|  | void clear() { | 
|  | mMaskSurface = nullptr; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Reset the dirty flag to re-create the stretch mask on the next draw | 
|  | * pass | 
|  | */ | 
|  | void markDirty() { | 
|  | mIsDirty = true; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Draws the stretch mask into the given target canvas | 
|  | * @param context GrRecordingContext used to create the surface if necessary | 
|  | * @param stretch StretchEffect to apply to the mask | 
|  | * @param bounds Target bounds to draw into the given canvas | 
|  | * @param displayList List of drawing commands to render into the stretch mask | 
|  | * @param canvas Target canvas to draw the mask into | 
|  | */ | 
|  | void draw(GrRecordingContext* context, | 
|  | const StretchEffect& stretch, const SkRect& bounds, | 
|  | skiapipeline::SkiaDisplayList* displayList, SkCanvas* canvas); | 
|  | private: | 
|  | sk_sp<SkSurface> mMaskSurface; | 
|  | bool mIsDirty = true; | 
|  | }; | 
|  |  | 
|  | } |