Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fdp / src / tto / fde_textout.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FDE_TEXTOUT_IMP\r
8 #define _FDE_TEXTOUT_IMP\r
9 struct FDE_TTOPIECE {\r
10 public:\r
11     FX_INT32    iStartChar;\r
12     FX_INT32    iChars;\r
13     FX_DWORD    dwCharStyles;\r
14     CFX_RectF   rtPiece;\r
15 };\r
16 typedef FDE_TTOPIECE * FDE_LPTTOPIECE;\r
17 typedef CFX_MassArrayTemplate<FDE_TTOPIECE> CFDE_TTOPieceArray;\r
18 class CFDE_TTOLine : public CFX_Target\r
19 {\r
20 public:\r
21     CFDE_TTOLine();\r
22     CFDE_TTOLine(const CFDE_TTOLine &ttoLine);\r
23     ~CFDE_TTOLine();\r
24     FX_INT32            AddPiece(FX_INT32 index, const FDE_TTOPIECE &ttoPiece);\r
25     FX_INT32            GetSize() const;\r
26     FDE_LPTTOPIECE      GetPtrAt(FX_INT32 index);\r
27     void                        RemoveLast(FX_INT32 iCount);\r
28     void                        RemoveAll(FX_BOOL bLeaveMemory);\r
29     FX_BOOL                     m_bNewReload;\r
30     CFDE_TTOPieceArray m_pieces;\r
31 protected:\r
32     FX_INT32            m_iPieceCount;\r
33 };\r
34 typedef CFX_ObjectMassArrayTemplate<CFDE_TTOLine> CFDE_TTOLineArray;\r
35 class CFDE_TextOut : public IFDE_TextOut, public CFX_Target\r
36 {\r
37 public:\r
38     CFDE_TextOut();\r
39     ~CFDE_TextOut();\r
40     virtual     void            Release()\r
41     {\r
42         FDE_Delete this;\r
43     }\r
44     virtual void                SetFont(IFX_Font *pFont);\r
45     virtual void                SetFontSize(FX_FLOAT fFontSize);\r
46     virtual void                SetTextColor(FX_ARGB color);\r
47     virtual void                SetStyles(FX_DWORD dwStyles);\r
48     virtual void                SetTabWidth(FX_FLOAT fTabWidth);\r
49     virtual void                SetEllipsisString(const CFX_WideString &wsEllipsis);\r
50     virtual void                SetParagraphBreakChar(FX_WCHAR wch);\r
51     virtual void                SetAlignment(FX_INT32 iAlignment);\r
52     virtual void                SetLineSpace(FX_FLOAT fLineSpace);\r
53     virtual void                SetDIBitmap(CFX_DIBitmap *pDIB);\r
54     virtual void                SetRenderDevice(CFX_RenderDevice *pDevice);\r
55     virtual void                SetClipRect(const CFX_Rect &rtClip);\r
56     virtual void                SetClipRect(const CFX_RectF &rtClip);\r
57     virtual void                SetMatrix(const CFX_Matrix &matrix);\r
58     virtual void                SetLineBreakTolerance(FX_FLOAT fTolerance);\r
59     virtual void                CalcSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_Size &size);\r
60     virtual void                CalcSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_SizeF &size);\r
61     virtual void                CalcSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_Rect &rect);\r
62     virtual void                CalcSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_RectF &rect);\r
63 \r
64     virtual void                DrawText(FX_LPCWSTR pwsStr, FX_INT32 iLength, FX_INT32 x, FX_INT32 y);\r
65     virtual void                DrawText(FX_LPCWSTR pwsStr, FX_INT32 iLength, FX_FLOAT x, FX_FLOAT y);\r
66     virtual void                DrawText(FX_LPCWSTR pwsStr, FX_INT32 iLength, const CFX_Rect &rect);\r
67     virtual void                DrawText(FX_LPCWSTR pwsStr, FX_INT32 iLength, const CFX_RectF &rect);\r
68 \r
69     virtual void                SetLogicClipRect(const CFX_RectF &rtClip);\r
70     virtual void                CalcLogicSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_SizeF &size);\r
71     virtual void                CalcLogicSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_RectF &rect);\r
72     virtual void                DrawLogicText(FX_LPCWSTR pwsStr, FX_INT32 iLength, FX_FLOAT x, FX_FLOAT y);\r
73     virtual void                DrawLogicText(FX_LPCWSTR pwsStr, FX_INT32 iLength, const CFX_RectF &rect);\r
74     virtual FX_INT32    GetTotalLines();\r
75 protected:\r
76     void                                CalcTextSize(FX_LPCWSTR pwsStr, FX_INT32 iLength, CFX_RectF &rect);\r
77     FX_BOOL                             RetrieveLineWidth(FX_DWORD dwBreakStatus, FX_FLOAT &fStartPos, FX_FLOAT &fWidth, FX_FLOAT &fHeight);\r
78     void                                SetLineWidth(CFX_RectF &rect);\r
79     void                                DrawText(FX_LPCWSTR pwsStr, FX_INT32 iLength, const CFX_RectF &rect, const CFX_RectF &rtClip);\r
80     void                                LoadText(FX_LPCWSTR pwsStr, FX_INT32 iLength, const CFX_RectF &rect);\r
81     void                                LoadEllipsis();\r
82     void                                ExpandBuffer(FX_INT32 iSize, FX_INT32 iType);\r
83     void                                RetrieveEllPieces(FX_INT32 *&pCharWidths);\r
84 \r
85     void                                Reload(const CFX_RectF &rect);\r
86     void                                ReloadLinePiece(CFDE_TTOLine *pLine, const CFX_RectF &rect);\r
87     FX_BOOL                             RetriecePieces(FX_DWORD dwBreakStatus, FX_INT32 &iStartChar, FX_INT32 &iPieceWidths, FX_BOOL bReload, const CFX_RectF &rect);\r
88     void                                AppendPiece(const FDE_TTOPIECE &ttoPiece, FX_BOOL bNeedReload, FX_BOOL bEnd);\r
89     void                                ReplaceWidthEllipsis();\r
90     void                                DoAlignment(const CFX_RectF &rect);\r
91     void                                OnDraw(const CFX_RectF &rtClip);\r
92     FX_INT32                    GetDisplayPos(FDE_LPTTOPIECE pPiece);\r
93     FX_INT32                    GetCharRects(FDE_LPTTOPIECE pPiece);\r
94 \r
95     void                                ToTextRun(const FDE_LPTTOPIECE pPiece, FX_TXTRUN &tr);\r
96     void                                DrawLine(const FDE_LPTTOPIECE pPiece, IFDE_Pen *&pPen);\r
97 \r
98     IFX_TxtBreak                *m_pTxtBreak;\r
99     IFX_Font                    *m_pFont;\r
100     FX_FLOAT                    m_fFontSize;\r
101     FX_FLOAT                    m_fLineSpace;\r
102     FX_FLOAT                    m_fLinePos;\r
103     FX_FLOAT                    m_fTolerance;\r
104 \r
105     FX_INT32                    m_iAlignment;\r
106     FX_INT32                    m_iTxtBkAlignment;\r
107     FX_INT32                    *m_pCharWidths;\r
108     FX_INT32                    m_iChars;\r
109     FX_INT32                    *m_pEllCharWidths;\r
110     FX_INT32                    m_iEllChars;\r
111     FX_WCHAR                    m_wParagraphBkChar;\r
112     FX_ARGB                             m_TxtColor;\r
113     FX_DWORD                    m_dwStyles;\r
114     FX_DWORD                    m_dwTxtBkStyles;\r
115     CFX_WideString              m_wsEllipsis;\r
116     FX_BOOL                             m_bElliChanged;\r
117     FX_INT32                    m_iEllipsisWidth;\r
118     CFX_WideString              m_wsText;\r
119     CFX_RectF                   m_rtClip;\r
120     CFX_RectF                   m_rtLogicClip;\r
121     CFX_Matrix                  m_Matrix;\r
122     CFDE_TTOLineArray   m_ttoLines;\r
123     FX_INT32                    m_iCurLine;\r
124     FX_INT32                    m_iCurPiece;\r
125     FX_INT32                    m_iTotalLines;\r
126     FXTEXT_CHARPOS              *m_pCharPos;\r
127     FX_INT32                    m_iCharPosSize;\r
128     IFDE_RenderDevice   *m_pRenderDevice;\r
129     CFX_Int32Array              m_hotKeys;\r
130     CFX_RectFArray              m_rectArray;\r
131 };\r
132 #endif\r