diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-03-30 14:10:32 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-03-30 18:37:58 +0000 |
commit | bccf573b72c76597f6b1f1e99e8db4e1cc759843 (patch) | |
tree | 89a1cf0d0acf6f37581abd691908a10129480dcc /xfa/fde/cfde_textout.h | |
parent | ddb7016e69d99bb9355420b49a0ee864e2b7fe15 (diff) | |
download | pdfium-bccf573b72c76597f6b1f1e99e8db4e1cc759843.tar.xz |
Rename tto/fde_textout to cfde_textout
This CL renames the textout file to cfde_textout to match the classname
and moves up one directory to xfa/fde.
Change-Id: I0b405961b8406818a2eb3cbb30f87620afa6ab7a
Reviewed-on: https://pdfium-review.googlesource.com/3373
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'xfa/fde/cfde_textout.h')
-rw-r--r-- | xfa/fde/cfde_textout.h | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/xfa/fde/cfde_textout.h b/xfa/fde/cfde_textout.h new file mode 100644 index 0000000000..c505c0737f --- /dev/null +++ b/xfa/fde/cfde_textout.h @@ -0,0 +1,175 @@ +// 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 XFA_FDE_CFDE_TEXTOUT_H_ +#define XFA_FDE_CFDE_TEXTOUT_H_ + +#include <deque> +#include <memory> +#include <vector> + +#include "core/fxcrt/cfx_char.h" +#include "core/fxge/cfx_fxgedevice.h" +#include "core/fxge/cfx_renderdevice.h" +#include "core/fxge/fx_dib.h" +#include "xfa/fgas/font/cfgas_fontmgr.h" + +#define FDE_TTOSTYLE_Underline 0x0001 +#define FDE_TTOSTYLE_Strikeout 0x0002 +#define FDE_TTOSTYLE_SingleLine 0x0010 +#define FDE_TTOSTYLE_HotKey 0x0040 +#define FDE_TTOSTYLE_Ellipsis 0x0080 +#define FDE_TTOSTYLE_LineWrap 0x0100 +#define FDE_TTOSTYLE_LastLineHeight 0x1000 +#define FDE_TTOALIGNMENT_TopLeft 0 +#define FDE_TTOALIGNMENT_TopCenter 1 +#define FDE_TTOALIGNMENT_TopRight 2 +#define FDE_TTOALIGNMENT_TopAuto 3 +#define FDE_TTOALIGNMENT_CenterLeft 4 +#define FDE_TTOALIGNMENT_Center 5 +#define FDE_TTOALIGNMENT_CenterRight 6 +#define FDE_TTOALIGNMENT_CenterAuto 7 +#define FDE_TTOALIGNMENT_BottomLeft 8 +#define FDE_TTOALIGNMENT_BottomCenter 9 +#define FDE_TTOALIGNMENT_BottomRight 10 +#define FDE_TTOALIGNMENT_BottomAuto 11 + +class CFDE_Pen; +class CFDE_RenderDevice; +class CFX_RenderDevice; +class CFX_TxtBreak; +struct FX_TXTRUN; + +struct FDE_TTOPIECE { + FDE_TTOPIECE(); + FDE_TTOPIECE(const FDE_TTOPIECE& that); + ~FDE_TTOPIECE(); + + int32_t iStartChar; + int32_t iChars; + uint32_t dwCharStyles; + CFX_RectF rtPiece; +}; + +class CFDE_TTOLine { + public: + CFDE_TTOLine(); + CFDE_TTOLine(const CFDE_TTOLine& ttoLine); + ~CFDE_TTOLine(); + + bool GetNewReload() const { return m_bNewReload; } + void SetNewReload(bool reload) { m_bNewReload = reload; } + int32_t AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece); + int32_t GetSize() const; + FDE_TTOPIECE* GetPtrAt(int32_t index); + void RemoveLast(int32_t iCount); + void RemoveAll(); + + private: + bool m_bNewReload; + std::deque<FDE_TTOPIECE> m_pieces; +}; + +class CFDE_TextOut { + public: + CFDE_TextOut(); + ~CFDE_TextOut(); + + void SetFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont); + void SetFontSize(float fFontSize); + void SetTextColor(FX_ARGB color); + void SetStyles(uint32_t dwStyles); + void SetTabWidth(float fTabWidth); + void SetEllipsisString(const CFX_WideString& wsEllipsis); + void SetParagraphBreakChar(wchar_t wch); + void SetAlignment(int32_t iAlignment); + void SetLineSpace(float fLineSpace); + void SetDIBitmap(const CFX_RetainPtr<CFX_DIBitmap>& pDIB); + void SetRenderDevice(CFX_RenderDevice* pDevice); + void SetClipRect(const CFX_Rect& rtClip); + void SetClipRect(const CFX_RectF& rtClip); + void SetMatrix(const CFX_Matrix& matrix); + void SetLineBreakTolerance(float fTolerance); + + void DrawText(const wchar_t* pwsStr, int32_t iLength, int32_t x, int32_t y); + void DrawText(const wchar_t* pwsStr, int32_t iLength, float x, float y); + void DrawText(const wchar_t* pwsStr, int32_t iLength, const CFX_Rect& rect); + void DrawText(const wchar_t* pwsStr, int32_t iLength, const CFX_RectF& rect); + + void SetLogicClipRect(const CFX_RectF& rtClip); + void CalcLogicSize(const wchar_t* pwsStr, int32_t iLength, CFX_SizeF& size); + void CalcLogicSize(const wchar_t* pwsStr, int32_t iLength, CFX_RectF& rect); + void DrawLogicText(const wchar_t* pwsStr, int32_t iLength, float x, float y); + void DrawLogicText(const wchar_t* pwsStr, + int32_t iLength, + const CFX_RectF& rect); + int32_t GetTotalLines(); + + private: + void CalcTextSize(const wchar_t* pwsStr, int32_t iLength, CFX_RectF& rect); + bool RetrieveLineWidth(CFX_BreakType dwBreakStatus, + float& fStartPos, + float& fWidth, + float& fHeight); + void SetLineWidth(CFX_RectF& rect); + void DrawText(const wchar_t* pwsStr, + int32_t iLength, + const CFX_RectF& rect, + const CFX_RectF& rtClip); + void LoadText(const wchar_t* pwsStr, int32_t iLength, const CFX_RectF& rect); + void LoadEllipsis(); + void ExpandBuffer(int32_t iSize, int32_t iType); + void RetrieveEllPieces(std::vector<int32_t>* pCharWidths); + + void Reload(const CFX_RectF& rect); + void ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect); + bool RetrievePieces(CFX_BreakType dwBreakStatus, + int32_t& iStartChar, + int32_t& iPieceWidths, + bool bReload, + const CFX_RectF& rect); + void AppendPiece(const FDE_TTOPIECE& ttoPiece, bool bNeedReload, bool bEnd); + void ReplaceWidthEllipsis(); + void DoAlignment(const CFX_RectF& rect); + void OnDraw(const CFX_RectF& rtClip); + int32_t GetDisplayPos(FDE_TTOPIECE* pPiece); + int32_t GetCharRects(const FDE_TTOPIECE* pPiece); + + FX_TXTRUN ToTextRun(const FDE_TTOPIECE* pPiece); + void DrawLine(const FDE_TTOPIECE* pPiece, CFDE_Pen* pPen); + + std::unique_ptr<CFX_TxtBreak> m_pTxtBreak; + CFX_RetainPtr<CFGAS_GEFont> m_pFont; + float m_fFontSize; + float m_fLineSpace; + float m_fLinePos; + float m_fTolerance; + int32_t m_iAlignment; + int32_t m_iTxtBkAlignment; + std::vector<int32_t> m_CharWidths; + std::vector<int32_t> m_EllCharWidths; + wchar_t m_wParagraphBkChar; + FX_ARGB m_TxtColor; + uint32_t m_dwStyles; + uint32_t m_dwTxtBkStyles; + CFX_WideString m_wsEllipsis; + bool m_bElliChanged; + int32_t m_iEllipsisWidth; + CFX_WideString m_wsText; + CFX_RectF m_rtClip; + CFX_RectF m_rtLogicClip; + CFX_Matrix m_Matrix; + std::deque<CFDE_TTOLine> m_ttoLines; + int32_t m_iCurLine; + int32_t m_iCurPiece; + int32_t m_iTotalLines; + std::vector<FXTEXT_CHARPOS> m_CharPos; + std::unique_ptr<CFDE_RenderDevice> m_pRenderDevice; + std::vector<int32_t> m_HotKeys; + std::vector<CFX_RectF> m_rectArray; +}; + +#endif // XFA_FDE_CFDE_TEXTOUT_H_ |