• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 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 #include "xfa/fde/cfde_txtedttextset.h"
8 
9 #include "xfa/fde/cfde_txtedtengine.h"
10 #include "xfa/fde/cfde_txtedtpage.h"
11 #include "xfa/fgas/font/cfgas_gefont.h"
12 
CFDE_TxtEdtTextSet(CFDE_TxtEdtPage * pPage)13 CFDE_TxtEdtTextSet::CFDE_TxtEdtTextSet(CFDE_TxtEdtPage* pPage)
14     : m_pPage(pPage) {}
15 
~CFDE_TxtEdtTextSet()16 CFDE_TxtEdtTextSet::~CFDE_TxtEdtTextSet() {}
17 
GetType()18 FDE_VISUALOBJTYPE CFDE_TxtEdtTextSet::GetType() {
19   return FDE_VISUALOBJ_Text;
20 }
21 
GetRect(const FDE_TEXTEDITPIECE & pPiece)22 CFX_RectF CFDE_TxtEdtTextSet::GetRect(const FDE_TEXTEDITPIECE& pPiece) {
23   return pPiece.rtPiece;
24 }
25 
GetString(FDE_TEXTEDITPIECE * pPiece,CFX_WideString & wsText)26 int32_t CFDE_TxtEdtTextSet::GetString(FDE_TEXTEDITPIECE* pPiece,
27                                       CFX_WideString& wsText) {
28   FX_WCHAR* pBuffer = wsText.GetBuffer(pPiece->nCount);
29   for (int32_t i = 0; i < pPiece->nCount; i++)
30     pBuffer[i] = m_pPage->GetChar(pPiece, i);
31 
32   wsText.ReleaseBuffer(pPiece->nCount);
33   return pPiece->nCount;
34 }
35 
GetFont()36 CFX_RetainPtr<CFGAS_GEFont> CFDE_TxtEdtTextSet::GetFont() {
37   return m_pPage->GetEngine()->GetEditParams()->pFont;
38 }
39 
GetFontSize()40 FX_FLOAT CFDE_TxtEdtTextSet::GetFontSize() {
41   return m_pPage->GetEngine()->GetEditParams()->fFontSize;
42 }
43 
GetFontColor()44 FX_ARGB CFDE_TxtEdtTextSet::GetFontColor() {
45   return m_pPage->GetEngine()->GetEditParams()->dwFontColor;
46 }
47 
GetDisplayPos(const FDE_TEXTEDITPIECE & piece,FXTEXT_CHARPOS * pCharPos,bool bCharCode,CFX_WideString * pWSForms)48 int32_t CFDE_TxtEdtTextSet::GetDisplayPos(const FDE_TEXTEDITPIECE& piece,
49                                           FXTEXT_CHARPOS* pCharPos,
50                                           bool bCharCode,
51                                           CFX_WideString* pWSForms) {
52   int32_t nLength = piece.nCount;
53   if (nLength < 1)
54     return 0;
55 
56   CFDE_TxtEdtEngine* pEngine =
57       static_cast<CFDE_TxtEdtEngine*>(m_pPage->GetEngine());
58   const FDE_TXTEDTPARAMS* pTextParams = pEngine->GetEditParams();
59   CFX_TxtBreak* pBreak = pEngine->GetTextBreak();
60   uint32_t dwLayoutStyle = pBreak->GetLayoutStyles();
61   FX_TXTRUN tr;
62   tr.pAccess = m_pPage;
63   tr.pIdentity = &piece;
64   tr.iLength = nLength;
65   tr.pFont = pTextParams->pFont;
66   tr.fFontSize = pTextParams->fFontSize;
67   tr.dwStyles = dwLayoutStyle;
68   tr.iCharRotation = pTextParams->nCharRotation;
69   tr.dwCharStyles = piece.dwCharStyles;
70   tr.pRect = &piece.rtPiece;
71   tr.wLineBreakChar = pTextParams->wLineBreakChar;
72   return pBreak->GetDisplayPos(&tr, pCharPos, bCharCode, pWSForms);
73 }
74 
GetCharRects(const FDE_TEXTEDITPIECE * pPiece,bool bBBox)75 std::vector<CFX_RectF> CFDE_TxtEdtTextSet::GetCharRects(
76     const FDE_TEXTEDITPIECE* pPiece,
77     bool bBBox) {
78   if (!pPiece || pPiece->nCount < 1)
79     return std::vector<CFX_RectF>();
80 
81   auto pEngine = static_cast<CFDE_TxtEdtEngine*>(m_pPage->GetEngine());
82   const FDE_TXTEDTPARAMS* pTextParams = pEngine->GetEditParams();
83   uint32_t dwLayoutStyle = pEngine->GetTextBreak()->GetLayoutStyles();
84   FX_TXTRUN tr;
85   tr.pAccess = m_pPage;
86   tr.pIdentity = pPiece;
87   tr.iLength = pPiece->nCount;
88   tr.pFont = pTextParams->pFont;
89   tr.fFontSize = pTextParams->fFontSize;
90   tr.dwStyles = dwLayoutStyle;
91   tr.iCharRotation = pTextParams->nCharRotation;
92   tr.dwCharStyles = pPiece->dwCharStyles;
93   tr.pRect = &pPiece->rtPiece;
94   tr.wLineBreakChar = pTextParams->wLineBreakChar;
95   return pEngine->GetTextBreak()->GetCharRects(&tr, bBBox);
96 }
97