• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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