1 // Copyright 2022 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/fxge/cfx_defaultrenderdevice.h"
6
7 #include <utility>
8
9 #include "core/fxge/dib/cfx_dibitmap.h"
10
11 namespace {
12
13 // When build variant is Skia then it is assumed as the default, but might be
14 // overridden at runtime.
15 #if defined(_SKIA_SUPPORT_)
16 CFX_DefaultRenderDevice::RendererType g_default_renderer_type =
17 CFX_DefaultRenderDevice::RendererType::kSkia;
18 #endif
19
20 } // namespace
21
22 // static
SkiaIsDefaultRenderer()23 bool CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() {
24 #if defined(_SKIA_SUPPORT_)
25 return g_default_renderer_type == RendererType::kSkia;
26 #else
27 return false;
28 #endif
29 }
30
31 #if defined(_SKIA_SUPPORT_)
32 // static
SetDefaultRenderer(RendererType renderer_type)33 void CFX_DefaultRenderDevice::SetDefaultRenderer(RendererType renderer_type) {
34 g_default_renderer_type = renderer_type;
35 }
36 #endif
37
38 CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() = default;
39
40 CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() = default;
41
Attach(RetainPtr<CFX_DIBitmap> pBitmap)42 bool CFX_DefaultRenderDevice::Attach(RetainPtr<CFX_DIBitmap> pBitmap) {
43 return AttachWithRgbByteOrder(std::move(pBitmap), false);
44 }
45
AttachWithRgbByteOrder(RetainPtr<CFX_DIBitmap> pBitmap,bool bRgbByteOrder)46 bool CFX_DefaultRenderDevice::AttachWithRgbByteOrder(
47 RetainPtr<CFX_DIBitmap> pBitmap,
48 bool bRgbByteOrder) {
49 return AttachImpl(std::move(pBitmap), bRgbByteOrder, nullptr, false);
50 }
51
AttachWithBackdropAndGroupKnockout(RetainPtr<CFX_DIBitmap> pBitmap,RetainPtr<CFX_DIBitmap> pBackdropBitmap,bool bGroupKnockout)52 bool CFX_DefaultRenderDevice::AttachWithBackdropAndGroupKnockout(
53 RetainPtr<CFX_DIBitmap> pBitmap,
54 RetainPtr<CFX_DIBitmap> pBackdropBitmap,
55 bool bGroupKnockout) {
56 return AttachImpl(std::move(pBitmap), false, std::move(pBackdropBitmap),
57 bGroupKnockout);
58 }
59
AttachImpl(RetainPtr<CFX_DIBitmap> pBitmap,bool bRgbByteOrder,RetainPtr<CFX_DIBitmap> pBackdropBitmap,bool bGroupKnockout)60 bool CFX_DefaultRenderDevice::CFX_DefaultRenderDevice::AttachImpl(
61 RetainPtr<CFX_DIBitmap> pBitmap,
62 bool bRgbByteOrder,
63 RetainPtr<CFX_DIBitmap> pBackdropBitmap,
64 bool bGroupKnockout) {
65 #if defined(_SKIA_SUPPORT_)
66 if (SkiaIsDefaultRenderer()) {
67 return AttachSkiaImpl(std::move(pBitmap), bRgbByteOrder,
68 std::move(pBackdropBitmap), bGroupKnockout);
69 }
70 #endif
71 return AttachAggImpl(std::move(pBitmap), bRgbByteOrder,
72 std::move(pBackdropBitmap), bGroupKnockout);
73 }
74
Create(int width,int height,FXDIB_Format format,RetainPtr<CFX_DIBitmap> pBackdropBitmap)75 bool CFX_DefaultRenderDevice::Create(int width,
76 int height,
77 FXDIB_Format format,
78 RetainPtr<CFX_DIBitmap> pBackdropBitmap) {
79 #if defined(_SKIA_SUPPORT_)
80 if (SkiaIsDefaultRenderer())
81 return CreateSkia(width, height, format, pBackdropBitmap);
82 #endif
83 return CreateAgg(width, height, format, pBackdropBitmap);
84 }
85