/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "src/gpu/ganesh/GrCanvas.h" #include "include/android/SkCanvasAndroid.h" #include "include/core/SkRect.h" #include "include/gpu/ganesh/GrBackendSurface.h" #include "src/core/SkCanvasPriv.h" #include "src/core/SkDevice.h" #include "src/gpu/ganesh/Device.h" #include "src/gpu/ganesh/GrRenderTarget.h" #include "src/gpu/ganesh/GrRenderTargetProxy.h" namespace skgpu::ganesh { SurfaceDrawContext* TopDeviceSurfaceDrawContext(const SkCanvas* canvas) { if (auto gpuDevice = SkCanvasPriv::TopDevice(canvas)->asGaneshDevice()) { return gpuDevice->surfaceDrawContext(); } return nullptr; } SurfaceFillContext* TopDeviceSurfaceFillContext(const SkCanvas* canvas) { if (auto gpuDevice = SkCanvasPriv::TopDevice(canvas)->asGaneshDevice()) { return gpuDevice->surfaceFillContext(); } return nullptr; } GrRenderTargetProxy* TopDeviceTargetProxy(const SkCanvas* canvas) { if (auto gpuDevice = SkCanvasPriv::TopDevice(canvas)->asGaneshDevice()) { return gpuDevice->targetProxy(); } return nullptr; } SkIRect TopLayerBounds(const SkCanvas* canvas) { return SkCanvasPriv::TopDevice(canvas)->getGlobalBounds(); } GrBackendRenderTarget TopLayerBackendRenderTarget(const SkCanvas* canvas) { auto proxy = TopDeviceTargetProxy(canvas); if (!proxy) { return {}; } const GrRenderTarget* renderTarget = proxy->peekRenderTarget(); return renderTarget ? renderTarget->getBackendRenderTarget() : GrBackendRenderTarget(); } } // namespace skgpu::ganesh