• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 PDFium Authors. All rights reserved.
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_CSTRETCHENGINE_H_
8 #define CORE_FXGE_DIB_CSTRETCHENGINE_H_
9 
10 #include <vector>
11 
12 #include "core/fxcrt/fx_coordinates.h"
13 #include "core/fxcrt/retain_ptr.h"
14 #include "core/fxcrt/unowned_ptr.h"
15 #include "core/fxge/fx_dib.h"
16 
17 class IFX_PauseIndicator;
18 class IFX_ScanlineComposer;
19 
20 class CStretchEngine {
21  public:
22   CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
23                  FXDIB_Format dest_format,
24                  int dest_width,
25                  int dest_height,
26                  const FX_RECT& clip_rect,
27                  const RetainPtr<CFX_DIBSource>& pSrcBitmap,
28                  int flags);
29   ~CStretchEngine();
30 
31   bool Continue(IFX_PauseIndicator* pPause);
32 
33   bool StartStretchHorz();
34   bool ContinueStretchHorz(IFX_PauseIndicator* pPause);
35   void StretchVert();
36 
37   class CWeightTable {
38    public:
39     CWeightTable();
40     ~CWeightTable();
41 
42     bool Calc(int dest_len,
43               int dest_min,
44               int dest_max,
45               int src_len,
46               int src_min,
47               int src_max,
48               int flags);
49     PixelWeight* GetPixelWeight(int pixel) const;
50     int* GetValueFromPixelWeight(PixelWeight* pWeight, int index) const;
51     size_t GetPixelWeightSize() const;
52 
53    private:
54     int m_DestMin;
55     int m_ItemSize;
56     std::vector<uint8_t> m_WeightTables;
57     size_t m_dwWeightTablesSize;
58   };
59 
60   FXDIB_Format m_DestFormat;
61   int m_DestBpp;
62   int m_SrcBpp;
63   int m_bHasAlpha;
64   UnownedPtr<IFX_ScanlineComposer> m_pDestBitmap;
65   int m_DestWidth;
66   int m_DestHeight;
67   FX_RECT m_DestClip;
68   std::vector<uint8_t> m_DestScanline;
69   std::vector<uint8_t> m_DestMaskScanline;
70   FX_RECT m_SrcClip;
71   RetainPtr<CFX_DIBSource> m_pSource;
72   uint32_t* m_pSrcPalette;
73   int m_SrcWidth;
74   int m_SrcHeight;
75   int m_SrcPitch;
76   int m_InterPitch;
77   int m_ExtraMaskPitch;
78   std::vector<uint8_t> m_InterBuf;
79   std::vector<uint8_t> m_ExtraAlphaBuf;
80   int m_TransMethod;
81   int m_Flags;
82   CWeightTable m_WeightTable;
83   int m_CurRow;
84   int m_State;
85 };
86 
87 #endif  // CORE_FXGE_DIB_CSTRETCHENGINE_H_
88