// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef _FDE_TEXTOUT_IMP | |
#define _FDE_TEXTOUT_IMP | |
struct FDE_TTOPIECE { | |
public: | |
int32_t iStartChar; | |
int32_t iChars; | |
FX_DWORD dwCharStyles; | |
CFX_RectF rtPiece; | |
}; | |
typedef FDE_TTOPIECE* FDE_LPTTOPIECE; | |
typedef CFX_MassArrayTemplate<FDE_TTOPIECE> CFDE_TTOPieceArray; | |
class CFDE_TTOLine : public CFX_Target { | |
public: | |
CFDE_TTOLine(); | |
CFDE_TTOLine(const CFDE_TTOLine& ttoLine); | |
~CFDE_TTOLine(); | |
int32_t AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece); | |
int32_t GetSize() const; | |
FDE_LPTTOPIECE GetPtrAt(int32_t index); | |
void RemoveLast(int32_t iCount); | |
void RemoveAll(FX_BOOL bLeaveMemory); | |
FX_BOOL m_bNewReload; | |
CFDE_TTOPieceArray m_pieces; | |
protected: | |
int32_t m_iPieceCount; | |
}; | |
typedef CFX_ObjectMassArrayTemplate<CFDE_TTOLine> CFDE_TTOLineArray; | |
class CFDE_TextOut : public IFDE_TextOut, public CFX_Target { | |
public: | |
CFDE_TextOut(); | |
~CFDE_TextOut(); | |
virtual void Release() { delete this; } | |
virtual void SetFont(IFX_Font* pFont); | |
virtual void SetFontSize(FX_FLOAT fFontSize); | |
virtual void SetTextColor(FX_ARGB color); | |
virtual void SetStyles(FX_DWORD dwStyles); | |
virtual void SetTabWidth(FX_FLOAT fTabWidth); | |
virtual void SetEllipsisString(const CFX_WideString& wsEllipsis); | |
virtual void SetParagraphBreakChar(FX_WCHAR wch); | |
virtual void SetAlignment(int32_t iAlignment); | |
virtual void SetLineSpace(FX_FLOAT fLineSpace); | |
virtual void SetDIBitmap(CFX_DIBitmap* pDIB); | |
virtual void SetRenderDevice(CFX_RenderDevice* pDevice); | |
virtual void SetClipRect(const CFX_Rect& rtClip); | |
virtual void SetClipRect(const CFX_RectF& rtClip); | |
virtual void SetMatrix(const CFX_Matrix& matrix); | |
virtual void SetLineBreakTolerance(FX_FLOAT fTolerance); | |
virtual void CalcSize(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
CFX_Size& size); | |
virtual void CalcSize(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
CFX_SizeF& size); | |
virtual void CalcSize(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
CFX_Rect& rect); | |
virtual void CalcSize(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
CFX_RectF& rect); | |
virtual void DrawText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
int32_t x, | |
int32_t y); | |
virtual void DrawText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
FX_FLOAT x, | |
FX_FLOAT y); | |
virtual void DrawText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
const CFX_Rect& rect); | |
virtual void DrawText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
const CFX_RectF& rect); | |
virtual void SetLogicClipRect(const CFX_RectF& rtClip); | |
virtual void CalcLogicSize(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
CFX_SizeF& size); | |
virtual void CalcLogicSize(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
CFX_RectF& rect); | |
virtual void DrawLogicText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
FX_FLOAT x, | |
FX_FLOAT y); | |
virtual void DrawLogicText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
const CFX_RectF& rect); | |
virtual int32_t GetTotalLines(); | |
protected: | |
void CalcTextSize(const FX_WCHAR* pwsStr, int32_t iLength, CFX_RectF& rect); | |
FX_BOOL RetrieveLineWidth(FX_DWORD dwBreakStatus, | |
FX_FLOAT& fStartPos, | |
FX_FLOAT& fWidth, | |
FX_FLOAT& fHeight); | |
void SetLineWidth(CFX_RectF& rect); | |
void DrawText(const FX_WCHAR* pwsStr, | |
int32_t iLength, | |
const CFX_RectF& rect, | |
const CFX_RectF& rtClip); | |
void LoadText(const FX_WCHAR* pwsStr, int32_t iLength, const CFX_RectF& rect); | |
void LoadEllipsis(); | |
void ExpandBuffer(int32_t iSize, int32_t iType); | |
void RetrieveEllPieces(int32_t*& pCharWidths); | |
void Reload(const CFX_RectF& rect); | |
void ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect); | |
FX_BOOL RetriecePieces(FX_DWORD dwBreakStatus, | |
int32_t& iStartChar, | |
int32_t& iPieceWidths, | |
FX_BOOL bReload, | |
const CFX_RectF& rect); | |
void AppendPiece(const FDE_TTOPIECE& ttoPiece, | |
FX_BOOL bNeedReload, | |
FX_BOOL bEnd); | |
void ReplaceWidthEllipsis(); | |
void DoAlignment(const CFX_RectF& rect); | |
void OnDraw(const CFX_RectF& rtClip); | |
int32_t GetDisplayPos(FDE_LPTTOPIECE pPiece); | |
int32_t GetCharRects(FDE_LPTTOPIECE pPiece); | |
void ToTextRun(const FDE_LPTTOPIECE pPiece, FX_TXTRUN& tr); | |
void DrawLine(const FDE_LPTTOPIECE pPiece, IFDE_Pen*& pPen); | |
IFX_TxtBreak* m_pTxtBreak; | |
IFX_Font* m_pFont; | |
FX_FLOAT m_fFontSize; | |
FX_FLOAT m_fLineSpace; | |
FX_FLOAT m_fLinePos; | |
FX_FLOAT m_fTolerance; | |
int32_t m_iAlignment; | |
int32_t m_iTxtBkAlignment; | |
int32_t* m_pCharWidths; | |
int32_t m_iChars; | |
int32_t* m_pEllCharWidths; | |
int32_t m_iEllChars; | |
FX_WCHAR m_wParagraphBkChar; | |
FX_ARGB m_TxtColor; | |
FX_DWORD m_dwStyles; | |
FX_DWORD m_dwTxtBkStyles; | |
CFX_WideString m_wsEllipsis; | |
FX_BOOL m_bElliChanged; | |
int32_t m_iEllipsisWidth; | |
CFX_WideString m_wsText; | |
CFX_RectF m_rtClip; | |
CFX_RectF m_rtLogicClip; | |
CFX_Matrix m_Matrix; | |
CFDE_TTOLineArray m_ttoLines; | |
int32_t m_iCurLine; | |
int32_t m_iCurPiece; | |
int32_t m_iTotalLines; | |
FXTEXT_CHARPOS* m_pCharPos; | |
int32_t m_iCharPosSize; | |
IFDE_RenderDevice* m_pRenderDevice; | |
CFX_Int32Array m_hotKeys; | |
CFX_RectFArray m_rectArray; | |
}; | |
#endif |