Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(941)

Side by Side Diff: xfa/fgas/layout/fgas_textbreak.h

Issue 2650773003: Use std::vector for fx_ucd.h arrays. (Closed)
Patch Set: missed one Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fgas/layout/fgas_rtfbreak.cpp ('k') | xfa/fgas/layout/fgas_textbreak.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef XFA_FGAS_LAYOUT_FGAS_TEXTBREAK_H_ 7 #ifndef XFA_FGAS_LAYOUT_FGAS_TEXTBREAK_H_
8 #define XFA_FGAS_LAYOUT_FGAS_TEXTBREAK_H_ 8 #define XFA_FGAS_LAYOUT_FGAS_TEXTBREAK_H_
9 9
10 #include <memory> 10 #include <memory>
11 #include <vector> 11 #include <vector>
12 12
13 #include "core/fxcrt/fx_ucd.h" 13 #include "core/fxcrt/fx_ucd.h"
14 #include "core/fxge/cfx_renderdevice.h" 14 #include "core/fxge/cfx_renderdevice.h"
15 #include "third_party/base/stl_util.h"
15 #include "xfa/fgas/crt/fgas_utils.h" 16 #include "xfa/fgas/crt/fgas_utils.h"
16 #include "xfa/fgas/layout/fgas_unicode.h" 17 #include "xfa/fgas/layout/fgas_unicode.h"
17 18
18 class CFX_Char; 19 class CFX_Char;
19 class CFGAS_GEFont; 20 class CFGAS_GEFont;
20 class CFX_TxtChar; 21 class CFX_TxtChar;
21 class CFX_TxtPiece; 22 class CFX_TxtPiece;
22 class IFX_TxtAccess; 23 class IFX_TxtAccess;
23 24
24 #define FX_TXTBREAKPOLICY_None 0x00 25 #define FX_TXTBREAKPOLICY_None 0x00
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 public: 111 public:
111 CFX_TxtPiece(); 112 CFX_TxtPiece();
112 113
113 int32_t GetEndPos() const { 114 int32_t GetEndPos() const {
114 return m_iWidth < 0 ? m_iStartPos : m_iStartPos + m_iWidth; 115 return m_iWidth < 0 ? m_iStartPos : m_iStartPos + m_iWidth;
115 } 116 }
116 int32_t GetLength() const { return m_iChars; } 117 int32_t GetLength() const { return m_iChars; }
117 int32_t GetEndChar() const { return m_iStartChar + m_iChars; } 118 int32_t GetEndChar() const { return m_iStartChar + m_iChars; }
118 CFX_TxtChar* GetCharPtr(int32_t index) const { 119 CFX_TxtChar* GetCharPtr(int32_t index) const {
119 ASSERT(index > -1 && index < m_iChars && m_pChars); 120 ASSERT(index > -1 && index < m_iChars && m_pChars);
120 return m_pChars->GetDataPtr(m_iStartChar + index); 121 return &(*m_pChars)[m_iStartChar + index];
121 } 122 }
122 void GetString(FX_WCHAR* pText) const { 123 void GetString(FX_WCHAR* pText) const {
123 ASSERT(pText); 124 ASSERT(pText);
124 int32_t iEndChar = m_iStartChar + m_iChars; 125 int32_t iEndChar = m_iStartChar + m_iChars;
125 CFX_Char* pChar; 126 for (int32_t i = m_iStartChar; i < iEndChar; i++)
126 for (int32_t i = m_iStartChar; i < iEndChar; i++) { 127 *pText++ = static_cast<FX_WCHAR>((*m_pChars)[i].m_wCharCode);
127 pChar = m_pChars->GetDataPtr(i);
128 *pText++ = (FX_WCHAR)pChar->m_wCharCode;
129 }
130 } 128 }
131 void GetString(CFX_WideString& wsText) const { 129 void GetString(CFX_WideString& wsText) const {
132 FX_WCHAR* pText = wsText.GetBuffer(m_iChars); 130 FX_WCHAR* pText = wsText.GetBuffer(m_iChars);
133 GetString(pText); 131 GetString(pText);
134 wsText.ReleaseBuffer(m_iChars); 132 wsText.ReleaseBuffer(m_iChars);
135 } 133 }
136 void GetWidths(int32_t* pWidths) const { 134 void GetWidths(int32_t* pWidths) const {
137 ASSERT(pWidths); 135 ASSERT(pWidths);
138 int32_t iEndChar = m_iStartChar + m_iChars; 136 int32_t iEndChar = m_iStartChar + m_iChars;
139 CFX_Char* pChar; 137 for (int32_t i = m_iStartChar; i < iEndChar; i++)
140 for (int32_t i = m_iStartChar; i < iEndChar; i++) { 138 *pWidths++ = (*m_pChars)[i].m_iCharWidth;
141 pChar = m_pChars->GetDataPtr(i);
142 *pWidths++ = pChar->m_iCharWidth;
143 }
144 } 139 }
145 140
146 uint32_t m_dwStatus; 141 uint32_t m_dwStatus;
147 int32_t m_iStartPos; 142 int32_t m_iStartPos;
148 int32_t m_iWidth; 143 int32_t m_iWidth;
149 int32_t m_iStartChar; 144 int32_t m_iStartChar;
150 int32_t m_iChars; 145 int32_t m_iChars;
151 int32_t m_iBidiLevel; 146 int32_t m_iBidiLevel;
152 int32_t m_iBidiPos; 147 int32_t m_iBidiPos;
153 int32_t m_iHorizontalScale; 148 int32_t m_iHorizontalScale;
154 int32_t m_iVerticalScale; 149 int32_t m_iVerticalScale;
155 uint32_t m_dwCharStyles; 150 uint32_t m_dwCharStyles;
156 CFX_TxtCharArray* m_pChars; 151 std::vector<CFX_TxtChar>* m_pChars;
157 void* m_pUserData; 152 void* m_pUserData;
158 }; 153 };
159 154
160 typedef CFX_BaseArrayTemplate<CFX_TxtPiece> CFX_TxtPieceArray; 155 typedef CFX_BaseArrayTemplate<CFX_TxtPiece> CFX_TxtPieceArray;
161 156
162 class CFX_TxtLine { 157 class CFX_TxtLine {
163 public: 158 public:
164 explicit CFX_TxtLine(int32_t iBlockSize); 159 explicit CFX_TxtLine(int32_t iBlockSize);
165 ~CFX_TxtLine(); 160 ~CFX_TxtLine();
166 161
167 int32_t CountChars() const { return m_pLineChars->GetSize(); } 162 int32_t CountChars() const {
163 return pdfium::CollectionSize<int32_t>(*m_pLineChars);
164 }
165
168 CFX_TxtChar* GetCharPtr(int32_t index) const { 166 CFX_TxtChar* GetCharPtr(int32_t index) const {
169 ASSERT(index > -1 && index < m_pLineChars->GetSize()); 167 ASSERT(index >= 0 &&
170 return m_pLineChars->GetDataPtr(index); 168 index < pdfium::CollectionSize<int32_t>(*m_pLineChars));
169 return &(*m_pLineChars)[index];
171 } 170 }
171
172 int32_t CountPieces() const { return m_pLinePieces->GetSize(); } 172 int32_t CountPieces() const { return m_pLinePieces->GetSize(); }
173 CFX_TxtPiece* GetPiecePtr(int32_t index) const { 173 CFX_TxtPiece* GetPiecePtr(int32_t index) const {
174 ASSERT(index > -1 && index < m_pLinePieces->GetSize()); 174 ASSERT(index > -1 && index < m_pLinePieces->GetSize());
175 return m_pLinePieces->GetPtrAt(index); 175 return m_pLinePieces->GetPtrAt(index);
176 } 176 }
177
177 void GetString(CFX_WideString& wsStr) const { 178 void GetString(CFX_WideString& wsStr) const {
178 int32_t iCount = m_pLineChars->GetSize(); 179 int32_t iCount = pdfium::CollectionSize<int32_t>(*m_pLineChars);
179 FX_WCHAR* pBuf = wsStr.GetBuffer(iCount); 180 FX_WCHAR* pBuf = wsStr.GetBuffer(iCount);
180 CFX_Char* pChar; 181 for (int32_t i = 0; i < iCount; i++)
181 for (int32_t i = 0; i < iCount; i++) { 182 *pBuf++ = static_cast<FX_WCHAR>((*m_pLineChars)[i].m_wCharCode);
182 pChar = m_pLineChars->GetDataPtr(i);
183 *pBuf++ = (FX_WCHAR)pChar->m_wCharCode;
184 }
185 wsStr.ReleaseBuffer(iCount); 183 wsStr.ReleaseBuffer(iCount);
186 } 184 }
185
187 void RemoveAll(bool bLeaveMemory = false) { 186 void RemoveAll(bool bLeaveMemory = false) {
188 m_pLineChars->RemoveAll(); 187 m_pLineChars->clear();
189 m_pLinePieces->RemoveAll(bLeaveMemory); 188 m_pLinePieces->RemoveAll(bLeaveMemory);
190 m_iWidth = 0; 189 m_iWidth = 0;
191 m_iArabicChars = 0; 190 m_iArabicChars = 0;
192 } 191 }
193 192
194 std::unique_ptr<CFX_TxtCharArray> m_pLineChars; 193 std::unique_ptr<std::vector<CFX_TxtChar>> m_pLineChars;
195 std::unique_ptr<CFX_TxtPieceArray> m_pLinePieces; 194 std::unique_ptr<CFX_TxtPieceArray> m_pLinePieces;
196 int32_t m_iStart; 195 int32_t m_iStart;
197 int32_t m_iWidth; 196 int32_t m_iWidth;
198 int32_t m_iArabicChars; 197 int32_t m_iArabicChars;
199 }; 198 };
200 199
201 class CFX_TxtBreak { 200 class CFX_TxtBreak {
202 public: 201 public:
203 explicit CFX_TxtBreak(uint32_t dwPolicies); 202 explicit CFX_TxtBreak(uint32_t dwPolicies);
204 ~CFX_TxtBreak(); 203 ~CFX_TxtBreak();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 void ResetArabicContext(); 253 void ResetArabicContext();
255 void ResetContextCharStyles(); 254 void ResetContextCharStyles();
256 void EndBreak_UpdateArabicShapes(); 255 void EndBreak_UpdateArabicShapes();
257 bool EndBreak_SplitLine(CFX_TxtLine* pNextLine, 256 bool EndBreak_SplitLine(CFX_TxtLine* pNextLine,
258 bool bAllChars, 257 bool bAllChars,
259 uint32_t dwStatus); 258 uint32_t dwStatus);
260 void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus); 259 void EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus);
261 void EndBreak_Alignment(CFX_TPOArray& tpos, 260 void EndBreak_Alignment(CFX_TPOArray& tpos,
262 bool bAllChars, 261 bool bAllChars,
263 uint32_t dwStatus); 262 uint32_t dwStatus);
264 int32_t GetBreakPos(CFX_TxtCharArray& ca, 263 int32_t GetBreakPos(std::vector<CFX_TxtChar>& ca,
265 int32_t& iEndPos, 264 int32_t& iEndPos,
266 bool bAllChars = false, 265 bool bAllChars = false,
267 bool bOnlyBrk = false); 266 bool bOnlyBrk = false);
268 void SplitTextLine(CFX_TxtLine* pCurLine, 267 void SplitTextLine(CFX_TxtLine* pCurLine,
269 CFX_TxtLine* pNextLine, 268 CFX_TxtLine* pNextLine,
270 bool bAllChars = false); 269 bool bAllChars = false);
271 270
272 uint32_t m_dwPolicies; 271 uint32_t m_dwPolicies;
273 bool m_bPagination; 272 bool m_bPagination;
274 int32_t m_iLineWidth; 273 int32_t m_iLineWidth;
(...skipping 29 matching lines...) Expand all
304 std::unique_ptr<CFX_TxtLine> m_pTxtLine2; 303 std::unique_ptr<CFX_TxtLine> m_pTxtLine2;
305 CFX_TxtLine* m_pCurLine; 304 CFX_TxtLine* m_pCurLine;
306 int32_t m_iReady; 305 int32_t m_iReady;
307 int32_t m_iTolerance; 306 int32_t m_iTolerance;
308 int32_t m_iHorScale; 307 int32_t m_iHorScale;
309 int32_t m_iVerScale; 308 int32_t m_iVerScale;
310 int32_t m_iCharSpace; 309 int32_t m_iCharSpace;
311 }; 310 };
312 311
313 #endif // XFA_FGAS_LAYOUT_FGAS_TEXTBREAK_H_ 312 #endif // XFA_FGAS_LAYOUT_FGAS_TEXTBREAK_H_
OLDNEW
« no previous file with comments | « xfa/fgas/layout/fgas_rtfbreak.cpp ('k') | xfa/fgas/layout/fgas_textbreak.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698