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 <memory>
11
12#include "core/fxcrt/fx_memory_wrappers.h"
13#include "core/fxge/dib/fx_dib.h"
14#include "third_party/base/containers/span.h"
15
17 public:
20
21 bool Init(FXDIB_Format dest_format,
22 FXDIB_Format src_format,
23 pdfium::span<const uint32_t> src_palette,
24 uint32_t mask_color,
25 BlendMode blend_type,
26 bool bClip,
27 bool bRgbByteOrder);
28
29 void CompositeRgbBitmapLine(pdfium::span<uint8_t> dest_scan,
30 pdfium::span<const uint8_t> src_scan,
31 int width,
32 pdfium::span<const uint8_t> clip_scan) const;
33
34 void CompositePalBitmapLine(pdfium::span<uint8_t> dest_scan,
35 pdfium::span<const uint8_t> src_scan,
36 int src_left,
37 int width,
38 pdfium::span<const uint8_t> clip_scan) const;
39
40 void CompositeByteMaskLine(pdfium::span<uint8_t> dest_scan,
41 pdfium::span<const uint8_t> src_scan,
42 int width,
43 pdfium::span<const uint8_t> clip_scan) const;
44
45 void CompositeBitMaskLine(pdfium::span<uint8_t> dest_scan,
46 pdfium::span<const uint8_t> src_scan,
47 int src_left,
48 int width,
49 pdfium::span<const uint8_t> clip_scan) const;
50
51 private:
52 class Palette {
53 public:
54 Palette();
55 ~Palette();
56
57 void Reset();
58 pdfium::span<uint8_t> Make8BitPalette(size_t nElements);
59 pdfium::span<uint32_t> Make32BitPalette(size_t nElements);
60
61 // Hard CHECK() if mismatch between created and requested widths.
62 pdfium::span<const uint8_t> Get8BitPalette() const;
63 pdfium::span<const uint32_t> Get32BitPalette() const;
64
65 private:
66 // If 0, then no |m_pData|.
67 // If 1, then |m_pData| is really uint8_t* instead.
68 // If 4, then |m_pData| is uint32_t* as expected.
69 size_t m_Width = 0;
70 size_t m_nElements = 0;
71 std::unique_ptr<uint32_t, FxFreeDeleter> m_pData;
72 };
73
74 void InitSourcePalette(pdfium::span<const uint32_t> src_palette);
75
76 void InitSourceMask(uint32_t mask_color);
77
78 FXDIB_Format m_SrcFormat;
79 FXDIB_Format m_DestFormat;
80 Palette m_SrcPalette;
81 int m_MaskAlpha;
82 int m_MaskRed;
83 int m_MaskGreen;
84 int m_MaskBlue;
85 BlendMode m_BlendType = BlendMode::kNormal;
86 bool m_bRgbByteOrder = false;
87 bool m_bClip = false;
88};
89
90#endif // CORE_FXGE_DIB_CFX_SCANLINECOMPOSITOR_H_
~CFX_BitmapComposer() override
void Compose(const RetainPtr< CFX_DIBitmap > &pDest, const CFX_ClipRgn *pClipRgn, float alpha, uint32_t mask_color, const FX_RECT &dest_rect, bool bVertical, bool bFlipX, bool bFlipY, bool bRgbByteOrder, BlendMode blend_mode)
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
bool Create(int width, int height, FXDIB_Format format, RetainPtr< CFX_DIBitmap > pBackdropBitmap)
FX_RECT GetOuterRect() const
bool Continue(PauseIndicatorIface *pPause)
CFX_ImageRenderer(const RetainPtr< CFX_DIBitmap > &pDevice, const CFX_ClipRgn *pClipRgn, RetainPtr< const CFX_DIBBase > source, float alpha, uint32_t mask_color, const CFX_Matrix &matrix, const FXDIB_ResampleOptions &options, bool bRgbByteOrder)
CFX_Matrix & operator=(const CFX_Matrix &other)=default
void Translate(int32_t x, int32_t y)
CFX_FloatRect GetUnitRect() const
void Translate(float x, float y)
void Transform(const CFX_Matrix &matrix)
Definition cfx_path.cpp:392
void AppendRect(float left, float bottom, float right, float top)
Definition cfx_path.cpp:309
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
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 bClip, bool bRgbByteOrder)
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
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
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 Continue(PauseIndicatorIface *pPause)
bool Start(CPDF_ImageObject *pImageObject, const CFX_Matrix &mtObj2Device, bool bStdCS, BlendMode blendType)
CPDF_Document * GetDocument() const override
Definition cpdf_page.cpp:51
const Options & GetOptions() const
bool CheckOCGDictVisible(const CPDF_Dictionary *pOC) const
bool ColorModeIs(Type mode) const
void SetOptions(const CPDF_RenderOptions &options)
void SetStdCS(bool bStdCS)
void Initialize(const CPDF_RenderStatus *pParentStatus, const CPDF_GraphicStates *pInitialStates)
#define FXARGB_MUL_ALPHA(argb, alpha)
Definition fx_dib.h:128
BlendMode
Definition fx_dib.h:49
#define FXARGB_B(argb)
Definition fx_dib.h:127
#define FXARGB_G(argb)
Definition fx_dib.h:126
constexpr FX_ARGB ArgbEncode(uint32_t a, uint32_t r, uint32_t g, uint32_t b)
Definition fx_dib.h:118
#define FXARGB_R(argb)
Definition fx_dib.h:125
FXDIB_Format
Definition fx_dib.h:19
int FXSYS_roundf(float f)
Definition fx_system.cpp:92
#define FXRC_BLEND_MODE
bool bInterpolateBilinear
Definition fx_dib.h:41
int Height() const
int32_t bottom
int32_t right
int Width() const
int32_t top
int32_t left
bool IsEmpty() const