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/agg/cfx_agg_devicedriver.h"
10 #include "core/fxge/dib/cfx_dibitmap.h"
11
12 #if defined(PDF_USE_SKIA)
13 #include "core/fxge/skia/fx_skia_device.h"
14 #endif
15
16 namespace {
17
18 // When build variant is Skia then it is assumed as the default, but might be
19 // overridden at runtime.
20 #if defined(PDF_USE_SKIA)
21 CFX_DefaultRenderDevice::RendererType g_renderer_type =
22 CFX_DefaultRenderDevice::kDefaultRenderer;
23 #endif
24
25 } // namespace
26
27 // static
UseSkiaRenderer()28 bool CFX_DefaultRenderDevice::UseSkiaRenderer() {
29 #if defined(PDF_USE_SKIA)
30 return g_renderer_type == RendererType::kSkia;
31 #else
32 return false;
33 #endif
34 }
35
36 #if defined(PDF_USE_SKIA)
37 // static
SetRendererType(RendererType renderer_type)38 void CFX_DefaultRenderDevice::SetRendererType(RendererType renderer_type) {
39 g_renderer_type = renderer_type;
40 }
41 #endif
42
43 CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() = default;
44
45 CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() = default;
46
Attach(RetainPtr<CFX_DIBitmap> pBitmap)47 bool CFX_DefaultRenderDevice::Attach(RetainPtr<CFX_DIBitmap> pBitmap) {
48 return AttachWithRgbByteOrder(std::move(pBitmap), false);
49 }
50
AttachWithRgbByteOrder(RetainPtr<CFX_DIBitmap> pBitmap,bool bRgbByteOrder)51 bool CFX_DefaultRenderDevice::AttachWithRgbByteOrder(
52 RetainPtr<CFX_DIBitmap> pBitmap,
53 bool bRgbByteOrder) {
54 return AttachImpl(std::move(pBitmap), bRgbByteOrder, nullptr, false);
55 }
56
AttachWithBackdropAndGroupKnockout(RetainPtr<CFX_DIBitmap> pBitmap,RetainPtr<CFX_DIBitmap> pBackdropBitmap,bool bGroupKnockout)57 bool CFX_DefaultRenderDevice::AttachWithBackdropAndGroupKnockout(
58 RetainPtr<CFX_DIBitmap> pBitmap,
59 RetainPtr<CFX_DIBitmap> pBackdropBitmap,
60 bool bGroupKnockout) {
61 return AttachImpl(std::move(pBitmap), false, std::move(pBackdropBitmap),
62 bGroupKnockout);
63 }
64
AttachImpl(RetainPtr<CFX_DIBitmap> pBitmap,bool bRgbByteOrder,RetainPtr<CFX_DIBitmap> pBackdropBitmap,bool bGroupKnockout)65 bool CFX_DefaultRenderDevice::CFX_DefaultRenderDevice::AttachImpl(
66 RetainPtr<CFX_DIBitmap> pBitmap,
67 bool bRgbByteOrder,
68 RetainPtr<CFX_DIBitmap> pBackdropBitmap,
69 bool bGroupKnockout) {
70 #if defined(PDF_USE_SKIA)
71 if (UseSkiaRenderer()) {
72 return AttachSkiaImpl(std::move(pBitmap), bRgbByteOrder,
73 std::move(pBackdropBitmap), bGroupKnockout);
74 }
75 #endif
76 return AttachAggImpl(std::move(pBitmap), bRgbByteOrder,
77 std::move(pBackdropBitmap), bGroupKnockout);
78 }
79
Create(int width,int height,FXDIB_Format format)80 bool CFX_DefaultRenderDevice::Create(int width,
81 int height,
82 FXDIB_Format format) {
83 return CreateWithBackdrop(width, height, format, nullptr);
84 }
85
CreateWithBackdrop(int width,int height,FXDIB_Format format,RetainPtr<CFX_DIBitmap> backdrop)86 bool CFX_DefaultRenderDevice::CreateWithBackdrop(
87 int width,
88 int height,
89 FXDIB_Format format,
90 RetainPtr<CFX_DIBitmap> backdrop) {
91 #if defined(PDF_USE_SKIA)
92 if (UseSkiaRenderer()) {
93 return CreateSkia(width, height, format, backdrop);
94 }
95 #endif
96 return CreateAgg(width, height, format, backdrop);
97 }
98
Clear(uint32_t color)99 void CFX_DefaultRenderDevice::Clear(uint32_t color) {
100 #if defined(PDF_USE_SKIA)
101 if (UseSkiaRenderer()) {
102 static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver())->Clear(color);
103 return;
104 }
105 #endif
106 static_cast<pdfium::CFX_AggDeviceDriver*>(GetDeviceDriver())->Clear(color);
107 }
108