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