1e6d82ea86065722077c8a4d16f005e8fd4cbf47
[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 class CPDF_FixedMatrix : public CFX_Object
8 {
9 public:
10     CPDF_FixedMatrix(const CFX_AffineMatrix& src, int bits)
11     {
12         base = 1 << bits;
13         a = FXSYS_round(src.a * base);
14         b = FXSYS_round(src.b * base);
15         c = FXSYS_round(src.c * base);
16         d = FXSYS_round(src.d * base);
17         e = FXSYS_round(src.e * base);
18         f = FXSYS_round(src.f * base);
19     }
20     inline void Transform(int x, int y, int& x1, int& y1)
21     {
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 : public CFX_Object
35 {
36 public:
37     CWeightTable()
38     {
39         m_pWeightTables = NULL;
40     }
41     ~CWeightTable()
42     {
43         if(m_pWeightTables) {
44             FX_Free(m_pWeightTables);
45         }
46         m_pWeightTables = NULL;
47     }
48     void                        Calc(int dest_len, int dest_min, int dest_max, int src_len, int src_min, int src_max, int flags);
49     PixelWeight*        GetPixelWeight(int pixel)
50     {
51         return (PixelWeight*)(m_pWeightTables + (pixel - m_DestMin) * m_ItemSize);
52     }
53     int                         m_DestMin, m_ItemSize;
54     FX_LPBYTE           m_pWeightTables;
55 };
56 class CStretchEngine : public CFX_Object
57 {
58 public:
59     CStretchEngine(IFX_ScanlineComposer* pDestBitmap, FXDIB_Format dest_format,
60                    int dest_width, int dest_height, const FX_RECT& clip_rect,
61                    const CFX_DIBSource* pSrcBitmap, int flags);
62     ~CStretchEngine();
63     FX_BOOL             Continue(IFX_Pause* pPause);
64 public:
65     FXDIB_Format m_DestFormat;
66     int         m_DestBpp, m_SrcBpp, m_bHasAlpha;
67     IFX_ScanlineComposer*       m_pDestBitmap;
68     int         m_DestWidth, m_DestHeight;
69     FX_RECT     m_DestClip;
70     FX_LPBYTE   m_pDestScanline;
71     FX_LPBYTE   m_pDestMaskScanline;
72     FX_RECT     m_SrcClip;
73     const CFX_DIBSource*        m_pSource;
74     FX_DWORD*   m_pSrcPalette;
75     int         m_SrcWidth, m_SrcHeight;
76     int         m_SrcPitch, m_InterPitch;
77     int m_ExtraMaskPitch;
78     unsigned char*      m_pInterBuf;
79     unsigned char*      m_pExtraAlphaBuf;
80     int         m_TransMethod;
81     int         m_Flags;
82     CWeightTable        m_WeightTable;
83     int         m_CurRow;
84     FX_BOOL     StartStretchHorz();
85     FX_BOOL     ContinueStretchHorz(IFX_Pause* pPause);
86     void        StretchVert();
87     int         m_State;
88 };