• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_BITMAPCOMPOSER_H_
8 #define CORE_FXGE_DIB_CFX_BITMAPCOMPOSER_H_
9 
10 #include <stdint.h>
11 
12 #include "core/fxcrt/data_vector.h"
13 #include "core/fxcrt/retain_ptr.h"
14 #include "core/fxcrt/unowned_ptr.h"
15 #include "core/fxge/dib/cfx_scanlinecompositor.h"
16 #include "core/fxge/dib/fx_dib.h"
17 #include "core/fxge/dib/scanlinecomposer_iface.h"
18 
19 class CFX_ClipRgn;
20 class CFX_DIBitmap;
21 struct FX_RECT;
22 
23 class CFX_BitmapComposer final : public ScanlineComposerIface {
24  public:
25   CFX_BitmapComposer();
26   ~CFX_BitmapComposer() override;
27 
28   void Compose(const RetainPtr<CFX_DIBitmap>& pDest,
29                const CFX_ClipRgn* pClipRgn,
30                int bitmap_alpha,
31                uint32_t mask_color,
32                const FX_RECT& dest_rect,
33                bool bVertical,
34                bool bFlipX,
35                bool bFlipY,
36                bool bRgbByteOrder,
37                BlendMode blend_mode);
38 
39   // ScanlineComposerIface:
40   bool SetInfo(int width,
41                int height,
42                FXDIB_Format src_format,
43                pdfium::span<const uint32_t> src_palette) override;
44   void ComposeScanline(int line, pdfium::span<const uint8_t> scanline) override;
45 
46  private:
47   void DoCompose(pdfium::span<uint8_t> dest_scan,
48                  pdfium::span<const uint8_t> src_scan,
49                  int dest_width,
50                  pdfium::span<const uint8_t> clip_scan);
51   void ComposeScanlineV(int line, pdfium::span<const uint8_t> scanline);
52 
53   RetainPtr<CFX_DIBitmap> m_pBitmap;
54   UnownedPtr<const CFX_ClipRgn> m_pClipRgn;
55   FXDIB_Format m_SrcFormat;
56   int m_DestLeft;
57   int m_DestTop;
58   int m_DestWidth;
59   int m_DestHeight;
60   int m_BitmapAlpha;
61   uint32_t m_MaskColor;
62   RetainPtr<CFX_DIBitmap> m_pClipMask;
63   CFX_ScanlineCompositor m_Compositor;
64   bool m_bVertical;
65   bool m_bFlipX;
66   bool m_bFlipY;
67   bool m_bRgbByteOrder = false;
68   BlendMode m_BlendMode = BlendMode::kNormal;
69   DataVector<uint8_t> m_pScanlineV;
70   DataVector<uint8_t> m_pClipScanV;
71   DataVector<uint8_t> m_pAddClipScan;
72 };
73 
74 #endif  // CORE_FXGE_DIB_CFX_BITMAPCOMPOSER_H_
75