Don't bother checking pointers before delete[] and FX_Free().
[pdfium.git] / core / src / fxge / dib / dib_int.h
1 // Copyright 2014 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_SRC_FXGE_DIB_DIB_INT_H_
8 #define CORE_SRC_FXGE_DIB_DIB_INT_H_
9
10 class CPDF_FixedMatrix {
11  public:
12   CPDF_FixedMatrix(const CFX_AffineMatrix& src, int bits) {
13     base = 1 << bits;
14     a = FXSYS_round(src.a * base);
15     b = FXSYS_round(src.b * base);
16     c = FXSYS_round(src.c * base);
17     d = FXSYS_round(src.d * base);
18     e = FXSYS_round(src.e * base);
19     f = FXSYS_round(src.f * base);
20   }
21   inline void Transform(int x, int y, int& x1, int& y1) {
22     x1 = (a * x + c * y + e + base / 2) / base;
23     y1 = (b * x + d * y + f + base / 2) / base;
24   }
25   int a, b, c, d, e, f;
26   int base;
27 };
28 #define FPDF_HUGE_IMAGE_SIZE 60000000
29 struct PixelWeight {
30   int m_SrcStart;
31   int m_SrcEnd;
32   int m_Weights[1];
33 };
34 class CWeightTable {
35  public:
36   CWeightTable() { m_pWeightTables = NULL; }
37   ~CWeightTable() {
38     FX_Free(m_pWeightTables);
39     m_pWeightTables = NULL;
40   }
41   void Calc(int dest_len,
42             int dest_min,
43             int dest_max,
44             int src_len,
45             int src_min,
46             int src_max,
47             int flags);
48   PixelWeight* GetPixelWeight(int pixel) {
49     return (PixelWeight*)(m_pWeightTables + (pixel - m_DestMin) * m_ItemSize);
50   }
51   int m_DestMin, m_ItemSize;
52   uint8_t* m_pWeightTables;
53 };
54 class CStretchEngine {
55  public:
56   CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
57                  FXDIB_Format dest_format,
58                  int dest_width,
59                  int dest_height,
60                  const FX_RECT& clip_rect,
61                  const CFX_DIBSource* pSrcBitmap,
62                  int flags);
63   ~CStretchEngine();
64   FX_BOOL Continue(IFX_Pause* pPause);
65
66  public:
67   FXDIB_Format m_DestFormat;
68   int m_DestBpp, m_SrcBpp, m_bHasAlpha;
69   IFX_ScanlineComposer* m_pDestBitmap;
70   int m_DestWidth, m_DestHeight;
71   FX_RECT m_DestClip;
72   uint8_t* m_pDestScanline;
73   uint8_t* m_pDestMaskScanline;
74   FX_RECT m_SrcClip;
75   const CFX_DIBSource* m_pSource;
76   FX_DWORD* m_pSrcPalette;
77   int m_SrcWidth, m_SrcHeight;
78   int m_SrcPitch, m_InterPitch;
79   int m_ExtraMaskPitch;
80   unsigned char* m_pInterBuf;
81   unsigned char* m_pExtraAlphaBuf;
82   int m_TransMethod;
83   int m_Flags;
84   CWeightTable m_WeightTable;
85   int m_CurRow;
86   FX_BOOL StartStretchHorz();
87   FX_BOOL ContinueStretchHorz(IFX_Pause* pPause);
88   void StretchVert();
89   int m_State;
90 };
91
92 #endif  // CORE_SRC_FXGE_DIB_DIB_INT_H_