| // Copyright 2022 The PDFium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "core/fxge/cfx_defaultrenderdevice.h" |
| |
| #include <utility> |
| |
| #include "core/fxge/dib/cfx_dibitmap.h" |
| |
| namespace { |
| |
| // When build variant is Skia then it is assumed as the default, but might be |
| // overridden at runtime. |
| #if defined(_SKIA_SUPPORT_) |
| CFX_DefaultRenderDevice::RendererType g_default_renderer_type = |
| CFX_DefaultRenderDevice::RendererType::kSkia; |
| #endif |
| |
| } // namespace |
| |
| // static |
| bool CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() { |
| #if defined(_SKIA_SUPPORT_) |
| return g_default_renderer_type == RendererType::kSkia; |
| #else |
| return false; |
| #endif |
| } |
| |
| #if defined(_SKIA_SUPPORT_) |
| // static |
| void CFX_DefaultRenderDevice::SetDefaultRenderer(RendererType renderer_type) { |
| g_default_renderer_type = renderer_type; |
| } |
| #endif |
| |
| CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() = default; |
| |
| CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() = default; |
| |
| bool CFX_DefaultRenderDevice::Attach(RetainPtr<CFX_DIBitmap> pBitmap) { |
| return AttachWithRgbByteOrder(std::move(pBitmap), false); |
| } |
| |
| bool CFX_DefaultRenderDevice::AttachWithRgbByteOrder( |
| RetainPtr<CFX_DIBitmap> pBitmap, |
| bool bRgbByteOrder) { |
| return AttachImpl(std::move(pBitmap), bRgbByteOrder, nullptr, false); |
| } |
| |
| bool CFX_DefaultRenderDevice::AttachWithBackdropAndGroupKnockout( |
| RetainPtr<CFX_DIBitmap> pBitmap, |
| RetainPtr<CFX_DIBitmap> pBackdropBitmap, |
| bool bGroupKnockout) { |
| return AttachImpl(std::move(pBitmap), false, std::move(pBackdropBitmap), |
| bGroupKnockout); |
| } |
| |
| bool CFX_DefaultRenderDevice::CFX_DefaultRenderDevice::AttachImpl( |
| RetainPtr<CFX_DIBitmap> pBitmap, |
| bool bRgbByteOrder, |
| RetainPtr<CFX_DIBitmap> pBackdropBitmap, |
| bool bGroupKnockout) { |
| #if defined(_SKIA_SUPPORT_) |
| if (SkiaIsDefaultRenderer()) { |
| return AttachSkiaImpl(std::move(pBitmap), bRgbByteOrder, |
| std::move(pBackdropBitmap), bGroupKnockout); |
| } |
| #endif |
| return AttachAggImpl(std::move(pBitmap), bRgbByteOrder, |
| std::move(pBackdropBitmap), bGroupKnockout); |
| } |
| |
| bool CFX_DefaultRenderDevice::Create(int width, |
| int height, |
| FXDIB_Format format, |
| RetainPtr<CFX_DIBitmap> pBackdropBitmap) { |
| #if defined(_SKIA_SUPPORT_) |
| if (SkiaIsDefaultRenderer()) |
| return CreateSkia(width, height, format, pBackdropBitmap); |
| #endif |
| return CreateAgg(width, height, format, pBackdropBitmap); |
| } |