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

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

Issue 2207093005: Use smart pointers for class owned pointers (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: one more change Created 4 years, 4 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_textbreak.h ('k') | xfa/fwl/basewidget/cfx_barcode.h » ('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 #include "xfa/fgas/layout/fgas_textbreak.h" 7 #include "xfa/fgas/layout/fgas_textbreak.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 m_eCharType(FX_CHARTYPE_Unknown), 62 m_eCharType(FX_CHARTYPE_Unknown),
63 m_bArabicNumber(FALSE), 63 m_bArabicNumber(FALSE),
64 m_bArabicComma(FALSE), 64 m_bArabicComma(FALSE),
65 m_pCurLine(nullptr), 65 m_pCurLine(nullptr),
66 m_iReady(0), 66 m_iReady(0),
67 m_iTolerance(0), 67 m_iTolerance(0),
68 m_iHorScale(100), 68 m_iHorScale(100),
69 m_iVerScale(100), 69 m_iVerScale(100),
70 m_iCharSpace(0) { 70 m_iCharSpace(0) {
71 m_bPagination = (m_dwPolicies & FX_TXTBREAKPOLICY_Pagination) != 0; 71 m_bPagination = (m_dwPolicies & FX_TXTBREAKPOLICY_Pagination) != 0;
72 if (m_bPagination) { 72 int32_t iSize = m_bPagination ? sizeof(CFX_Char) : sizeof(CFX_TxtChar);
73 m_pTxtLine1 = new CFX_TxtLine(sizeof(CFX_Char)); 73 m_pTxtLine1.reset(new CFX_TxtLine(iSize));
74 m_pTxtLine2 = new CFX_TxtLine(sizeof(CFX_Char)); 74 m_pTxtLine2.reset(new CFX_TxtLine(iSize));
75 } else { 75 m_pCurLine = m_pTxtLine1.get();
76 m_pTxtLine1 = new CFX_TxtLine(sizeof(CFX_TxtChar));
77 m_pTxtLine2 = new CFX_TxtLine(sizeof(CFX_TxtChar));
78 }
79 m_pCurLine = m_pTxtLine1;
80 ResetArabicContext(); 76 ResetArabicContext();
81 } 77 }
78
82 CFX_TxtBreak::~CFX_TxtBreak() { 79 CFX_TxtBreak::~CFX_TxtBreak() {
83 Reset(); 80 Reset();
84 delete m_pTxtLine1;
85 delete m_pTxtLine2;
86 } 81 }
82
87 void CFX_TxtBreak::SetLineWidth(FX_FLOAT fLineWidth) { 83 void CFX_TxtBreak::SetLineWidth(FX_FLOAT fLineWidth) {
88 m_iLineWidth = FXSYS_round(fLineWidth * 20000.0f); 84 m_iLineWidth = FXSYS_round(fLineWidth * 20000.0f);
89 ASSERT(m_iLineWidth >= 20000); 85 ASSERT(m_iLineWidth >= 20000);
90 } 86 }
87
91 void CFX_TxtBreak::SetLinePos(FX_FLOAT fLinePos) { 88 void CFX_TxtBreak::SetLinePos(FX_FLOAT fLinePos) {
92 int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); 89 int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f);
93 if (iLinePos < 0) { 90 if (iLinePos < 0) {
94 iLinePos = 0; 91 iLinePos = 0;
95 } 92 }
96 if (iLinePos > m_iLineWidth) { 93 if (iLinePos > m_iLineWidth) {
97 iLinePos = m_iLineWidth; 94 iLinePos = m_iLineWidth;
98 } 95 }
99 m_pCurLine->m_iStart = iLinePos; 96 m_pCurLine->m_iStart = iLinePos;
100 m_pCurLine->m_iWidth += iLinePos; 97 m_pCurLine->m_iWidth += iLinePos;
101 } 98 }
99
102 void CFX_TxtBreak::SetLayoutStyles(uint32_t dwLayoutStyles) { 100 void CFX_TxtBreak::SetLayoutStyles(uint32_t dwLayoutStyles) {
103 m_dwLayoutStyles = dwLayoutStyles; 101 m_dwLayoutStyles = dwLayoutStyles;
104 m_bVertical = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0; 102 m_bVertical = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_VerticalChars) != 0;
105 m_bArabicContext = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicContext) != 0; 103 m_bArabicContext = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicContext) != 0;
106 m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0; 104 m_bArabicShapes = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ArabicShapes) != 0;
107 m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0; 105 m_bRTL = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_RTLReadingOrder) != 0;
108 m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0; 106 m_bSingleLine = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_SingleLine) != 0;
109 m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; 107 m_bCombText = (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_CombText) != 0;
110 ResetArabicContext(); 108 ResetArabicContext();
111 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); 109 m_iLineRotation = GetLineRotation(m_dwLayoutStyles);
112 m_iRotation = m_iLineRotation + m_iCharRotation; 110 m_iRotation = m_iLineRotation + m_iCharRotation;
113 m_iRotation %= 4; 111 m_iRotation %= 4;
114 } 112 }
113
115 void CFX_TxtBreak::SetFont(CFGAS_GEFont* pFont) { 114 void CFX_TxtBreak::SetFont(CFGAS_GEFont* pFont) {
116 if (!pFont) { 115 if (!pFont) {
117 return; 116 return;
118 } 117 }
119 if (m_pFont == pFont) { 118 if (m_pFont == pFont) {
120 return; 119 return;
121 } 120 }
122 SetBreakStatus(); 121 SetBreakStatus();
123 m_pFont = pFont; 122 m_pFont = pFont;
124 m_iDefChar = 0; 123 m_iDefChar = 0;
125 if (m_wDefChar != 0xFEFF && m_pFont) { 124 if (m_wDefChar != 0xFEFF && m_pFont) {
126 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); 125 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE);
127 m_iDefChar *= m_iFontSize; 126 m_iDefChar *= m_iFontSize;
128 } 127 }
129 } 128 }
129
130 void CFX_TxtBreak::SetFontSize(FX_FLOAT fFontSize) { 130 void CFX_TxtBreak::SetFontSize(FX_FLOAT fFontSize) {
131 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); 131 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f);
132 if (m_iFontSize == iFontSize) { 132 if (m_iFontSize == iFontSize) {
133 return; 133 return;
134 } 134 }
135 SetBreakStatus(); 135 SetBreakStatus();
136 m_iFontSize = iFontSize; 136 m_iFontSize = iFontSize;
137 m_iDefChar = 0; 137 m_iDefChar = 0;
138 if (m_wDefChar != 0xFEFF && m_pFont) { 138 if (m_wDefChar != 0xFEFF && m_pFont) {
139 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); 139 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE);
140 m_iDefChar *= m_iFontSize; 140 m_iDefChar *= m_iFontSize;
141 } 141 }
142 } 142 }
143
143 void CFX_TxtBreak::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) { 144 void CFX_TxtBreak::SetTabWidth(FX_FLOAT fTabWidth, FX_BOOL bEquidistant) {
144 m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f); 145 m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f);
145 if (m_iTabWidth < FX_TXTBREAK_MinimumTabWidth) { 146 if (m_iTabWidth < FX_TXTBREAK_MinimumTabWidth) {
146 m_iTabWidth = FX_TXTBREAK_MinimumTabWidth; 147 m_iTabWidth = FX_TXTBREAK_MinimumTabWidth;
147 } 148 }
148 m_bEquidistant = bEquidistant; 149 m_bEquidistant = bEquidistant;
149 } 150 }
151
150 void CFX_TxtBreak::SetDefaultChar(FX_WCHAR wch) { 152 void CFX_TxtBreak::SetDefaultChar(FX_WCHAR wch) {
151 m_wDefChar = wch; 153 m_wDefChar = wch;
152 m_iDefChar = 0; 154 m_iDefChar = 0;
153 if (m_wDefChar != 0xFEFF && m_pFont) { 155 if (m_wDefChar != 0xFEFF && m_pFont) {
154 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); 156 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE);
155 if (m_iDefChar < 0) { 157 if (m_iDefChar < 0) {
156 m_iDefChar = 0; 158 m_iDefChar = 0;
157 } else { 159 } else {
158 m_iDefChar *= m_iFontSize; 160 m_iDefChar *= m_iFontSize;
159 } 161 }
160 } 162 }
161 } 163 }
164
162 void CFX_TxtBreak::SetParagraphBreakChar(FX_WCHAR wch) { 165 void CFX_TxtBreak::SetParagraphBreakChar(FX_WCHAR wch) {
163 if (wch != L'\r' && wch != L'\n') { 166 if (wch != L'\r' && wch != L'\n') {
164 return; 167 return;
165 } 168 }
166 m_wParagBreakChar = wch; 169 m_wParagBreakChar = wch;
167 } 170 }
171
168 void CFX_TxtBreak::SetLineBreakTolerance(FX_FLOAT fTolerance) { 172 void CFX_TxtBreak::SetLineBreakTolerance(FX_FLOAT fTolerance) {
169 m_iTolerance = FXSYS_round(fTolerance * 20000.0f); 173 m_iTolerance = FXSYS_round(fTolerance * 20000.0f);
170 } 174 }
175
171 void CFX_TxtBreak::SetCharRotation(int32_t iCharRotation) { 176 void CFX_TxtBreak::SetCharRotation(int32_t iCharRotation) {
172 if (iCharRotation < 0) { 177 if (iCharRotation < 0) {
173 iCharRotation += (-iCharRotation / 4 + 1) * 4; 178 iCharRotation += (-iCharRotation / 4 + 1) * 4;
174 } else if (iCharRotation > 3) { 179 } else if (iCharRotation > 3) {
175 iCharRotation -= (iCharRotation / 4) * 4; 180 iCharRotation -= (iCharRotation / 4) * 4;
176 } 181 }
177 if (m_iCharRotation == iCharRotation) { 182 if (m_iCharRotation == iCharRotation) {
178 return; 183 return;
179 } 184 }
180 SetBreakStatus(); 185 SetBreakStatus();
181 m_iCharRotation = iCharRotation; 186 m_iCharRotation = iCharRotation;
182 m_iRotation = m_iLineRotation + m_iCharRotation; 187 m_iRotation = m_iLineRotation + m_iCharRotation;
183 m_iRotation %= 4; 188 m_iRotation %= 4;
184 } 189 }
190
185 void CFX_TxtBreak::SetAlignment(int32_t iAlignment) { 191 void CFX_TxtBreak::SetAlignment(int32_t iAlignment) {
186 ASSERT(iAlignment >= FX_TXTLINEALIGNMENT_Left && 192 ASSERT(iAlignment >= FX_TXTLINEALIGNMENT_Left &&
187 iAlignment <= FX_TXTLINEALIGNMENT_Distributed); 193 iAlignment <= FX_TXTLINEALIGNMENT_Distributed);
188 m_iAlignment = iAlignment; 194 m_iAlignment = iAlignment;
189 ResetArabicContext(); 195 ResetArabicContext();
190 } 196 }
197
191 void CFX_TxtBreak::ResetContextCharStyles() { 198 void CFX_TxtBreak::ResetContextCharStyles() {
192 m_dwContextCharStyles = m_bArabicContext ? m_iCurAlignment : m_iAlignment; 199 m_dwContextCharStyles = m_bArabicContext ? m_iCurAlignment : m_iAlignment;
193 if (m_bArabicNumber) { 200 if (m_bArabicNumber) {
194 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicNumber; 201 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicNumber;
195 } 202 }
196 if (m_bArabicComma) { 203 if (m_bArabicComma) {
197 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicComma; 204 m_dwContextCharStyles |= FX_TXTCHARSTYLE_ArabicComma;
198 } 205 }
199 if ((m_bArabicContext && m_bCurRTL) || (!m_bArabicContext && m_bRTL)) { 206 if ((m_bArabicContext && m_bCurRTL) || (!m_bArabicContext && m_bRTL)) {
200 m_dwContextCharStyles |= FX_TXTCHARSTYLE_RTLReadingOrder; 207 m_dwContextCharStyles |= FX_TXTCHARSTYLE_RTLReadingOrder;
201 } 208 }
202 m_dwContextCharStyles |= (m_iArabicContext << 8); 209 m_dwContextCharStyles |= (m_iArabicContext << 8);
203 } 210 }
211
204 uint32_t CFX_TxtBreak::GetContextCharStyles() const { 212 uint32_t CFX_TxtBreak::GetContextCharStyles() const {
205 return m_dwContextCharStyles; 213 return m_dwContextCharStyles;
206 } 214 }
215
207 void CFX_TxtBreak::SetContextCharStyles(uint32_t dwCharStyles) { 216 void CFX_TxtBreak::SetContextCharStyles(uint32_t dwCharStyles) {
208 m_iCurAlignment = dwCharStyles & 0x0F; 217 m_iCurAlignment = dwCharStyles & 0x0F;
209 m_bArabicNumber = (dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0; 218 m_bArabicNumber = (dwCharStyles & FX_TXTCHARSTYLE_ArabicNumber) != 0;
210 m_bArabicComma = (dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0; 219 m_bArabicComma = (dwCharStyles & FX_TXTCHARSTYLE_ArabicComma) != 0;
211 m_bCurRTL = (dwCharStyles & FX_TXTCHARSTYLE_RTLReadingOrder) != 0; 220 m_bCurRTL = (dwCharStyles & FX_TXTCHARSTYLE_RTLReadingOrder) != 0;
212 m_iCurArabicContext = m_iArabicContext = ((dwCharStyles & 0x0300) >> 8); 221 m_iCurArabicContext = m_iArabicContext = ((dwCharStyles & 0x0300) >> 8);
213 ResetContextCharStyles(); 222 ResetContextCharStyles();
214 } 223 }
224
215 void CFX_TxtBreak::SetCombWidth(FX_FLOAT fCombWidth) { 225 void CFX_TxtBreak::SetCombWidth(FX_FLOAT fCombWidth) {
216 m_iCombWidth = FXSYS_round(fCombWidth * 20000.0f); 226 m_iCombWidth = FXSYS_round(fCombWidth * 20000.0f);
217 } 227 }
228
218 void CFX_TxtBreak::SetUserData(void* pUserData) { 229 void CFX_TxtBreak::SetUserData(void* pUserData) {
219 if (m_pUserData == pUserData) { 230 if (m_pUserData == pUserData) {
220 return; 231 return;
221 } 232 }
222 SetBreakStatus(); 233 SetBreakStatus();
223 m_pUserData = pUserData; 234 m_pUserData = pUserData;
224 } 235 }
236
225 void CFX_TxtBreak::SetBreakStatus() { 237 void CFX_TxtBreak::SetBreakStatus() {
226 if (m_bPagination) { 238 if (m_bPagination) {
227 return; 239 return;
228 } 240 }
229 int32_t iCount = m_pCurLine->CountChars(); 241 int32_t iCount = m_pCurLine->CountChars();
230 if (iCount < 1) { 242 if (iCount < 1) {
231 return; 243 return;
232 } 244 }
233 CFX_TxtChar* pTC = m_pCurLine->GetCharPtr(iCount - 1); 245 CFX_TxtChar* pTC = m_pCurLine->GetCharPtr(iCount - 1);
234 if (pTC->m_dwStatus == 0) { 246 if (pTC->m_dwStatus == 0) {
235 pTC->m_dwStatus = FX_TXTBREAK_PieceBreak; 247 pTC->m_dwStatus = FX_TXTBREAK_PieceBreak;
236 } 248 }
237 } 249 }
250
238 void CFX_TxtBreak::SetHorizontalScale(int32_t iScale) { 251 void CFX_TxtBreak::SetHorizontalScale(int32_t iScale) {
239 if (iScale < 0) { 252 if (iScale < 0) {
240 iScale = 0; 253 iScale = 0;
241 } 254 }
242 if (iScale == m_iHorScale) { 255 if (iScale == m_iHorScale) {
243 return; 256 return;
244 } 257 }
245 SetBreakStatus(); 258 SetBreakStatus();
246 m_iHorScale = iScale; 259 m_iHorScale = iScale;
247 } 260 }
261
248 void CFX_TxtBreak::SetVerticalScale(int32_t iScale) { 262 void CFX_TxtBreak::SetVerticalScale(int32_t iScale) {
249 if (iScale < 0) { 263 if (iScale < 0) {
250 iScale = 0; 264 iScale = 0;
251 } 265 }
252 if (iScale == m_iHorScale) { 266 if (iScale == m_iHorScale) {
253 return; 267 return;
254 } 268 }
255 SetBreakStatus(); 269 SetBreakStatus();
256 m_iVerScale = iScale; 270 m_iVerScale = iScale;
257 } 271 }
272
258 void CFX_TxtBreak::SetCharSpace(FX_FLOAT fCharSpace) { 273 void CFX_TxtBreak::SetCharSpace(FX_FLOAT fCharSpace) {
259 m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); 274 m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f);
260 } 275 }
276
261 static const int32_t gs_FX_TxtLineRotations[8] = {0, 3, 1, 0, 2, 1, 3, 2}; 277 static const int32_t gs_FX_TxtLineRotations[8] = {0, 3, 1, 0, 2, 1, 3, 2};
262 int32_t CFX_TxtBreak::GetLineRotation(uint32_t dwStyles) const { 278 int32_t CFX_TxtBreak::GetLineRotation(uint32_t dwStyles) const {
263 return gs_FX_TxtLineRotations[(dwStyles & 0x0E) >> 1]; 279 return gs_FX_TxtLineRotations[(dwStyles & 0x0E) >> 1];
264 } 280 }
281
265 CFX_TxtChar* CFX_TxtBreak::GetLastChar(int32_t index, FX_BOOL bOmitChar) const { 282 CFX_TxtChar* CFX_TxtBreak::GetLastChar(int32_t index, FX_BOOL bOmitChar) const {
266 CFX_TxtCharArray& ca = *m_pCurLine->m_pLineChars; 283 CFX_TxtCharArray& ca = *m_pCurLine->m_pLineChars.get();
267 int32_t iCount = ca.GetSize(); 284 int32_t iCount = ca.GetSize();
268 if (index < 0 || index >= iCount) { 285 if (index < 0 || index >= iCount) {
269 return nullptr; 286 return nullptr;
270 } 287 }
271 CFX_TxtChar* pTC; 288 CFX_TxtChar* pTC;
272 int32_t iStart = iCount - 1; 289 int32_t iStart = iCount - 1;
273 while (iStart > -1) { 290 while (iStart > -1) {
274 pTC = ca.GetDataPtr(iStart--); 291 pTC = ca.GetDataPtr(iStart--);
275 if (bOmitChar && pTC->GetCharType() == FX_CHARTYPE_Combination) { 292 if (bOmitChar && pTC->GetCharType() == FX_CHARTYPE_Combination) {
276 continue; 293 continue;
277 } 294 }
278 if (--index < 0) { 295 if (--index < 0) {
279 return pTC; 296 return pTC;
280 } 297 }
281 } 298 }
282 return nullptr; 299 return nullptr;
283 } 300 }
301
284 CFX_TxtLine* CFX_TxtBreak::GetTxtLine(FX_BOOL bReady) const { 302 CFX_TxtLine* CFX_TxtBreak::GetTxtLine(FX_BOOL bReady) const {
285 if (!bReady) 303 if (!bReady)
286 return m_pCurLine; 304 return m_pCurLine;
287 if (m_iReady == 1) 305 if (m_iReady == 1)
288 return m_pTxtLine1; 306 return m_pTxtLine1.get();
289 if (m_iReady == 2) 307 if (m_iReady == 2)
290 return m_pTxtLine2; 308 return m_pTxtLine2.get();
291 return nullptr; 309 return nullptr;
292 } 310 }
311
293 CFX_TxtPieceArray* CFX_TxtBreak::GetTxtPieces(FX_BOOL bReady) const { 312 CFX_TxtPieceArray* CFX_TxtBreak::GetTxtPieces(FX_BOOL bReady) const {
294 CFX_TxtLine* pTxtLine = GetTxtLine(bReady); 313 CFX_TxtLine* pTxtLine = GetTxtLine(bReady);
295 if (!pTxtLine) { 314 if (!pTxtLine) {
296 return nullptr; 315 return nullptr;
297 } 316 }
298 return pTxtLine->m_pLinePieces; 317 return pTxtLine->m_pLinePieces.get();
299 } 318 }
319
300 inline FX_CHARTYPE CFX_TxtBreak::GetUnifiedCharType( 320 inline FX_CHARTYPE CFX_TxtBreak::GetUnifiedCharType(
301 FX_CHARTYPE chartype) const { 321 FX_CHARTYPE chartype) const {
302 return chartype >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : chartype; 322 return chartype >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : chartype;
303 } 323 }
324
304 void CFX_TxtBreak::ResetArabicContext() { 325 void CFX_TxtBreak::ResetArabicContext() {
305 if (m_bArabicContext) { 326 if (m_bArabicContext) {
306 m_bCurRTL = m_iCurArabicContext > 1; 327 m_bCurRTL = m_iCurArabicContext > 1;
307 m_iCurAlignment = m_iCurArabicContext > 1 ? FX_TXTLINEALIGNMENT_Right 328 m_iCurAlignment = m_iCurArabicContext > 1 ? FX_TXTLINEALIGNMENT_Right
308 : FX_TXTLINEALIGNMENT_Left; 329 : FX_TXTLINEALIGNMENT_Left;
309 m_iCurAlignment |= (m_iAlignment & FX_TXTLINEALIGNMENT_HigherMask); 330 m_iCurAlignment |= (m_iAlignment & FX_TXTLINEALIGNMENT_HigherMask);
310 m_bArabicNumber = m_iArabicContext >= 1 && m_bArabicShapes; 331 m_bArabicNumber = m_iArabicContext >= 1 && m_bArabicShapes;
311 } else { 332 } else {
312 if (m_bPagination) { 333 if (m_bPagination) {
313 m_bCurRTL = FALSE; 334 m_bCurRTL = FALSE;
314 m_iCurAlignment = 0; 335 m_iCurAlignment = 0;
315 } else { 336 } else {
316 m_bCurRTL = m_bRTL; 337 m_bCurRTL = m_bRTL;
317 m_iCurAlignment = m_iAlignment; 338 m_iCurAlignment = m_iAlignment;
318 } 339 }
319 if (m_bRTL) { 340 if (m_bRTL) {
320 m_bArabicNumber = m_iArabicContext >= 1; 341 m_bArabicNumber = m_iArabicContext >= 1;
321 } else { 342 } else {
322 m_bArabicNumber = m_iArabicContext > 1; 343 m_bArabicNumber = m_iArabicContext > 1;
323 } 344 }
324 m_bArabicNumber = m_bArabicNumber && m_bArabicShapes; 345 m_bArabicNumber = m_bArabicNumber && m_bArabicShapes;
325 } 346 }
326 m_bArabicComma = m_bArabicNumber; 347 m_bArabicComma = m_bArabicNumber;
327 ResetContextCharStyles(); 348 ResetContextCharStyles();
328 } 349 }
350
329 void CFX_TxtBreak::AppendChar_PageLoad(CFX_TxtChar* pCurChar, 351 void CFX_TxtBreak::AppendChar_PageLoad(CFX_TxtChar* pCurChar,
330 uint32_t dwProps) { 352 uint32_t dwProps) {
331 if (!m_bPagination) { 353 if (!m_bPagination) {
332 pCurChar->m_dwStatus = 0; 354 pCurChar->m_dwStatus = 0;
333 pCurChar->m_pUserData = m_pUserData; 355 pCurChar->m_pUserData = m_pUserData;
334 } 356 }
335 if (m_bArabicContext || m_bArabicShapes) { 357 if (m_bArabicContext || m_bArabicShapes) {
336 int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS; 358 int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
337 int32_t iArabicContext = 359 int32_t iArabicContext =
338 (iBidiCls == FX_BIDICLASS_R || iBidiCls == FX_BIDICLASS_AL) 360 (iBidiCls == FX_BIDICLASS_R || iBidiCls == FX_BIDICLASS_AL)
339 ? 2 361 ? 2
340 : ((iBidiCls == FX_BIDICLASS_L || iBidiCls == FX_BIDICLASS_S) ? 0 362 : ((iBidiCls == FX_BIDICLASS_L || iBidiCls == FX_BIDICLASS_S) ? 0
341 : 1); 363 : 1);
342 if (iArabicContext != m_iArabicContext && iArabicContext != 1) { 364 if (iArabicContext != m_iArabicContext && iArabicContext != 1) {
343 m_iArabicContext = iArabicContext; 365 m_iArabicContext = iArabicContext;
344 if (m_iCurArabicContext == 1) { 366 if (m_iCurArabicContext == 1) {
345 m_iCurArabicContext = iArabicContext; 367 m_iCurArabicContext = iArabicContext;
346 } 368 }
347 ResetArabicContext(); 369 ResetArabicContext();
348 if (!m_bPagination) { 370 if (!m_bPagination) {
349 CFX_TxtChar* pLastChar = GetLastChar(1, FALSE); 371 CFX_TxtChar* pLastChar = GetLastChar(1, FALSE);
350 if (pLastChar && pLastChar->m_dwStatus < 1) { 372 if (pLastChar && pLastChar->m_dwStatus < 1) {
351 pLastChar->m_dwStatus = FX_TXTBREAK_PieceBreak; 373 pLastChar->m_dwStatus = FX_TXTBREAK_PieceBreak;
352 } 374 }
353 } 375 }
354 } 376 }
355 } 377 }
356 pCurChar->m_dwCharStyles = m_dwContextCharStyles; 378 pCurChar->m_dwCharStyles = m_dwContextCharStyles;
357 } 379 }
380
358 uint32_t CFX_TxtBreak::AppendChar_Combination(CFX_TxtChar* pCurChar, 381 uint32_t CFX_TxtBreak::AppendChar_Combination(CFX_TxtChar* pCurChar,
359 int32_t iRotation) { 382 int32_t iRotation) {
360 FX_WCHAR wch = pCurChar->m_wCharCode; 383 FX_WCHAR wch = pCurChar->m_wCharCode;
361 FX_WCHAR wForm; 384 FX_WCHAR wForm;
362 int32_t iCharWidth = 0; 385 int32_t iCharWidth = 0;
363 pCurChar->m_iCharWidth = -1; 386 pCurChar->m_iCharWidth = -1;
364 if (m_bCombText) { 387 if (m_bCombText) {
365 iCharWidth = m_iCombWidth; 388 iCharWidth = m_iCombWidth;
366 } else { 389 } else {
367 if (m_bVertical != FX_IsOdd(iRotation)) { 390 if (m_bVertical != FX_IsOdd(iRotation)) {
(...skipping 27 matching lines...) Expand all
395 if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) { 418 if (!m_pFont->GetCharWidth(wForm, iCharWidth, FALSE)) {
396 iCharWidth = 0; 419 iCharWidth = 0;
397 } 420 }
398 } 421 }
399 iCharWidth *= m_iFontSize; 422 iCharWidth *= m_iFontSize;
400 iCharWidth = iCharWidth * m_iHorScale / 100; 423 iCharWidth = iCharWidth * m_iHorScale / 100;
401 } 424 }
402 pCurChar->m_iCharWidth = -iCharWidth; 425 pCurChar->m_iCharWidth = -iCharWidth;
403 return FX_TXTBREAK_None; 426 return FX_TXTBREAK_None;
404 } 427 }
428
405 uint32_t CFX_TxtBreak::AppendChar_Tab(CFX_TxtChar* pCurChar, 429 uint32_t CFX_TxtBreak::AppendChar_Tab(CFX_TxtChar* pCurChar,
406 int32_t iRotation) { 430 int32_t iRotation) {
407 m_eCharType = FX_CHARTYPE_Tab; 431 m_eCharType = FX_CHARTYPE_Tab;
408 if ((m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ExpandTab) == 0) { 432 if ((m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_ExpandTab) == 0) {
409 return FX_TXTBREAK_None; 433 return FX_TXTBREAK_None;
410 } 434 }
411 int32_t& iLineWidth = m_pCurLine->m_iWidth; 435 int32_t& iLineWidth = m_pCurLine->m_iWidth;
412 int32_t iCharWidth; 436 int32_t iCharWidth;
413 if (m_bCombText) { 437 if (m_bCombText) {
414 iCharWidth = m_iCombWidth; 438 iCharWidth = m_iCombWidth;
415 } else { 439 } else {
416 if (m_bEquidistant) { 440 if (m_bEquidistant) {
417 iCharWidth = iLineWidth; 441 iCharWidth = iLineWidth;
418 iCharWidth = m_iTabWidth * (iCharWidth / m_iTabWidth + 1) - iCharWidth; 442 iCharWidth = m_iTabWidth * (iCharWidth / m_iTabWidth + 1) - iCharWidth;
419 if (iCharWidth < FX_TXTBREAK_MinimumTabWidth) { 443 if (iCharWidth < FX_TXTBREAK_MinimumTabWidth) {
420 iCharWidth += m_iTabWidth; 444 iCharWidth += m_iTabWidth;
421 } 445 }
422 } else { 446 } else {
423 iCharWidth = m_iTabWidth; 447 iCharWidth = m_iTabWidth;
424 } 448 }
425 } 449 }
426 pCurChar->m_iCharWidth = iCharWidth; 450 pCurChar->m_iCharWidth = iCharWidth;
427 iLineWidth += iCharWidth; 451 iLineWidth += iCharWidth;
428 if (!m_bSingleLine && iLineWidth >= m_iLineWidth + m_iTolerance) { 452 if (!m_bSingleLine && iLineWidth >= m_iLineWidth + m_iTolerance) {
429 return EndBreak(FX_TXTBREAK_LineBreak); 453 return EndBreak(FX_TXTBREAK_LineBreak);
430 } 454 }
431 return FX_TXTBREAK_None; 455 return FX_TXTBREAK_None;
432 } 456 }
457
433 uint32_t CFX_TxtBreak::AppendChar_Control(CFX_TxtChar* pCurChar, 458 uint32_t CFX_TxtBreak::AppendChar_Control(CFX_TxtChar* pCurChar,
434 int32_t iRotation) { 459 int32_t iRotation) {
435 m_eCharType = FX_CHARTYPE_Control; 460 m_eCharType = FX_CHARTYPE_Control;
436 uint32_t dwRet = FX_TXTBREAK_None; 461 uint32_t dwRet = FX_TXTBREAK_None;
437 if (!m_bSingleLine) { 462 if (!m_bSingleLine) {
438 FX_WCHAR wch = pCurChar->m_wCharCode; 463 FX_WCHAR wch = pCurChar->m_wCharCode;
439 switch (wch) { 464 switch (wch) {
440 case L'\v': 465 case L'\v':
441 case 0x2028: 466 case 0x2028:
442 dwRet = FX_TXTBREAK_LineBreak; 467 dwRet = FX_TXTBREAK_LineBreak;
443 break; 468 break;
444 case L'\f': 469 case L'\f':
445 dwRet = FX_TXTBREAK_PageBreak; 470 dwRet = FX_TXTBREAK_PageBreak;
446 break; 471 break;
447 case 0x2029: 472 case 0x2029:
448 dwRet = FX_TXTBREAK_ParagraphBreak; 473 dwRet = FX_TXTBREAK_ParagraphBreak;
449 break; 474 break;
450 default: 475 default:
451 if (wch == m_wParagBreakChar) { 476 if (wch == m_wParagBreakChar) {
452 dwRet = FX_TXTBREAK_ParagraphBreak; 477 dwRet = FX_TXTBREAK_ParagraphBreak;
453 } 478 }
454 break; 479 break;
455 } 480 }
456 if (dwRet != FX_TXTBREAK_None) { 481 if (dwRet != FX_TXTBREAK_None) {
457 dwRet = EndBreak(dwRet); 482 dwRet = EndBreak(dwRet);
458 } 483 }
459 } 484 }
460 return dwRet; 485 return dwRet;
461 } 486 }
487
462 uint32_t CFX_TxtBreak::AppendChar_Arabic(CFX_TxtChar* pCurChar, 488 uint32_t CFX_TxtBreak::AppendChar_Arabic(CFX_TxtChar* pCurChar,
463 int32_t iRotation) { 489 int32_t iRotation) {
464 FX_CHARTYPE chartype = pCurChar->GetCharType(); 490 FX_CHARTYPE chartype = pCurChar->GetCharType();
465 int32_t& iLineWidth = m_pCurLine->m_iWidth; 491 int32_t& iLineWidth = m_pCurLine->m_iWidth;
466 FX_WCHAR wForm; 492 FX_WCHAR wForm;
467 int32_t iCharWidth = 0; 493 int32_t iCharWidth = 0;
468 CFX_Char* pLastChar = nullptr; 494 CFX_Char* pLastChar = nullptr;
469 FX_BOOL bAlef = FALSE; 495 FX_BOOL bAlef = FALSE;
470 if (!m_bCombText && m_eCharType >= FX_CHARTYPE_ArabicAlef && 496 if (!m_bCombText && m_eCharType >= FX_CHARTYPE_ArabicAlef &&
471 m_eCharType <= FX_CHARTYPE_ArabicDistortion) { 497 m_eCharType <= FX_CHARTYPE_ArabicDistortion) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 iCharWidth = iCharWidth * m_iHorScale / 100; 542 iCharWidth = iCharWidth * m_iHorScale / 100;
517 } 543 }
518 pCurChar->m_iCharWidth = iCharWidth; 544 pCurChar->m_iCharWidth = iCharWidth;
519 iLineWidth += iCharWidth; 545 iLineWidth += iCharWidth;
520 m_pCurLine->m_iArabicChars++; 546 m_pCurLine->m_iArabicChars++;
521 if (!m_bSingleLine && iLineWidth > m_iLineWidth + m_iTolerance) { 547 if (!m_bSingleLine && iLineWidth > m_iLineWidth + m_iTolerance) {
522 return EndBreak(FX_TXTBREAK_LineBreak); 548 return EndBreak(FX_TXTBREAK_LineBreak);
523 } 549 }
524 return FX_TXTBREAK_None; 550 return FX_TXTBREAK_None;
525 } 551 }
552
526 uint32_t CFX_TxtBreak::AppendChar_Others(CFX_TxtChar* pCurChar, 553 uint32_t CFX_TxtBreak::AppendChar_Others(CFX_TxtChar* pCurChar,
527 int32_t iRotation) { 554 int32_t iRotation) {
528 uint32_t dwProps = pCurChar->m_dwCharProps; 555 uint32_t dwProps = pCurChar->m_dwCharProps;
529 FX_CHARTYPE chartype = pCurChar->GetCharType(); 556 FX_CHARTYPE chartype = pCurChar->GetCharType();
530 int32_t& iLineWidth = m_pCurLine->m_iWidth; 557 int32_t& iLineWidth = m_pCurLine->m_iWidth;
531 int32_t iCharWidth = 0; 558 int32_t iCharWidth = 0;
532 m_eCharType = chartype; 559 m_eCharType = chartype;
533 FX_WCHAR wch = pCurChar->m_wCharCode; 560 FX_WCHAR wch = pCurChar->m_wCharCode;
534 FX_WCHAR wForm = wch; 561 FX_WCHAR wForm = wch;
535 if (chartype == FX_CHARTYPE_Numeric) { 562 if (chartype == FX_CHARTYPE_Numeric) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 } 628 }
602 int32_t iRotation = m_iRotation; 629 int32_t iRotation = m_iRotation;
603 if (m_bVertical && (dwProps & 0x8000) != 0) { 630 if (m_bVertical && (dwProps & 0x8000) != 0) {
604 iRotation = (iRotation + 1) % 4; 631 iRotation = (iRotation + 1) % 4;
605 } 632 }
606 uint32_t dwRet2 = 633 uint32_t dwRet2 =
607 (this->*g_FX_TxtBreak_lpfAppendChar[chartype >> FX_CHARTYPEBITS])( 634 (this->*g_FX_TxtBreak_lpfAppendChar[chartype >> FX_CHARTYPEBITS])(
608 pCurChar, iRotation); 635 pCurChar, iRotation);
609 return std::max(dwRet1, dwRet2); 636 return std::max(dwRet1, dwRet2);
610 } 637 }
638
611 void CFX_TxtBreak::EndBreak_UpdateArabicShapes() { 639 void CFX_TxtBreak::EndBreak_UpdateArabicShapes() {
612 ASSERT(m_bArabicShapes); 640 ASSERT(m_bArabicShapes);
613 int32_t iCount = m_pCurLine->CountChars(); 641 int32_t iCount = m_pCurLine->CountChars();
614 if (iCount < 2) { 642 if (iCount < 2) {
615 return; 643 return;
616 } 644 }
617 int32_t& iLineWidth = m_pCurLine->m_iWidth; 645 int32_t& iLineWidth = m_pCurLine->m_iWidth;
618 CFX_Char *pCur, *pNext; 646 CFX_Char *pCur, *pNext;
619 pCur = m_pCurLine->GetCharPtr(0); 647 pCur = m_pCurLine->GetCharPtr(0);
620 FX_BOOL bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; 648 FX_BOOL bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 iCharWidth = iCharWidth * m_iHorScale / 100; 680 iCharWidth = iCharWidth * m_iHorScale / 100;
653 } 681 }
654 pCur->m_iCharWidth = iCharWidth; 682 pCur->m_iCharWidth = iCharWidth;
655 iLineWidth += iCharWidth; 683 iLineWidth += iCharWidth;
656 } 684 }
657 } 685 }
658 bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0; 686 bPrevNum = (pCur->m_dwCharStyles & FX_TXTCHARSTYLE_ArabicIndic) != 0;
659 pCur = pNext; 687 pCur = pNext;
660 } while (i < iCount); 688 } while (i < iCount);
661 } 689 }
690
662 FX_BOOL CFX_TxtBreak::EndBreak_SplitLine(CFX_TxtLine* pNextLine, 691 FX_BOOL CFX_TxtBreak::EndBreak_SplitLine(CFX_TxtLine* pNextLine,
663 FX_BOOL bAllChars, 692 FX_BOOL bAllChars,
664 uint32_t dwStatus) { 693 uint32_t dwStatus) {
665 int32_t iCount = m_pCurLine->CountChars(); 694 int32_t iCount = m_pCurLine->CountChars();
666 FX_BOOL bDone = FALSE; 695 FX_BOOL bDone = FALSE;
667 CFX_Char* pTC; 696 CFX_Char* pTC;
668 if (!m_bSingleLine && m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance) { 697 if (!m_bSingleLine && m_pCurLine->m_iWidth > m_iLineWidth + m_iTolerance) {
669 pTC = m_pCurLine->GetCharPtr(iCount - 1); 698 pTC = m_pCurLine->GetCharPtr(iCount - 1);
670 switch (pTC->GetCharType()) { 699 switch (pTC->GetCharType()) {
671 case FX_CHARTYPE_Tab: 700 case FX_CHARTYPE_Tab:
672 case FX_CHARTYPE_Control: 701 case FX_CHARTYPE_Control:
673 break; 702 break;
674 case FX_CHARTYPE_Space: 703 case FX_CHARTYPE_Space:
675 if ((m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0) { 704 if ((m_dwPolicies & FX_TXTBREAKPOLICY_SpaceBreak) != 0) {
676 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); 705 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars);
677 bDone = TRUE; 706 bDone = TRUE;
678 } 707 }
679 break; 708 break;
680 default: 709 default:
681 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); 710 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars);
682 bDone = TRUE; 711 bDone = TRUE;
683 break; 712 break;
684 } 713 }
685 } 714 }
686 iCount = m_pCurLine->CountChars(); 715 iCount = m_pCurLine->CountChars();
687 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; 716 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces.get();
688 CFX_TxtPiece tp; 717 CFX_TxtPiece tp;
689 if (m_bPagination) { 718 if (m_bPagination) {
690 tp.m_dwStatus = dwStatus; 719 tp.m_dwStatus = dwStatus;
691 tp.m_iStartPos = m_pCurLine->m_iStart; 720 tp.m_iStartPos = m_pCurLine->m_iStart;
692 tp.m_iWidth = m_pCurLine->m_iWidth; 721 tp.m_iWidth = m_pCurLine->m_iWidth;
693 tp.m_iStartChar = 0; 722 tp.m_iStartChar = 0;
694 tp.m_iChars = iCount; 723 tp.m_iChars = iCount;
695 tp.m_pChars = m_pCurLine->m_pLineChars; 724 tp.m_pChars = m_pCurLine->m_pLineChars.get();
696 tp.m_pUserData = m_pUserData; 725 tp.m_pUserData = m_pUserData;
697 pTC = m_pCurLine->GetCharPtr(0); 726 pTC = m_pCurLine->GetCharPtr(0);
698 tp.m_dwCharStyles = pTC->m_dwCharStyles; 727 tp.m_dwCharStyles = pTC->m_dwCharStyles;
699 tp.m_iHorizontalScale = pTC->m_iHorizontalScale; 728 tp.m_iHorizontalScale = pTC->m_iHorizontalScale;
700 tp.m_iVerticalScale = pTC->m_iVertialScale; 729 tp.m_iVerticalScale = pTC->m_iVertialScale;
701 pCurPieces->Add(tp); 730 pCurPieces->Add(tp);
702 m_pCurLine = pNextLine; 731 m_pCurLine = pNextLine;
703 m_eCharType = FX_CHARTYPE_Unknown; 732 m_eCharType = FX_CHARTYPE_Unknown;
704 return TRUE; 733 return TRUE;
705 } 734 }
706 if (bAllChars && !bDone) { 735 if (bAllChars && !bDone) {
707 int32_t iEndPos = m_pCurLine->m_iWidth; 736 int32_t iEndPos = m_pCurLine->m_iWidth;
708 GetBreakPos(*m_pCurLine->m_pLineChars, iEndPos, bAllChars, TRUE); 737 GetBreakPos(*m_pCurLine->m_pLineChars.get(), iEndPos, bAllChars, TRUE);
709 } 738 }
710 return FALSE; 739 return FALSE;
711 } 740 }
741
712 void CFX_TxtBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) { 742 void CFX_TxtBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) {
713 CFX_TxtPiece tp; 743 CFX_TxtPiece tp;
714 FX_TPO tpo; 744 FX_TPO tpo;
715 CFX_TxtChar* pTC; 745 CFX_TxtChar* pTC;
716 int32_t i, j; 746 int32_t i, j;
717 CFX_TxtCharArray& chars = *m_pCurLine->m_pLineChars; 747 CFX_TxtCharArray& chars = *m_pCurLine->m_pLineChars.get();
718 int32_t iCount = m_pCurLine->CountChars(); 748 int32_t iCount = m_pCurLine->CountChars();
719 FX_BOOL bDone = (m_pCurLine->m_iArabicChars > 0 || m_bCurRTL); 749 FX_BOOL bDone = (m_pCurLine->m_iArabicChars > 0 || m_bCurRTL);
720 if (!m_bPagination && bDone) { 750 if (!m_bPagination && bDone) {
721 int32_t iBidiNum = 0; 751 int32_t iBidiNum = 0;
722 for (i = 0; i < iCount; i++) { 752 for (i = 0; i < iCount; i++) {
723 pTC = chars.GetDataPtr(i); 753 pTC = chars.GetDataPtr(i);
724 pTC->m_iBidiPos = i; 754 pTC->m_iBidiPos = i;
725 if (pTC->GetCharType() != FX_CHARTYPE_Control) { 755 if (pTC->GetCharType() != FX_CHARTYPE_Control) {
726 iBidiNum = i; 756 iBidiNum = i;
727 } 757 }
728 if (i == 0) { 758 if (i == 0) {
729 pTC->m_iBidiLevel = 1; 759 pTC->m_iBidiLevel = 1;
730 } 760 }
731 } 761 }
732 FX_BidiLine(chars, iBidiNum + 1, m_bCurRTL ? 1 : 0); 762 FX_BidiLine(chars, iBidiNum + 1, m_bCurRTL ? 1 : 0);
733 } 763 }
734 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; 764 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces.get();
735 if (!m_bPagination && 765 if (!m_bPagination &&
736 (bDone || (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_MutipleFormat) != 0)) { 766 (bDone || (m_dwLayoutStyles & FX_TXTLAYOUTSTYLE_MutipleFormat) != 0)) {
737 tp.m_dwStatus = FX_TXTBREAK_PieceBreak; 767 tp.m_dwStatus = FX_TXTBREAK_PieceBreak;
738 tp.m_iStartPos = m_pCurLine->m_iStart; 768 tp.m_iStartPos = m_pCurLine->m_iStart;
739 tp.m_pChars = m_pCurLine->m_pLineChars; 769 tp.m_pChars = m_pCurLine->m_pLineChars.get();
740 int32_t iBidiLevel = -1, iCharWidth; 770 int32_t iBidiLevel = -1, iCharWidth;
741 i = 0, j = -1; 771 i = 0, j = -1;
742 while (i < iCount) { 772 while (i < iCount) {
743 pTC = chars.GetDataPtr(i); 773 pTC = chars.GetDataPtr(i);
744 if (iBidiLevel < 0) { 774 if (iBidiLevel < 0) {
745 iBidiLevel = pTC->m_iBidiLevel; 775 iBidiLevel = pTC->m_iBidiLevel;
746 tp.m_iWidth = 0; 776 tp.m_iWidth = 0;
747 tp.m_iBidiLevel = iBidiLevel; 777 tp.m_iBidiLevel = iBidiLevel;
748 tp.m_iBidiPos = pTC->m_iBidiOrder; 778 tp.m_iBidiPos = pTC->m_iBidiOrder;
749 tp.m_dwCharStyles = pTC->m_dwCharStyles; 779 tp.m_dwCharStyles = pTC->m_dwCharStyles;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 } 828 }
799 CFX_TxtPiece& ttp = pCurPieces->GetAt(j); 829 CFX_TxtPiece& ttp = pCurPieces->GetAt(j);
800 ttp.m_dwStatus = dwStatus; 830 ttp.m_dwStatus = dwStatus;
801 } 831 }
802 } else { 832 } else {
803 tp.m_dwStatus = dwStatus; 833 tp.m_dwStatus = dwStatus;
804 tp.m_iStartPos = m_pCurLine->m_iStart; 834 tp.m_iStartPos = m_pCurLine->m_iStart;
805 tp.m_iWidth = m_pCurLine->m_iWidth; 835 tp.m_iWidth = m_pCurLine->m_iWidth;
806 tp.m_iStartChar = 0; 836 tp.m_iStartChar = 0;
807 tp.m_iChars = iCount; 837 tp.m_iChars = iCount;
808 tp.m_pChars = m_pCurLine->m_pLineChars; 838 tp.m_pChars = m_pCurLine->m_pLineChars.get();
809 tp.m_pUserData = m_pUserData; 839 tp.m_pUserData = m_pUserData;
810 pTC = chars.GetDataPtr(0); 840 pTC = chars.GetDataPtr(0);
811 tp.m_dwCharStyles = pTC->m_dwCharStyles; 841 tp.m_dwCharStyles = pTC->m_dwCharStyles;
812 tp.m_iHorizontalScale = pTC->m_iHorizontalScale; 842 tp.m_iHorizontalScale = pTC->m_iHorizontalScale;
813 tp.m_iVerticalScale = pTC->m_iVertialScale; 843 tp.m_iVerticalScale = pTC->m_iVertialScale;
814 pCurPieces->Add(tp); 844 pCurPieces->Add(tp);
815 tpo.index = 0; 845 tpo.index = 0;
816 tpo.pos = 0; 846 tpo.pos = 0;
817 tpos.Add(tpo); 847 tpos.Add(tpo);
818 } 848 }
819 } 849 }
850
820 void CFX_TxtBreak::EndBreak_Alignment(CFX_TPOArray& tpos, 851 void CFX_TxtBreak::EndBreak_Alignment(CFX_TPOArray& tpos,
821 FX_BOOL bAllChars, 852 FX_BOOL bAllChars,
822 uint32_t dwStatus) { 853 uint32_t dwStatus) {
823 int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; 854 int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth;
824 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; 855 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces.get();
825 int32_t i, j, iCount = pCurPieces->GetSize(); 856 int32_t i, j, iCount = pCurPieces->GetSize();
826 FX_BOOL bFind = FALSE; 857 FX_BOOL bFind = FALSE;
827 FX_TPO tpo; 858 FX_TPO tpo;
828 CFX_TxtChar* pTC; 859 CFX_TxtChar* pTC;
829 FX_CHARTYPE chartype; 860 FX_CHARTYPE chartype;
830 for (i = iCount - 1; i > -1; i--) { 861 for (i = iCount - 1; i > -1; i--) {
831 tpo = tpos.GetAt(i); 862 tpo = tpos.GetAt(i);
832 CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index); 863 CFX_TxtPiece& ttp = pCurPieces->GetAt(tpo.index);
833 if (!bFind) { 864 if (!bFind) {
834 iNetWidth = ttp.GetEndPos(); 865 iNetWidth = ttp.GetEndPos();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 iOffset /= 2; 930 iOffset /= 2;
900 } 931 }
901 if (iOffset > 0) { 932 if (iOffset > 0) {
902 for (i = 0; i < iCount; i++) { 933 for (i = 0; i < iCount; i++) {
903 CFX_TxtPiece& ttp = pCurPieces->GetAt(i); 934 CFX_TxtPiece& ttp = pCurPieces->GetAt(i);
904 ttp.m_iStartPos += iOffset; 935 ttp.m_iStartPos += iOffset;
905 } 936 }
906 } 937 }
907 } 938 }
908 } 939 }
940
909 uint32_t CFX_TxtBreak::EndBreak(uint32_t dwStatus) { 941 uint32_t CFX_TxtBreak::EndBreak(uint32_t dwStatus) {
910 ASSERT(dwStatus >= FX_TXTBREAK_PieceBreak && 942 ASSERT(dwStatus >= FX_TXTBREAK_PieceBreak &&
911 dwStatus <= FX_TXTBREAK_PageBreak); 943 dwStatus <= FX_TXTBREAK_PageBreak);
912 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces; 944 CFX_TxtPieceArray* pCurPieces = m_pCurLine->m_pLinePieces.get();
913 int32_t iCount = pCurPieces->GetSize(); 945 int32_t iCount = pCurPieces->GetSize();
914 if (iCount > 0) { 946 if (iCount > 0) {
915 CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); 947 CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount);
916 if (dwStatus > FX_TXTBREAK_PieceBreak) { 948 if (dwStatus > FX_TXTBREAK_PieceBreak) {
917 pLastPiece->m_dwStatus = dwStatus; 949 pLastPiece->m_dwStatus = dwStatus;
918 } else { 950 } else {
919 dwStatus = pLastPiece->m_dwStatus; 951 dwStatus = pLastPiece->m_dwStatus;
920 } 952 }
921 return dwStatus; 953 return dwStatus;
922 } else { 954 } else {
923 CFX_TxtLine* pLastLine = GetTxtLine(TRUE); 955 CFX_TxtLine* pLastLine = GetTxtLine(TRUE);
924 if (pLastLine) { 956 if (pLastLine) {
925 pCurPieces = pLastLine->m_pLinePieces; 957 pCurPieces = pLastLine->m_pLinePieces.get();
926 iCount = pCurPieces->GetSize(); 958 iCount = pCurPieces->GetSize();
927 if (iCount-- > 0) { 959 if (iCount-- > 0) {
928 CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); 960 CFX_TxtPiece* pLastPiece = pCurPieces->GetPtrAt(iCount);
929 if (dwStatus > FX_TXTBREAK_PieceBreak) { 961 if (dwStatus > FX_TXTBREAK_PieceBreak) {
930 pLastPiece->m_dwStatus = dwStatus; 962 pLastPiece->m_dwStatus = dwStatus;
931 } else { 963 } else {
932 dwStatus = pLastPiece->m_dwStatus; 964 dwStatus = pLastPiece->m_dwStatus;
933 } 965 }
934 return dwStatus; 966 return dwStatus;
935 } 967 }
936 return FX_TXTBREAK_None; 968 return FX_TXTBREAK_None;
937 } 969 }
938 iCount = m_pCurLine->CountChars(); 970 iCount = m_pCurLine->CountChars();
939 if (iCount < 1) { 971 if (iCount < 1) {
940 return FX_TXTBREAK_None; 972 return FX_TXTBREAK_None;
941 } 973 }
942 if (!m_bPagination) { 974 if (!m_bPagination) {
943 CFX_TxtChar* pTC = m_pCurLine->GetCharPtr(iCount - 1); 975 CFX_TxtChar* pTC = m_pCurLine->GetCharPtr(iCount - 1);
944 pTC->m_dwStatus = dwStatus; 976 pTC->m_dwStatus = dwStatus;
945 } 977 }
946 if (dwStatus <= FX_TXTBREAK_PieceBreak) { 978 if (dwStatus <= FX_TXTBREAK_PieceBreak) {
947 return dwStatus; 979 return dwStatus;
948 } 980 }
949 } 981 }
950 m_iReady = (m_pCurLine == m_pTxtLine1) ? 1 : 2; 982 m_iReady = (m_pCurLine == m_pTxtLine1.get()) ? 1 : 2;
951 CFX_TxtLine* pNextLine = 983 CFX_TxtLine* pNextLine =
952 (m_pCurLine == m_pTxtLine1) ? m_pTxtLine2 : m_pTxtLine1; 984 (m_pCurLine == m_pTxtLine1.get()) ? m_pTxtLine2.get() : m_pTxtLine1.get();
953 FX_BOOL bAllChars = (m_iCurAlignment > FX_TXTLINEALIGNMENT_Right); 985 FX_BOOL bAllChars = (m_iCurAlignment > FX_TXTLINEALIGNMENT_Right);
954 CFX_TPOArray tpos(100); 986 CFX_TPOArray tpos(100);
955 CFX_Char* pTC; 987 CFX_Char* pTC;
956 if (m_bArabicShapes) { 988 if (m_bArabicShapes) {
957 EndBreak_UpdateArabicShapes(); 989 EndBreak_UpdateArabicShapes();
958 } 990 }
959 if (EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { 991 if (EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) {
960 goto EndBreak_Ret; 992 goto EndBreak_Ret;
961 } 993 }
962 EndBreak_BidiLine(tpos, dwStatus); 994 EndBreak_BidiLine(tpos, dwStatus);
963 if (!m_bPagination && m_iCurAlignment > FX_TXTLINEALIGNMENT_Left) { 995 if (!m_bPagination && m_iCurAlignment > FX_TXTLINEALIGNMENT_Left) {
964 EndBreak_Alignment(tpos, bAllChars, dwStatus); 996 EndBreak_Alignment(tpos, bAllChars, dwStatus);
965 } 997 }
966 EndBreak_Ret: 998 EndBreak_Ret:
967 m_pCurLine = pNextLine; 999 m_pCurLine = pNextLine;
968 pTC = GetLastChar(0, FALSE); 1000 pTC = GetLastChar(0, FALSE);
969 m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown; 1001 m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown;
970 if (dwStatus == FX_TXTBREAK_ParagraphBreak) { 1002 if (dwStatus == FX_TXTBREAK_ParagraphBreak) {
971 m_iArabicContext = m_iCurArabicContext = 1; 1003 m_iArabicContext = m_iCurArabicContext = 1;
972 ResetArabicContext(); 1004 ResetArabicContext();
973 } 1005 }
974 return dwStatus; 1006 return dwStatus;
975 } 1007 }
1008
976 int32_t CFX_TxtBreak::GetBreakPos(CFX_TxtCharArray& ca, 1009 int32_t CFX_TxtBreak::GetBreakPos(CFX_TxtCharArray& ca,
977 int32_t& iEndPos, 1010 int32_t& iEndPos,
978 FX_BOOL bAllChars, 1011 FX_BOOL bAllChars,
979 FX_BOOL bOnlyBrk) { 1012 FX_BOOL bOnlyBrk) {
980 int32_t iLength = ca.GetSize() - 1; 1013 int32_t iLength = ca.GetSize() - 1;
981 if (iLength < 1) { 1014 if (iLength < 1) {
982 return iLength; 1015 return iLength;
983 } 1016 }
984 int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, 1017 int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1,
985 iLast = -1, iLastPos = -1; 1018 iLast = -1, iLastPos = -1;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 if (iIndirect > -1) { 1095 if (iIndirect > -1) {
1063 iEndPos = iIndirectPos; 1096 iEndPos = iIndirectPos;
1064 return iIndirect; 1097 return iIndirect;
1065 } 1098 }
1066 if (iLast > -1) { 1099 if (iLast > -1) {
1067 iEndPos = iLastPos; 1100 iEndPos = iLastPos;
1068 return iLast; 1101 return iLast;
1069 } 1102 }
1070 return 0; 1103 return 0;
1071 } 1104 }
1105
1072 void CFX_TxtBreak::SplitTextLine(CFX_TxtLine* pCurLine, 1106 void CFX_TxtBreak::SplitTextLine(CFX_TxtLine* pCurLine,
1073 CFX_TxtLine* pNextLine, 1107 CFX_TxtLine* pNextLine,
1074 FX_BOOL bAllChars) { 1108 FX_BOOL bAllChars) {
1075 ASSERT(pCurLine && pNextLine); 1109 ASSERT(pCurLine && pNextLine);
1076 int32_t iCount = pCurLine->CountChars(); 1110 int32_t iCount = pCurLine->CountChars();
1077 if (iCount < 2) { 1111 if (iCount < 2) {
1078 return; 1112 return;
1079 } 1113 }
1080 int32_t iEndPos = pCurLine->m_iWidth; 1114 int32_t iEndPos = pCurLine->m_iWidth;
1081 CFX_TxtCharArray& curChars = *pCurLine->m_pLineChars; 1115 CFX_TxtCharArray& curChars = *pCurLine->m_pLineChars.get();
1082 int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, FALSE); 1116 int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, FALSE);
1083 if (iCharPos < 0) { 1117 if (iCharPos < 0) {
1084 iCharPos = 0; 1118 iCharPos = 0;
1085 } 1119 }
1086 iCharPos++; 1120 iCharPos++;
1087 if (iCharPos >= iCount) { 1121 if (iCharPos >= iCount) {
1088 pNextLine->RemoveAll(TRUE); 1122 pNextLine->RemoveAll(TRUE);
1089 CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1); 1123 CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1);
1090 pTC->m_nBreakType = FX_LBT_UNKNOWN; 1124 pTC->m_nBreakType = FX_LBT_UNKNOWN;
1091 return; 1125 return;
1092 } 1126 }
1093 CFX_TxtCharArray& nextChars = *pNextLine->m_pLineChars; 1127 CFX_TxtCharArray& nextChars = *pNextLine->m_pLineChars.get();
1094 int cur_size = curChars.GetSize(); 1128 int cur_size = curChars.GetSize();
1095 nextChars.SetSize(cur_size - iCharPos); 1129 nextChars.SetSize(cur_size - iCharPos);
1096 FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos), 1130 FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos),
1097 (cur_size - iCharPos) * sizeof(CFX_TxtChar)); 1131 (cur_size - iCharPos) * sizeof(CFX_TxtChar));
1098 iCount -= iCharPos; 1132 iCount -= iCharPos;
1099 cur_size = curChars.GetSize(); 1133 cur_size = curChars.GetSize();
1100 curChars.RemoveAt(cur_size - iCount, iCount); 1134 curChars.RemoveAt(cur_size - iCount, iCount);
1101 pCurLine->m_iWidth = iEndPos; 1135 pCurLine->m_iWidth = iEndPos;
1102 CFX_TxtChar* pTC = curChars.GetDataPtr(iCharPos - 1); 1136 CFX_TxtChar* pTC = curChars.GetDataPtr(iCharPos - 1);
1103 pTC->m_nBreakType = FX_LBT_UNKNOWN; 1137 pTC->m_nBreakType = FX_LBT_UNKNOWN;
1104 iCount = nextChars.GetSize(); 1138 iCount = nextChars.GetSize();
1105 int32_t iCharWidth, iWidth = 0; 1139 int32_t iCharWidth, iWidth = 0;
1106 for (int32_t i = 0; i < iCount; i++) { 1140 for (int32_t i = 0; i < iCount; i++) {
1107 pTC = nextChars.GetDataPtr(i); 1141 pTC = nextChars.GetDataPtr(i);
1108 if (pTC->GetCharType() >= FX_CHARTYPE_ArabicAlef) { 1142 if (pTC->GetCharType() >= FX_CHARTYPE_ArabicAlef) {
1109 pCurLine->m_iArabicChars--; 1143 pCurLine->m_iArabicChars--;
1110 pNextLine->m_iArabicChars++; 1144 pNextLine->m_iArabicChars++;
1111 } 1145 }
1112 iCharWidth = pTC->m_iCharWidth; 1146 iCharWidth = pTC->m_iCharWidth;
1113 if (iCharWidth > 0) { 1147 if (iCharWidth > 0) {
1114 iWidth += iCharWidth; 1148 iWidth += iCharWidth;
1115 } 1149 }
1116 if (m_bPagination) { 1150 if (m_bPagination) {
1117 continue; 1151 continue;
1118 } 1152 }
1119 pTC->m_dwStatus = 0; 1153 pTC->m_dwStatus = 0;
1120 } 1154 }
1121 pNextLine->m_iWidth = iWidth; 1155 pNextLine->m_iWidth = iWidth;
1122 } 1156 }
1157
1123 int32_t CFX_TxtBreak::CountBreakChars() const { 1158 int32_t CFX_TxtBreak::CountBreakChars() const {
1124 CFX_TxtLine* pTxtLine = GetTxtLine(TRUE); 1159 CFX_TxtLine* pTxtLine = GetTxtLine(TRUE);
1125 return pTxtLine ? pTxtLine->CountChars() : 0; 1160 return pTxtLine ? pTxtLine->CountChars() : 0;
1126 } 1161 }
1162
1127 int32_t CFX_TxtBreak::CountBreakPieces() const { 1163 int32_t CFX_TxtBreak::CountBreakPieces() const {
1128 CFX_TxtPieceArray* pTxtPieces = GetTxtPieces(TRUE); 1164 CFX_TxtPieceArray* pTxtPieces = GetTxtPieces(TRUE);
1129 return pTxtPieces ? pTxtPieces->GetSize() : 0; 1165 return pTxtPieces ? pTxtPieces->GetSize() : 0;
1130 } 1166 }
1167
1131 const CFX_TxtPiece* CFX_TxtBreak::GetBreakPiece(int32_t index) const { 1168 const CFX_TxtPiece* CFX_TxtBreak::GetBreakPiece(int32_t index) const {
1132 CFX_TxtPieceArray* pTxtPieces = GetTxtPieces(TRUE); 1169 CFX_TxtPieceArray* pTxtPieces = GetTxtPieces(TRUE);
1133 if (!pTxtPieces) { 1170 if (!pTxtPieces) {
1134 return nullptr; 1171 return nullptr;
1135 } 1172 }
1136 if (index < 0 || index >= pTxtPieces->GetSize()) { 1173 if (index < 0 || index >= pTxtPieces->GetSize()) {
1137 return nullptr; 1174 return nullptr;
1138 } 1175 }
1139 return pTxtPieces->GetPtrAt(index); 1176 return pTxtPieces->GetPtrAt(index);
1140 } 1177 }
1178
1141 void CFX_TxtBreak::ClearBreakPieces() { 1179 void CFX_TxtBreak::ClearBreakPieces() {
1142 CFX_TxtLine* pTxtLine = GetTxtLine(TRUE); 1180 CFX_TxtLine* pTxtLine = GetTxtLine(TRUE);
1143 if (pTxtLine) { 1181 if (pTxtLine) {
1144 pTxtLine->RemoveAll(TRUE); 1182 pTxtLine->RemoveAll(TRUE);
1145 } 1183 }
1146 m_iReady = 0; 1184 m_iReady = 0;
1147 } 1185 }
1186
1148 void CFX_TxtBreak::Reset() { 1187 void CFX_TxtBreak::Reset() {
1149 m_eCharType = FX_CHARTYPE_Unknown; 1188 m_eCharType = FX_CHARTYPE_Unknown;
1150 m_iArabicContext = m_iCurArabicContext = 1; 1189 m_iArabicContext = m_iCurArabicContext = 1;
1151 ResetArabicContext(); 1190 ResetArabicContext();
1152 m_pTxtLine1->RemoveAll(TRUE); 1191 m_pTxtLine1->RemoveAll(TRUE);
1153 m_pTxtLine2->RemoveAll(TRUE); 1192 m_pTxtLine2->RemoveAll(TRUE);
1154 } 1193 }
1155 1194
1156 struct FX_FORMCHAR { 1195 struct FX_FORMCHAR {
1157 uint16_t wch; 1196 uint16_t wch;
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 pCharPos++; 1580 pCharPos++;
1542 } 1581 }
1543 } 1582 }
1544 if (iWidth > 0) { 1583 if (iWidth > 0) {
1545 wPrev = (FX_WCHAR)formChars[0].wch; 1584 wPrev = (FX_WCHAR)formChars[0].wch;
1546 } 1585 }
1547 wLast = wch; 1586 wLast = wch;
1548 } 1587 }
1549 return iCount; 1588 return iCount;
1550 } 1589 }
1590
1551 int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun, 1591 int32_t CFX_TxtBreak::GetCharRects(const FX_TXTRUN* pTxtRun,
1552 CFX_RectFArray& rtArray, 1592 CFX_RectFArray& rtArray,
1553 FX_BOOL bCharBBox) const { 1593 FX_BOOL bCharBBox) const {
1554 if (!pTxtRun || pTxtRun->iLength < 1) { 1594 if (!pTxtRun || pTxtRun->iLength < 1) {
1555 return 0; 1595 return 0;
1556 } 1596 }
1557 IFX_TxtAccess* pAccess = pTxtRun->pAccess; 1597 IFX_TxtAccess* pAccess = pTxtRun->pAccess;
1558 const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity; 1598 const FDE_TEXTEDITPIECE* pIdentity = pTxtRun->pIdentity;
1559 const FX_WCHAR* pStr = pTxtRun->wsStr.c_str(); 1599 const FX_WCHAR* pStr = pTxtRun->wsStr.c_str();
1560 int32_t* pWidths = pTxtRun->pWidths; 1600 int32_t* pWidths = pTxtRun->pWidths;
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
1688 m_iChars(0), 1728 m_iChars(0),
1689 m_iBidiLevel(0), 1729 m_iBidiLevel(0),
1690 m_iBidiPos(0), 1730 m_iBidiPos(0),
1691 m_iHorizontalScale(100), 1731 m_iHorizontalScale(100),
1692 m_iVerticalScale(100), 1732 m_iVerticalScale(100),
1693 m_dwCharStyles(0), 1733 m_dwCharStyles(0),
1694 m_pChars(nullptr), 1734 m_pChars(nullptr),
1695 m_pUserData(nullptr) {} 1735 m_pUserData(nullptr) {}
1696 1736
1697 CFX_TxtLine::CFX_TxtLine(int32_t iBlockSize) 1737 CFX_TxtLine::CFX_TxtLine(int32_t iBlockSize)
1698 : m_iStart(0), m_iWidth(0), m_iArabicChars(0) { 1738 : m_pLineChars(new CFX_TxtCharArray),
1699 m_pLineChars = new CFX_TxtCharArray; 1739 m_pLinePieces(new CFX_TxtPieceArray(16)),
1700 m_pLinePieces = new CFX_TxtPieceArray(16); 1740 m_iStart(0),
1701 } 1741 m_iWidth(0),
1742 m_iArabicChars(0) {}
1702 1743
1703 CFX_TxtLine::~CFX_TxtLine() { 1744 CFX_TxtLine::~CFX_TxtLine() {
1704 RemoveAll(); 1745 RemoveAll();
1705 delete m_pLineChars;
1706 delete m_pLinePieces;
1707 } 1746 }
OLDNEW
« no previous file with comments | « xfa/fgas/layout/fgas_textbreak.h ('k') | xfa/fwl/basewidget/cfx_barcode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698