Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
renderdevicedriver_iface.h
Go to the documentation of this file.
1// Copyright 2016 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// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
8#define CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
9
10#include <stdint.h>
11
12#include <memory>
13
14#include "build/build_config.h"
15#include "core/fxcrt/fx_coordinates.h"
16#include "core/fxcrt/retain_ptr.h"
17#include "core/fxcrt/span.h"
18#include "core/fxge/dib/fx_dib.h"
19
21class CFX_DIBBase;
22class CFX_DIBitmap;
23class CFX_Font;
25class CFX_Matrix;
26class CFX_Path;
27class CPDF_ShadingPattern;
29class TextCharPos;
32struct FX_RECT;
33
34enum class DeviceType : bool {
36#if BUILDFLAG(IS_WIN)
38#endif
39};
40
42 public:
43 enum class Result {
46#if BUILDFLAG(IS_WIN)
48#endif
49 };
50
51 struct StartResult {
52 StartResult(Result result,
53 std::unique_ptr<CFX_AggImageRenderer> agg_image_renderer);
55
58 };
59
61
62 virtual DeviceType GetDeviceType() const = 0;
63 virtual int GetDeviceCaps(int caps_id) const = 0;
64
65 virtual void SaveState() = 0;
66 virtual void RestoreState(bool bKeepSaved) = 0;
67
68 virtual void SetBaseClip(const FX_RECT& rect);
69 virtual bool SetClip_PathFill(const CFX_Path& path,
70 const CFX_Matrix* pObject2Device,
71 const CFX_FillRenderOptions& fill_options) = 0;
72 virtual bool SetClip_PathStroke(const CFX_Path& path,
73 const CFX_Matrix* pObject2Device,
74 const CFX_GraphStateData* pGraphState);
75 virtual bool DrawPath(const CFX_Path& path,
76 const CFX_Matrix* pObject2Device,
77 const CFX_GraphStateData* pGraphState,
78 uint32_t fill_color,
79 uint32_t stroke_color,
80 const CFX_FillRenderOptions& fill_options) = 0;
81 virtual bool FillRect(const FX_RECT& rect, uint32_t fill_color);
82 virtual bool DrawCosmeticLine(const CFX_PointF& ptMoveTo,
83 const CFX_PointF& ptLineTo,
84 uint32_t color);
85
86 virtual FX_RECT GetClipBox() const = 0;
87 virtual bool GetDIBits(RetainPtr<CFX_DIBitmap> bitmap,
88 int left,
89 int top) const;
90 virtual RetainPtr<const CFX_DIBitmap> GetBackDrop() const;
91 virtual bool SetDIBits(RetainPtr<const CFX_DIBBase> bitmap,
92 uint32_t color,
93 const FX_RECT& src_rect,
94 int dest_left,
95 int dest_top,
96 BlendMode blend_type) = 0;
97 virtual bool StretchDIBits(RetainPtr<const CFX_DIBBase> bitmap,
98 uint32_t color,
99 int dest_left,
100 int dest_top,
101 int dest_width,
102 int dest_height,
103 const FX_RECT* pClipRect,
104 const FXDIB_ResampleOptions& options,
105 BlendMode blend_type) = 0;
107 float alpha,
108 uint32_t color,
109 const CFX_Matrix& matrix,
110 const FXDIB_ResampleOptions& options,
111 BlendMode blend_type) = 0;
112 virtual bool ContinueDIBits(CFX_AggImageRenderer* handle,
113 PauseIndicatorIface* pPause);
114 virtual bool DrawDeviceText(pdfium::span<const TextCharPos> pCharPos,
115 CFX_Font* pFont,
116 const CFX_Matrix& mtObject2Device,
117 float font_size,
118 uint32_t color,
119 const CFX_TextRenderOptions& options);
120 virtual int GetDriverType() const;
121#if defined(PDF_USE_SKIA)
122 virtual bool DrawShading(const CPDF_ShadingPattern& pattern,
123 const CFX_Matrix& matrix,
124 const FX_RECT& clip_rect,
125 int alpha);
126 virtual bool SetBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
128 int left,
129 int top,
130 float alpha,
132 virtual void SetGroupKnockout(bool group_knockout);
133
134 // For `CFX_SkiaDeviceDriver` only:
135 // Syncs the current rendering result from the internal buffer to the output
136 // bitmap if such internal buffer exists.
137 virtual void SyncInternalBitmaps();
138#endif // defined(PDF_USE_SKIA)
139
140 // Multiplies the device by a constant alpha, returning `true` on success.
141 // Implementations CHECK the following conditions:
142 // - `this` is bitmap-based and `this` is not of a mask format.
143 //
144 // The backing bitmap for `this` will be converted to format
145 // `FXDIB_Format::kBgra` on success when `alpha` is not 1.
146 virtual bool MultiplyAlpha(float alpha) = 0;
147
148 // Multiplies the device by an alpha mask, returning `true` on success.
149 // Implementations CHECK the following conditions:
150 // - `this` is bitmap-based and of format `FXDIB_Format::kBgra` or
151 // `FXDIB_Format::kBgrx`.
152 // - `mask` must be of format `FXDIB_Format::k8bppMask`.
153 // - `mask` must have the same dimensions as `this`.
154 //
155 // The backing bitmap for `this` will be converted to format
156 // `FXDIB_Format::kBgra` on success.
157 virtual bool MultiplyAlphaMask(RetainPtr<const CFX_DIBitmap> mask) = 0;
158};
159
160#endif // CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
BorderStyle
bool Attach(RetainPtr< CFX_DIBitmap > pBitmap)
~CFX_DefaultRenderDevice() override
bool AttachWithBackdropAndGroupKnockout(RetainPtr< CFX_DIBitmap > pBitmap, RetainPtr< CFX_DIBitmap > pBackdropBitmap, bool bGroupKnockout)
bool AttachWithRgbByteOrder(RetainPtr< CFX_DIBitmap > pBitmap, bool bRgbByteOrder)
bool CreateWithBackdrop(int width, int height, FXDIB_Format format, RetainPtr< CFX_DIBitmap > backdrop)
bool Create(int width, int height, FXDIB_Format format)
StateRestorer(CFX_RenderDevice *pDevice)
void DrawBorder(const CFX_Matrix *pUser2Device, const CFX_FloatRect &rect, float fWidth, const CFX_Color &color, const CFX_Color &crLeftTop, const CFX_Color &crRightBottom, BorderStyle nStyle, int32_t nTransparency)
bool StretchBitMask(RetainPtr< CFX_DIBBase > bitmap, int left, int top, int dest_width, int dest_height, uint32_t color)
bool MultiplyAlpha(float alpha)
bool DrawTextPath(pdfium::span< const TextCharPos > pCharPos, CFX_Font *pFont, float font_size, const CFX_Matrix &mtText2User, const CFX_Matrix *pUser2Device, const CFX_GraphStateData *pGraphState, uint32_t fill_color, uint32_t stroke_color, CFX_Path *pClippingPath, const CFX_FillRenderOptions &fill_options)
bool SetClip_Rect(const FX_RECT &pRect)
bool SetClip_PathFill(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_FillRenderOptions &fill_options)
bool StretchDIBits(RetainPtr< const CFX_DIBBase > bitmap, int left, int top, int dest_width, int dest_height)
bool SetClip_PathStroke(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_GraphStateData *pGraphState)
RenderDeviceDriverIface * GetDeviceDriver() const
RetainPtr< const CFX_DIBitmap > GetBackDrop() const
void SetBaseClip(const FX_RECT &rect)
bool FillRect(const FX_RECT &rect, uint32_t color)
bool StretchDIBitsWithFlagsAndBlend(RetainPtr< const CFX_DIBBase > bitmap, int left, int top, int dest_width, int dest_height, const FXDIB_ResampleOptions &options, BlendMode blend_mode)
bool MultiplyAlphaMask(RetainPtr< const CFX_DIBitmap > mask)
void DrawFillRect(const CFX_Matrix *pUser2Device, const CFX_FloatRect &rect, const FX_COLORREF &color)
RetainPtr< const CFX_DIBitmap > GetBitmap() const
void SetDeviceDriver(std::unique_ptr< RenderDeviceDriverIface > pDriver)
bool SetDIBits(RetainPtr< const CFX_DIBBase > bitmap, int left, int top)
static CFX_Matrix GetFlipMatrix(float width, float height, float left, float top)
void DrawFillArea(const CFX_Matrix &mtUser2Device, const std::vector< CFX_PointF > &points, const FX_COLORREF &color)
bool SetDIBitsWithBlend(RetainPtr< const CFX_DIBBase > bitmap, int left, int top, BlendMode blend_mode)
bool SetBitMask(RetainPtr< const CFX_DIBBase > bitmap, int left, int top, uint32_t argb)
bool StretchBitMaskWithFlags(RetainPtr< CFX_DIBBase > bitmap, int left, int top, int dest_width, int dest_height, uint32_t argb, const FXDIB_ResampleOptions &options)
bool DrawPath(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_GraphStateData *pGraphState, uint32_t fill_color, uint32_t stroke_color, const CFX_FillRenderOptions &fill_options)
void SetBitmap(RetainPtr< CFX_DIBitmap > bitmap)
void DrawShadow(const CFX_Matrix &mtUser2Device, const CFX_FloatRect &rect, int32_t nTransparency, int32_t nStartGray, int32_t nEndGray)
RenderDeviceDriverIface::StartResult StartDIBits(RetainPtr< const CFX_DIBBase > bitmap, float alpha, uint32_t argb, const CFX_Matrix &matrix, const FXDIB_ResampleOptions &options)
void DrawStrokeLine(const CFX_Matrix *pUser2Device, const CFX_PointF &ptMoveTo, const CFX_PointF &ptLineTo, const FX_COLORREF &color, float fWidth)
int GetRenderCaps() const
bool DrawNormalText(pdfium::span< const TextCharPos > pCharPos, CFX_Font *pFont, float font_size, const CFX_Matrix &mtText2Device, uint32_t fill_color, const CFX_TextRenderOptions &options)
RenderDeviceDriverIface::StartResult StartDIBitsWithBlend(RetainPtr< const CFX_DIBBase > bitmap, float alpha, uint32_t argb, const CFX_Matrix &matrix, const FXDIB_ResampleOptions &options, BlendMode blend_mode)
void DrawStrokeRect(const CFX_Matrix &mtUser2Device, const CFX_FloatRect &rect, const FX_COLORREF &color, float fWidth)
RetainPtr< CFX_DIBitmap > GetBitmap()
int GetHeight() const
const FX_RECT & GetClipBox() const
int GetDeviceCaps(int id) const
void RestoreState(bool bKeepSaved)
bool CreateCompatibleBitmap(const RetainPtr< CFX_DIBitmap > &pDIB, int width, int height) const
DeviceType GetDeviceType() const
bool ContinueDIBits(CFX_AggImageRenderer *handle, PauseIndicatorIface *pPause)
void DrawFillRect(const CFX_Matrix *pUser2Device, const CFX_FloatRect &rect, const CFX_Color &color, int32_t nTransparency)
bool GetDIBits(RetainPtr< CFX_DIBitmap > bitmap, int left, int top) const
void VerifySavedHelloWorldDocumentWithPassword(const char *password)
void VerifySavedModifiedHelloWorldDocumentWithPassword(const char *password)
void OpenAndVerifyHelloWorldDocumentWithPassword(const char *filename, const char *password)
RetainPtr< CPDF_Object > RemoveFor(ByteStringView key)
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
CPDF_Parser * GetParser() const
CPDF_Dictionary * GetMutableTrailerForTesting()
FPDF_DOCUMENT OpenSavedDocumentWithPassword(const char *password)
void CloseSavedDocument()
FPDF_PAGE LoadPage(int page_index)
static void CompareBitmap(FPDF_BITMAP bitmap, int expected_width, int expected_height, const char *expected_md5sum)
void UnloadPage(FPDF_PAGE page)
FPDF_DOCUMENT document() const
void CloseSavedPage(FPDF_PAGE page)
FPDF_PAGE LoadSavedPage(int page_index)
virtual bool DrawDeviceText(pdfium::span< const TextCharPos > pCharPos, CFX_Font *pFont, const CFX_Matrix &mtObject2Device, float font_size, uint32_t color, const CFX_TextRenderOptions &options)
virtual void SetBaseClip(const FX_RECT &rect)
virtual bool StretchDIBits(RetainPtr< const CFX_DIBBase > bitmap, uint32_t color, int dest_left, int dest_top, int dest_width, int dest_height, const FX_RECT *pClipRect, const FXDIB_ResampleOptions &options, BlendMode blend_type)=0
virtual bool GetDIBits(RetainPtr< CFX_DIBitmap > bitmap, int left, int top) const
virtual int GetDeviceCaps(int caps_id) const =0
virtual bool DrawPath(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_GraphStateData *pGraphState, uint32_t fill_color, uint32_t stroke_color, const CFX_FillRenderOptions &fill_options)=0
virtual bool DrawCosmeticLine(const CFX_PointF &ptMoveTo, const CFX_PointF &ptLineTo, uint32_t color)
virtual void SaveState()=0
virtual void RestoreState(bool bKeepSaved)=0
virtual RetainPtr< const CFX_DIBitmap > GetBackDrop() const
virtual bool ContinueDIBits(CFX_AggImageRenderer *handle, PauseIndicatorIface *pPause)
virtual bool MultiplyAlpha(float alpha)=0
virtual bool MultiplyAlphaMask(RetainPtr< const CFX_DIBitmap > mask)=0
virtual DeviceType GetDeviceType() const =0
virtual bool FillRect(const FX_RECT &rect, uint32_t fill_color)
virtual FX_RECT GetClipBox() const =0
virtual bool SetClip_PathStroke(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_GraphStateData *pGraphState)
virtual bool SetDIBits(RetainPtr< const CFX_DIBBase > bitmap, uint32_t color, const FX_RECT &src_rect, int dest_left, int dest_top, BlendMode blend_type)=0
virtual StartResult StartDIBits(RetainPtr< const CFX_DIBBase > bitmap, float alpha, uint32_t color, const CFX_Matrix &matrix, const FXDIB_ResampleOptions &options, BlendMode blend_type)=0
virtual bool SetClip_PathFill(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_FillRenderOptions &fill_options)=0
virtual ~RenderDeviceDriverIface()
TEST_F(CPDFSecurityHandlerEmbedderTest, Unencrypted)
#define FPDF_FILLMODE_ALTERNATE
Definition fpdf_edit.h:52
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path, int fillmode, FPDF_BOOL stroke)
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetFillColor(FPDF_PAGEOBJECT page_object, unsigned int R, unsigned int G, unsigned int B, unsigned int A)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewRect(float x, float y, float w, float h)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page, int index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page)
FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_LoadCustomDocument(FPDF_FILEACCESS *pFileAccess, FPDF_BYTESTRING password)
CFX_PTemplate< float > CFX_PointF
BlendMode
Definition fx_dib.h:119
uint32_t FX_COLORREF
Definition fx_dib.h:42
FXDIB_Format
Definition fx_dib.h:21
const char * HelloWorldChecksum()
const char * HelloWorldRemovedChecksum()
StartResult(Result result, std::unique_ptr< CFX_AggImageRenderer > agg_image_renderer)
std::unique_ptr< CFX_AggImageRenderer > agg_image_renderer