xref: /aosp_15_r20/external/pdfium/core/fxge/cfx_defaultrenderdevice.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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