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