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
cfx_scanlinecompositor.h
Go to the documentation of this file.
1// Copyright 2017 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_DIB_CFX_SCANLINECOMPOSITOR_H_
8#define CORE_FXGE_DIB_CFX_SCANLINECOMPOSITOR_H_
9
10#include <stddef.h>
11#include <stdint.h>
12
13#include <memory>
14
15#include "core/fxcrt/fx_memory_wrappers.h"
16#include "core/fxcrt/span.h"
17#include "core/fxge/dib/fx_dib.h"
18
20 public:
23
24 bool Init(FXDIB_Format dest_format,
25 FXDIB_Format src_format,
26 pdfium::span<const uint32_t> src_palette,
27 uint32_t mask_color,
28 BlendMode blend_type,
29 bool bRgbByteOrder);
30
31 void CompositeRgbBitmapLine(pdfium::span<uint8_t> dest_scan,
32 pdfium::span<const uint8_t> src_scan,
33 int width,
34 pdfium::span<const uint8_t> clip_scan) const;
35
36 void CompositePalBitmapLine(pdfium::span<uint8_t> dest_scan,
37 pdfium::span<const uint8_t> src_scan,
38 int src_left,
39 int width,
40 pdfium::span<const uint8_t> clip_scan) const;
41
42 void CompositeByteMaskLine(pdfium::span<uint8_t> dest_scan,
43 pdfium::span<const uint8_t> src_scan,
44 int width,
45 pdfium::span<const uint8_t> clip_scan) const;
46
47 void CompositeBitMaskLine(pdfium::span<uint8_t> dest_scan,
48 pdfium::span<const uint8_t> src_scan,
49 int src_left,
50 int width,
51 pdfium::span<const uint8_t> clip_scan) const;
52
53 private:
54 class Palette {
55 public:
56 Palette();
57 ~Palette();
58
59 void Reset();
60 pdfium::span<uint8_t> Make8BitPalette(size_t nElements);
61 pdfium::span<uint32_t> Make32BitPalette(size_t nElements);
62
63 // Hard CHECK() if mismatch between created and requested widths.
64 pdfium::span<const uint8_t> Get8BitPalette() const;
65 pdfium::span<const uint32_t> Get32BitPalette() const;
66
67 private:
68 // If 0, then no |m_pData|.
69 // If 1, then |m_pData| is really uint8_t* instead.
70 // If 4, then |m_pData| is uint32_t* as expected.
71 size_t m_Width = 0;
72 size_t m_nElements = 0;
73
74 // TODO(tsepez): convert to variant of FixedArray.
75 std::unique_ptr<uint32_t, FxFreeDeleter> m_pData;
76 };
77
78 void InitSourcePalette(pdfium::span<const uint32_t> src_palette);
79
80 void InitSourceMask(uint32_t mask_color);
81
82 void CompositeRgbBitmapLineSrcBgrx(
83 pdfium::span<uint8_t> dest_scan,
84 pdfium::span<const uint8_t> src_scan,
85 int width,
86 pdfium::span<const uint8_t> clip_scan) const;
87 void CompositeRgbBitmapLineSrcBgra(
88 pdfium::span<uint8_t> dest_scan,
89 pdfium::span<const uint8_t> src_scan,
90 int width,
91 pdfium::span<const uint8_t> clip_scan) const;
92#if defined(PDF_USE_SKIA)
95 int width) const;
96#endif
97
98 void CompositePalBitmapLineSrcBpp1(
99 pdfium::span<uint8_t> dest_scan,
100 pdfium::span<const uint8_t> src_scan,
101 int src_left,
102 int width,
103 pdfium::span<const uint8_t> clip_scan) const;
104 void CompositePalBitmapLineSrcBpp8(
105 pdfium::span<uint8_t> dest_scan,
106 pdfium::span<const uint8_t> src_scan,
107 int src_left,
108 int width,
109 pdfium::span<const uint8_t> clip_scan) const;
110
111 FXDIB_Format m_SrcFormat;
112 FXDIB_Format m_DestFormat;
113 Palette m_SrcPalette;
114 int m_MaskAlpha;
115 int m_MaskRed;
116 int m_MaskGreen;
117 int m_MaskBlue;
118 BlendMode m_BlendType = BlendMode::kNormal;
119 bool m_bRgbByteOrder = false;
120};
121
122#endif // CORE_FXGE_DIB_CFX_SCANLINECOMPOSITOR_H_
#define DCHECK
Definition check.h:33
#define CHECK_EQ(x, y)
Definition check_op.h:10
void ComposeScanline(int line, pdfium::span< const uint8_t > scanline) override
bool SetInfo(int width, int height, FXDIB_Format src_format, DataVector< uint32_t > src_palette) override
~CFX_AggBitmapComposer() override
void Compose(const RetainPtr< CFX_DIBitmap > &pDest, const CFX_AggClipRgn *pClipRgn, float alpha, uint32_t mask_color, const FX_RECT &dest_rect, bool bVertical, bool bFlipX, bool bFlipY, bool bRgbByteOrder, BlendMode blend_mode)
bool Continue(PauseIndicatorIface *pPause)
CFX_AggImageRenderer(const RetainPtr< CFX_DIBitmap > &pDevice, const CFX_AggClipRgn *pClipRgn, RetainPtr< const CFX_DIBBase > source, float alpha, uint32_t mask_color, const CFX_Matrix &matrix, const FXDIB_ResampleOptions &options, bool bRgbByteOrder)
bool Attach(RetainPtr< CFX_DIBitmap > pBitmap)
bool Create(int width, int height, FXDIB_Format format)
FX_RECT GetOuterRect() const
CFX_Matrix & operator=(const CFX_Matrix &other)=default
void Translate(int32_t x, int32_t y)
CFX_FloatRect GetUnitRect() const
void Transform(const CFX_Matrix &matrix)
Definition cfx_path.cpp:393
void AppendRect(float left, float bottom, float right, float top)
Definition cfx_path.cpp:310
void CompositeByteMaskLine(pdfium::span< uint8_t > dest_scan, pdfium::span< const uint8_t > src_scan, int width, pdfium::span< const uint8_t > clip_scan) const
void CompositePalBitmapLine(pdfium::span< uint8_t > dest_scan, pdfium::span< const uint8_t > src_scan, int src_left, int width, pdfium::span< const uint8_t > clip_scan) const
void CompositeRgbBitmapLine(pdfium::span< uint8_t > dest_scan, pdfium::span< const uint8_t > src_scan, int width, pdfium::span< const uint8_t > clip_scan) const
bool Init(FXDIB_Format dest_format, FXDIB_Format src_format, pdfium::span< const uint32_t > src_palette, uint32_t mask_color, BlendMode blend_type, bool bRgbByteOrder)
void CompositeBitMaskLine(pdfium::span< uint8_t > dest_scan, pdfium::span< const uint8_t > src_scan, int src_left, int width, pdfium::span< const uint8_t > clip_scan) const
bool IsPattern() const
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
static CPDF_DocPageData * FromDocument(const CPDF_Document *pDoc)
float GetStrokeAlpha() const
BlendMode GetBlendType() const
CPDF_ImageRenderer(CPDF_RenderStatus *pStatus)
bool Start(RetainPtr< CFX_DIBBase > pDIBBase, FX_ARGB bitmap_argb, const CFX_Matrix &mtImage2Device, const FXDIB_ResampleOptions &options, bool bStdCS)
bool Start(CPDF_ImageObject *pImageObject, const CFX_Matrix &mtObj2Device, bool bStdCS)
bool Continue(PauseIndicatorIface *pPause)
CPDF_Document * GetDocument() const override
Definition cpdf_page.cpp:51
const CFX_Matrix & GetMatrix() const
Layer(const Layer &that)
CPDF_PageObjectHolder * GetObjectHolder()
Layer(CPDF_PageObjectHolder *pHolder, const CFX_Matrix &matrix)
void AppendLayer(CPDF_PageObjectHolder *pObjectHolder, const CFX_Matrix &mtObject2Device)
CPDF_PageImageCache * GetPageCache() const
const CPDF_Dictionary * GetPageResources() const
CPDF_RenderContext(CPDF_Document *pDoc, RetainPtr< CPDF_Dictionary > pPageResources, CPDF_PageImageCache *pPageCache)
void GetBackgroundToDevice(CFX_RenderDevice *device, const CPDF_PageObject *object, const CPDF_RenderOptions *options, const CFX_Matrix &matrix)
CPDF_Document * GetDocument() const
Layer * GetLayer(uint32_t index)
RetainPtr< CPDF_Dictionary > GetMutablePageResources()
size_t CountLayers() const
void Render(CFX_RenderDevice *pDevice, const CPDF_PageObject *pStopObj, const CPDF_RenderOptions *pOptions, const CFX_Matrix *pLastMatrix)
const Options & GetOptions() const
bool CheckOCGDictVisible(const CPDF_Dictionary *pOC) const
bool ColorModeIs(Type mode) const
bool GetLoadMask() const
void SetDropObjects(bool bDropObjects)
const CPDF_RenderOptions & GetRenderOptions() const
void SetType3Char(CPDF_Type3Char *pType3Char)
RetainPtr< CPDF_TransferFunc > GetTransferFunc(RetainPtr< const CPDF_Object > pObject) const
void SetDeviceMatrix(const CFX_Matrix &matrix)
CPDF_RenderStatus(CPDF_RenderContext *pContext, CFX_RenderDevice *pDevice)
void SetFillColor(FX_ARGB color)
CPDF_RenderContext * GetContext() const
void SetOptions(const CPDF_RenderOptions &options)
void RenderSingleObject(CPDF_PageObject *pObj, const CFX_Matrix &mtObj2Device)
const CPDF_Dictionary * GetPageResource() const
bool ContinueSingleObject(CPDF_PageObject *pObj, const CFX_Matrix &mtObj2Device, PauseIndicatorIface *pPause)
CPDF_ColorSpace::Family GetGroupFamily() const
void SetTransparency(const CPDF_Transparency &transparency)
void RenderObjectList(const CPDF_PageObjectHolder *pObjectHolder, const CFX_Matrix &mtObj2Device)
void SetStdCS(bool bStdCS)
FX_ARGB GetFillArgbForType3(CPDF_PageObject *pObj) const
CFX_RenderDevice * GetRenderDevice() const
void SetGroupFamily(CPDF_ColorSpace::Family family)
void DrawShadingPattern(CPDF_ShadingPattern *pattern, const CPDF_PageObject *pPageObj, const CFX_Matrix &mtObj2Device, bool stroke)
void Initialize(const CPDF_RenderStatus *pParentStatus, const CPDF_GraphicStates *pInitialStates)
void DrawTilingPattern(CPDF_TilingPattern *pattern, CPDF_PageObject *pPageObj, const CFX_Matrix &mtObj2Device, bool stroke)
void SetInGroup(bool bInGroup)
static std::unique_ptr< CPDF_GraphicStates > CloneObjStates(const CPDF_GraphicStates *pSrcStates, bool stroke)
void SetFormResource(RetainPtr< const CPDF_Dictionary > pRes)
FX_ARGB GetFillArgb(CPDF_PageObject *pObj) const
void CompositeDIBitmap(RetainPtr< CFX_DIBitmap > bitmap, int left, int top, FX_ARGB mask_argb, float alpha, BlendMode blend_mode, const CPDF_Transparency &transparency)
void SetLoadMask(bool bLoadMask)
bool GetDropObjects() const
const CPDF_Dictionary * GetFormResource() const
void SetStopObject(const CPDF_PageObject *pStopObj)
void ProcessClipPath(const CPDF_ClipPath &ClipPath, const CFX_Matrix &mtObj2Device)
CPDF_Transparency & operator=(const CPDF_Transparency &other)
uint32_t FX_ARGB
Definition fx_dib.h:36
BlendMode
Definition fx_dib.h:119
@ kNormal
Definition fx_dib.h:120
@ kDarken
Definition fx_dib.h:124
#define FXARGB_B(argb)
Definition fx_dib.h:199
#define FXARGB_G(argb)
Definition fx_dib.h:198
constexpr FX_ARGB ArgbEncode(uint32_t a, uint32_t r, uint32_t g, uint32_t b)
Definition fx_dib.h:188
#define FXARGB_R(argb)
Definition fx_dib.h:197
FXDIB_Format
Definition fx_dib.h:21
pdfium::CheckedNumeric< int32_t > FX_SAFE_INT32
int FXSYS_roundf(float f)
#define CHECK(cvref)
int Height() const
int32_t bottom
bool Valid() const
int32_t right
int Width() const
int32_t top
int32_t left
bool IsEmpty() const