OLD | NEW |
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_rtfbreak.h" | 7 #include "xfa/fgas/layout/fgas_rtfbreak.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 10 matching lines...) Expand all Loading... |
21 m_dwLayoutStyles(0), | 21 m_dwLayoutStyles(0), |
22 m_bPagination(false), | 22 m_bPagination(false), |
23 m_bVertical(false), | 23 m_bVertical(false), |
24 m_bSingleLine(false), | 24 m_bSingleLine(false), |
25 m_bCharCode(false), | 25 m_bCharCode(false), |
26 m_pFont(nullptr), | 26 m_pFont(nullptr), |
27 m_iFontHeight(240), | 27 m_iFontHeight(240), |
28 m_iFontSize(240), | 28 m_iFontSize(240), |
29 m_iTabWidth(720000), | 29 m_iTabWidth(720000), |
30 m_PositionedTabs(), | 30 m_PositionedTabs(), |
31 m_bOrphanLine(FALSE), | 31 m_bOrphanLine(false), |
32 m_wDefChar(0xFEFF), | 32 m_wDefChar(0xFEFF), |
33 m_iDefChar(0), | 33 m_iDefChar(0), |
34 m_wLineBreakChar(L'\n'), | 34 m_wLineBreakChar(L'\n'), |
35 m_iHorizontalScale(100), | 35 m_iHorizontalScale(100), |
36 m_iVerticalScale(100), | 36 m_iVerticalScale(100), |
37 m_iLineRotation(0), | 37 m_iLineRotation(0), |
38 m_iCharRotation(0), | 38 m_iCharRotation(0), |
39 m_iRotation(0), | 39 m_iRotation(0), |
40 m_iCharSpace(0), | 40 m_iCharSpace(0), |
41 m_bWordSpace(FALSE), | 41 m_bWordSpace(false), |
42 m_iWordSpace(0), | 42 m_iWordSpace(0), |
43 m_bRTL(FALSE), | 43 m_bRTL(false), |
44 m_iAlignment(FX_RTFLINEALIGNMENT_Left), | 44 m_iAlignment(FX_RTFLINEALIGNMENT_Left), |
45 m_pUserData(nullptr), | 45 m_pUserData(nullptr), |
46 m_eCharType(FX_CHARTYPE_Unknown), | 46 m_eCharType(FX_CHARTYPE_Unknown), |
47 m_dwIdentity(0), | 47 m_dwIdentity(0), |
48 m_RTFLine1(), | 48 m_RTFLine1(), |
49 m_RTFLine2(), | 49 m_RTFLine2(), |
50 m_pCurLine(nullptr), | 50 m_pCurLine(nullptr), |
51 m_iReady(0), | 51 m_iReady(0), |
52 m_iTolerance(0) { | 52 m_iTolerance(0) { |
53 m_pCurLine = &m_RTFLine1; | 53 m_pCurLine = &m_RTFLine1; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 } | 98 } |
99 if (m_pFont == pFont) { | 99 if (m_pFont == pFont) { |
100 return; | 100 return; |
101 } | 101 } |
102 SetBreakStatus(); | 102 SetBreakStatus(); |
103 m_pFont = pFont; | 103 m_pFont = pFont; |
104 m_iDefChar = 0; | 104 m_iDefChar = 0; |
105 if (m_pFont) { | 105 if (m_pFont) { |
106 m_iFontHeight = m_iFontSize; | 106 m_iFontHeight = m_iFontSize; |
107 if (m_wDefChar != 0xFEFF) { | 107 if (m_wDefChar != 0xFEFF) { |
108 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); | 108 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, false); |
109 m_iDefChar *= m_iFontSize; | 109 m_iDefChar *= m_iFontSize; |
110 } | 110 } |
111 } | 111 } |
112 } | 112 } |
113 void CFX_RTFBreak::SetFontSize(FX_FLOAT fFontSize) { | 113 void CFX_RTFBreak::SetFontSize(FX_FLOAT fFontSize) { |
114 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); | 114 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
115 if (m_iFontSize == iFontSize) { | 115 if (m_iFontSize == iFontSize) { |
116 return; | 116 return; |
117 } | 117 } |
118 SetBreakStatus(); | 118 SetBreakStatus(); |
119 m_iFontSize = iFontSize; | 119 m_iFontSize = iFontSize; |
120 m_iDefChar = 0; | 120 m_iDefChar = 0; |
121 if (m_pFont) { | 121 if (m_pFont) { |
122 m_iFontHeight = m_iFontSize; | 122 m_iFontHeight = m_iFontSize; |
123 if (m_wDefChar != 0xFEFF) { | 123 if (m_wDefChar != 0xFEFF) { |
124 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); | 124 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, false); |
125 m_iDefChar *= m_iFontSize; | 125 m_iDefChar *= m_iFontSize; |
126 } | 126 } |
127 } | 127 } |
128 } | 128 } |
129 void CFX_RTFBreak::SetTabWidth(FX_FLOAT fTabWidth) { | 129 void CFX_RTFBreak::SetTabWidth(FX_FLOAT fTabWidth) { |
130 m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f); | 130 m_iTabWidth = FXSYS_round(fTabWidth * 20000.0f); |
131 } | 131 } |
132 void CFX_RTFBreak::AddPositionedTab(FX_FLOAT fTabPos) { | 132 void CFX_RTFBreak::AddPositionedTab(FX_FLOAT fTabPos) { |
133 int32_t iLineEnd = m_iBoundaryEnd; | 133 int32_t iLineEnd = m_iBoundaryEnd; |
134 int32_t iTabPos = FXSYS_round(fTabPos * 20000.0f) + m_iBoundaryStart; | 134 int32_t iTabPos = FXSYS_round(fTabPos * 20000.0f) + m_iBoundaryStart; |
135 if (iTabPos > iLineEnd) { | 135 if (iTabPos > iLineEnd) { |
136 iTabPos = iLineEnd; | 136 iTabPos = iLineEnd; |
137 } | 137 } |
138 if (m_PositionedTabs.Find(iTabPos, 0) > -1) { | 138 if (m_PositionedTabs.Find(iTabPos, 0) > -1) { |
139 return; | 139 return; |
140 } | 140 } |
141 int32_t iCount = m_PositionedTabs.GetSize(); | 141 int32_t iCount = m_PositionedTabs.GetSize(); |
142 int32_t iFind = 0; | 142 int32_t iFind = 0; |
143 for (; iFind < iCount; iFind++) { | 143 for (; iFind < iCount; iFind++) { |
144 if (m_PositionedTabs[iFind] > iTabPos) { | 144 if (m_PositionedTabs[iFind] > iTabPos) { |
145 break; | 145 break; |
146 } | 146 } |
147 } | 147 } |
148 m_PositionedTabs.InsertAt(iFind, iTabPos); | 148 m_PositionedTabs.InsertAt(iFind, iTabPos); |
149 if (m_dwPolicies & FX_RTFBREAKPOLICY_OrphanPositionedTab) { | 149 if (m_dwPolicies & FX_RTFBREAKPOLICY_OrphanPositionedTab) { |
150 m_bOrphanLine = GetLastPositionedTab() >= iLineEnd; | 150 m_bOrphanLine = GetLastPositionedTab() >= iLineEnd; |
151 } else { | 151 } else { |
152 m_bOrphanLine = FALSE; | 152 m_bOrphanLine = false; |
153 } | 153 } |
154 } | 154 } |
155 void CFX_RTFBreak::SetPositionedTabs(const CFX_FloatArray& tabs) { | 155 void CFX_RTFBreak::SetPositionedTabs(const CFX_FloatArray& tabs) { |
156 m_PositionedTabs.RemoveAll(); | 156 m_PositionedTabs.RemoveAll(); |
157 int32_t iCount = tabs.GetSize(); | 157 int32_t iCount = tabs.GetSize(); |
158 m_PositionedTabs.SetSize(iCount); | 158 m_PositionedTabs.SetSize(iCount); |
159 int32_t iLineEnd = m_iBoundaryEnd; | 159 int32_t iLineEnd = m_iBoundaryEnd; |
160 int32_t iTabPos; | 160 int32_t iTabPos; |
161 for (int32_t i = 0; i < iCount; i++) { | 161 for (int32_t i = 0; i < iCount; i++) { |
162 iTabPos = FXSYS_round(tabs[i] * 20000.0f) + m_iBoundaryStart; | 162 iTabPos = FXSYS_round(tabs[i] * 20000.0f) + m_iBoundaryStart; |
163 if (iTabPos > iLineEnd) { | 163 if (iTabPos > iLineEnd) { |
164 iTabPos = iLineEnd; | 164 iTabPos = iLineEnd; |
165 } | 165 } |
166 m_PositionedTabs[i] = iTabPos; | 166 m_PositionedTabs[i] = iTabPos; |
167 } | 167 } |
168 if (m_dwPolicies & FX_RTFBREAKPOLICY_OrphanPositionedTab) { | 168 if (m_dwPolicies & FX_RTFBREAKPOLICY_OrphanPositionedTab) { |
169 m_bOrphanLine = GetLastPositionedTab() >= iLineEnd; | 169 m_bOrphanLine = GetLastPositionedTab() >= iLineEnd; |
170 } else { | 170 } else { |
171 m_bOrphanLine = FALSE; | 171 m_bOrphanLine = false; |
172 } | 172 } |
173 } | 173 } |
174 void CFX_RTFBreak::ClearPositionedTabs() { | 174 void CFX_RTFBreak::ClearPositionedTabs() { |
175 m_PositionedTabs.RemoveAll(); | 175 m_PositionedTabs.RemoveAll(); |
176 m_bOrphanLine = FALSE; | 176 m_bOrphanLine = false; |
177 } | 177 } |
178 void CFX_RTFBreak::SetDefaultChar(FX_WCHAR wch) { | 178 void CFX_RTFBreak::SetDefaultChar(FX_WCHAR wch) { |
179 m_wDefChar = wch; | 179 m_wDefChar = wch; |
180 m_iDefChar = 0; | 180 m_iDefChar = 0; |
181 if (m_wDefChar != 0xFEFF && m_pFont) { | 181 if (m_wDefChar != 0xFEFF && m_pFont) { |
182 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, FALSE); | 182 m_pFont->GetCharWidth(m_wDefChar, m_iDefChar, false); |
183 if (m_iDefChar < 0) { | 183 if (m_iDefChar < 0) { |
184 m_iDefChar = 0; | 184 m_iDefChar = 0; |
185 } else { | 185 } else { |
186 m_iDefChar *= m_iFontSize; | 186 m_iDefChar *= m_iFontSize; |
187 } | 187 } |
188 } | 188 } |
189 } | 189 } |
190 void CFX_RTFBreak::SetLineBreakChar(FX_WCHAR wch) { | 190 void CFX_RTFBreak::SetLineBreakChar(FX_WCHAR wch) { |
191 if (wch != L'\r' && wch != L'\n') { | 191 if (wch != L'\r' && wch != L'\n') { |
192 return; | 192 return; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 return; | 226 return; |
227 } | 227 } |
228 SetBreakStatus(); | 228 SetBreakStatus(); |
229 m_iCharRotation = iCharRotation; | 229 m_iCharRotation = iCharRotation; |
230 m_iRotation = m_iLineRotation + m_iCharRotation; | 230 m_iRotation = m_iLineRotation + m_iCharRotation; |
231 m_iRotation %= 4; | 231 m_iRotation %= 4; |
232 } | 232 } |
233 void CFX_RTFBreak::SetCharSpace(FX_FLOAT fCharSpace) { | 233 void CFX_RTFBreak::SetCharSpace(FX_FLOAT fCharSpace) { |
234 m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); | 234 m_iCharSpace = FXSYS_round(fCharSpace * 20000.0f); |
235 } | 235 } |
236 void CFX_RTFBreak::SetWordSpace(FX_BOOL bDefault, FX_FLOAT fWordSpace) { | 236 void CFX_RTFBreak::SetWordSpace(bool bDefault, FX_FLOAT fWordSpace) { |
237 m_bWordSpace = !bDefault; | 237 m_bWordSpace = !bDefault; |
238 m_iWordSpace = FXSYS_round(fWordSpace * 20000.0f); | 238 m_iWordSpace = FXSYS_round(fWordSpace * 20000.0f); |
239 } | 239 } |
240 void CFX_RTFBreak::SetReadingOrder(FX_BOOL bRTL) { | 240 void CFX_RTFBreak::SetReadingOrder(bool bRTL) { |
241 m_bRTL = bRTL; | 241 m_bRTL = bRTL; |
242 } | 242 } |
243 void CFX_RTFBreak::SetAlignment(int32_t iAlignment) { | 243 void CFX_RTFBreak::SetAlignment(int32_t iAlignment) { |
244 ASSERT(iAlignment >= FX_RTFLINEALIGNMENT_Left && | 244 ASSERT(iAlignment >= FX_RTFLINEALIGNMENT_Left && |
245 iAlignment <= FX_RTFLINEALIGNMENT_Distributed); | 245 iAlignment <= FX_RTFLINEALIGNMENT_Distributed); |
246 m_iAlignment = iAlignment; | 246 m_iAlignment = iAlignment; |
247 } | 247 } |
248 void CFX_RTFBreak::SetUserData(IFX_Retainable* pUserData) { | 248 void CFX_RTFBreak::SetUserData(IFX_Retainable* pUserData) { |
249 if (m_pUserData == pUserData) { | 249 if (m_pUserData == pUserData) { |
250 return; | 250 return; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 pTC = tca.GetDataPtr(iStart--); | 285 pTC = tca.GetDataPtr(iStart--); |
286 if (pTC->m_iCharWidth >= 0 || | 286 if (pTC->m_iCharWidth >= 0 || |
287 pTC->GetCharType() != FX_CHARTYPE_Combination) { | 287 pTC->GetCharType() != FX_CHARTYPE_Combination) { |
288 if (--index < 0) { | 288 if (--index < 0) { |
289 return pTC; | 289 return pTC; |
290 } | 290 } |
291 } | 291 } |
292 } | 292 } |
293 return nullptr; | 293 return nullptr; |
294 } | 294 } |
295 CFX_RTFLine* CFX_RTFBreak::GetRTFLine(FX_BOOL bReady) const { | 295 CFX_RTFLine* CFX_RTFBreak::GetRTFLine(bool bReady) const { |
296 if (bReady) { | 296 if (bReady) { |
297 if (m_iReady == 1) { | 297 if (m_iReady == 1) { |
298 return (CFX_RTFLine*)&m_RTFLine1; | 298 return (CFX_RTFLine*)&m_RTFLine1; |
299 } else if (m_iReady == 2) { | 299 } else if (m_iReady == 2) { |
300 return (CFX_RTFLine*)&m_RTFLine2; | 300 return (CFX_RTFLine*)&m_RTFLine2; |
301 } else { | 301 } else { |
302 return nullptr; | 302 return nullptr; |
303 } | 303 } |
304 } | 304 } |
305 ASSERT(m_pCurLine); | 305 ASSERT(m_pCurLine); |
306 return m_pCurLine; | 306 return m_pCurLine; |
307 } | 307 } |
308 CFX_RTFPieceArray* CFX_RTFBreak::GetRTFPieces(FX_BOOL bReady) const { | 308 CFX_RTFPieceArray* CFX_RTFBreak::GetRTFPieces(bool bReady) const { |
309 CFX_RTFLine* pRTFLine = GetRTFLine(bReady); | 309 CFX_RTFLine* pRTFLine = GetRTFLine(bReady); |
310 return pRTFLine ? &pRTFLine->m_LinePieces : nullptr; | 310 return pRTFLine ? &pRTFLine->m_LinePieces : nullptr; |
311 } | 311 } |
312 inline FX_CHARTYPE CFX_RTFBreak::GetUnifiedCharType( | 312 inline FX_CHARTYPE CFX_RTFBreak::GetUnifiedCharType( |
313 FX_CHARTYPE chartype) const { | 313 FX_CHARTYPE chartype) const { |
314 return chartype >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : chartype; | 314 return chartype >= FX_CHARTYPE_ArabicAlef ? FX_CHARTYPE_Arabic : chartype; |
315 } | 315 } |
316 int32_t CFX_RTFBreak::GetLastPositionedTab() const { | 316 int32_t CFX_RTFBreak::GetLastPositionedTab() const { |
317 int32_t iCount = m_PositionedTabs.GetSize(); | 317 int32_t iCount = m_PositionedTabs.GetSize(); |
318 if (iCount < 1) { | 318 if (iCount < 1) { |
319 return m_iBoundaryStart; | 319 return m_iBoundaryStart; |
320 } | 320 } |
321 return m_PositionedTabs[iCount - 1]; | 321 return m_PositionedTabs[iCount - 1]; |
322 } | 322 } |
323 FX_BOOL CFX_RTFBreak::GetPositionedTab(int32_t& iTabPos) const { | 323 bool CFX_RTFBreak::GetPositionedTab(int32_t& iTabPos) const { |
324 int32_t iCount = m_PositionedTabs.GetSize(); | 324 int32_t iCount = m_PositionedTabs.GetSize(); |
325 for (int32_t i = 0; i < iCount; i++) { | 325 for (int32_t i = 0; i < iCount; i++) { |
326 if (m_PositionedTabs[i] > iTabPos) { | 326 if (m_PositionedTabs[i] > iTabPos) { |
327 iTabPos = m_PositionedTabs[i]; | 327 iTabPos = m_PositionedTabs[i]; |
328 return TRUE; | 328 return true; |
329 } | 329 } |
330 } | 330 } |
331 return FALSE; | 331 return false; |
332 } | 332 } |
333 typedef uint32_t (CFX_RTFBreak::*FX_RTFBreak_LPFAppendChar)( | 333 typedef uint32_t (CFX_RTFBreak::*FX_RTFBreak_LPFAppendChar)( |
334 CFX_RTFChar* pCurChar, | 334 CFX_RTFChar* pCurChar, |
335 int32_t iRotation); | 335 int32_t iRotation); |
336 static const FX_RTFBreak_LPFAppendChar g_FX_RTFBreak_lpfAppendChar[16] = { | 336 static const FX_RTFBreak_LPFAppendChar g_FX_RTFBreak_lpfAppendChar[16] = { |
337 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Tab, | 337 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Tab, |
338 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Control, | 338 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Control, |
339 &CFX_RTFBreak::AppendChar_Combination, &CFX_RTFBreak::AppendChar_Others, | 339 &CFX_RTFBreak::AppendChar_Combination, &CFX_RTFBreak::AppendChar_Others, |
340 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Arabic, | 340 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Arabic, |
341 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, | 341 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 pCurChar->m_iCharWidth = 0; | 413 pCurChar->m_iCharWidth = 0; |
414 pCurChar->m_dwIdentity = m_dwIdentity; | 414 pCurChar->m_dwIdentity = m_dwIdentity; |
415 if (m_pUserData) | 415 if (m_pUserData) |
416 m_pUserData->Retain(); | 416 m_pUserData->Retain(); |
417 | 417 |
418 pCurChar->m_pUserData = m_pUserData; | 418 pCurChar->m_pUserData = m_pUserData; |
419 int32_t iCharWidth = 0; | 419 int32_t iCharWidth = 0; |
420 if (m_bVertical != FX_IsOdd(m_iRotation)) { | 420 if (m_bVertical != FX_IsOdd(m_iRotation)) { |
421 iCharWidth = 1000; | 421 iCharWidth = 1000; |
422 } else { | 422 } else { |
423 if (!m_pFont->GetCharWidth(wch, iCharWidth, TRUE)) { | 423 if (!m_pFont->GetCharWidth(wch, iCharWidth, true)) { |
424 iCharWidth = m_iDefChar; | 424 iCharWidth = m_iDefChar; |
425 } | 425 } |
426 } | 426 } |
427 iCharWidth *= m_iFontSize; | 427 iCharWidth *= m_iFontSize; |
428 iCharWidth = iCharWidth * m_iHorizontalScale / 100; | 428 iCharWidth = iCharWidth * m_iHorizontalScale / 100; |
429 iCharWidth += m_iCharSpace; | 429 iCharWidth += m_iCharSpace; |
430 pCurChar->m_iCharWidth = iCharWidth; | 430 pCurChar->m_iCharWidth = iCharWidth; |
431 m_pCurLine->m_iWidth += iCharWidth; | 431 m_pCurLine->m_iWidth += iCharWidth; |
432 m_eCharType = FX_CHARTYPE_Unknown; | 432 m_eCharType = FX_CHARTYPE_Unknown; |
433 if (!m_bSingleLine && | 433 if (!m_bSingleLine && |
(...skipping 24 matching lines...) Expand all Loading... |
458 } | 458 } |
459 pCurChar->m_iCharWidth = iCharWidth; | 459 pCurChar->m_iCharWidth = iCharWidth; |
460 if (iCharWidth > 0) { | 460 if (iCharWidth > 0) { |
461 m_pCurLine->m_iWidth += iCharWidth; | 461 m_pCurLine->m_iWidth += iCharWidth; |
462 } | 462 } |
463 return FX_RTFBREAK_None; | 463 return FX_RTFBREAK_None; |
464 } | 464 } |
465 uint32_t CFX_RTFBreak::AppendChar_Tab(CFX_RTFChar* pCurChar, | 465 uint32_t CFX_RTFBreak::AppendChar_Tab(CFX_RTFChar* pCurChar, |
466 int32_t iRotation) { | 466 int32_t iRotation) { |
467 if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ExpandTab) { | 467 if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ExpandTab) { |
468 FX_BOOL bBreak = FALSE; | 468 bool bBreak = false; |
469 if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { | 469 if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { |
470 bBreak = (m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance); | 470 bBreak = (m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance); |
471 } | 471 } |
472 int32_t& iLineWidth = m_pCurLine->m_iWidth; | 472 int32_t& iLineWidth = m_pCurLine->m_iWidth; |
473 int32_t iCharWidth = iLineWidth; | 473 int32_t iCharWidth = iLineWidth; |
474 if (GetPositionedTab(iCharWidth)) { | 474 if (GetPositionedTab(iCharWidth)) { |
475 iCharWidth -= iLineWidth; | 475 iCharWidth -= iLineWidth; |
476 } else { | 476 } else { |
477 iCharWidth = m_iTabWidth * (iLineWidth / m_iTabWidth + 1) - iLineWidth; | 477 iCharWidth = m_iTabWidth * (iLineWidth / m_iTabWidth + 1) - iLineWidth; |
478 } | 478 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 } | 511 } |
512 return dwRet2; | 512 return dwRet2; |
513 } | 513 } |
514 | 514 |
515 uint32_t CFX_RTFBreak::AppendChar_Arabic(CFX_RTFChar* pCurChar, | 515 uint32_t CFX_RTFBreak::AppendChar_Arabic(CFX_RTFChar* pCurChar, |
516 int32_t iRotation) { | 516 int32_t iRotation) { |
517 CFX_RTFChar* pLastChar = nullptr; | 517 CFX_RTFChar* pLastChar = nullptr; |
518 int32_t& iLineWidth = m_pCurLine->m_iWidth; | 518 int32_t& iLineWidth = m_pCurLine->m_iWidth; |
519 int32_t iCharWidth = 0; | 519 int32_t iCharWidth = 0; |
520 FX_WCHAR wForm; | 520 FX_WCHAR wForm; |
521 FX_BOOL bAlef = FALSE; | 521 bool bAlef = false; |
522 if (m_eCharType >= FX_CHARTYPE_ArabicAlef && | 522 if (m_eCharType >= FX_CHARTYPE_ArabicAlef && |
523 m_eCharType <= FX_CHARTYPE_ArabicDistortion) { | 523 m_eCharType <= FX_CHARTYPE_ArabicDistortion) { |
524 pLastChar = GetLastChar(1); | 524 pLastChar = GetLastChar(1); |
525 if (pLastChar) { | 525 if (pLastChar) { |
526 iLineWidth -= pLastChar->m_iCharWidth; | 526 iLineWidth -= pLastChar->m_iCharWidth; |
527 CFX_RTFChar* pPrevChar = GetLastChar(2); | 527 CFX_RTFChar* pPrevChar = GetLastChar(2); |
528 wForm = pdfium::arabic::GetFormChar(pLastChar, pPrevChar, pCurChar); | 528 wForm = pdfium::arabic::GetFormChar(pLastChar, pPrevChar, pCurChar); |
529 bAlef = (wForm == 0xFEFF && | 529 bAlef = (wForm == 0xFEFF && |
530 pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef); | 530 pLastChar->GetCharType() == FX_CHARTYPE_ArabicAlef); |
531 int32_t iLastRotation = pLastChar->m_nRotation + m_iLineRotation; | 531 int32_t iLastRotation = pLastChar->m_nRotation + m_iLineRotation; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 int32_t iCount = pCurPieces->GetSize(); | 618 int32_t iCount = pCurPieces->GetSize(); |
619 if (iCount > 0) { | 619 if (iCount > 0) { |
620 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); | 620 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); |
621 if (dwStatus > FX_RTFBREAK_PieceBreak) | 621 if (dwStatus > FX_RTFBREAK_PieceBreak) |
622 pLastPiece->m_dwStatus = dwStatus; | 622 pLastPiece->m_dwStatus = dwStatus; |
623 else | 623 else |
624 dwStatus = pLastPiece->m_dwStatus; | 624 dwStatus = pLastPiece->m_dwStatus; |
625 return dwStatus; | 625 return dwStatus; |
626 } | 626 } |
627 | 627 |
628 CFX_RTFLine* pLastLine = GetRTFLine(TRUE); | 628 CFX_RTFLine* pLastLine = GetRTFLine(true); |
629 if (pLastLine) { | 629 if (pLastLine) { |
630 pCurPieces = &pLastLine->m_LinePieces; | 630 pCurPieces = &pLastLine->m_LinePieces; |
631 iCount = pCurPieces->GetSize(); | 631 iCount = pCurPieces->GetSize(); |
632 if (iCount-- > 0) { | 632 if (iCount-- > 0) { |
633 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); | 633 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); |
634 if (dwStatus > FX_RTFBREAK_PieceBreak) | 634 if (dwStatus > FX_RTFBREAK_PieceBreak) |
635 pLastPiece->m_dwStatus = dwStatus; | 635 pLastPiece->m_dwStatus = dwStatus; |
636 else | 636 else |
637 dwStatus = pLastPiece->m_dwStatus; | 637 dwStatus = pLastPiece->m_dwStatus; |
638 return dwStatus; | 638 return dwStatus; |
639 } | 639 } |
640 return FX_RTFBREAK_None; | 640 return FX_RTFBREAK_None; |
641 } | 641 } |
642 iCount = m_pCurLine->CountChars(); | 642 iCount = m_pCurLine->CountChars(); |
643 if (iCount < 1) | 643 if (iCount < 1) |
644 return FX_RTFBREAK_None; | 644 return FX_RTFBREAK_None; |
645 | 645 |
646 CFX_RTFChar& tc = m_pCurLine->GetChar(iCount - 1); | 646 CFX_RTFChar& tc = m_pCurLine->GetChar(iCount - 1); |
647 tc.m_dwStatus = dwStatus; | 647 tc.m_dwStatus = dwStatus; |
648 if (dwStatus <= FX_RTFBREAK_PieceBreak) | 648 if (dwStatus <= FX_RTFBREAK_PieceBreak) |
649 return dwStatus; | 649 return dwStatus; |
650 | 650 |
651 m_iReady = (m_pCurLine == &m_RTFLine1) ? 1 : 2; | 651 m_iReady = (m_pCurLine == &m_RTFLine1) ? 1 : 2; |
652 CFX_RTFLine* pNextLine = | 652 CFX_RTFLine* pNextLine = |
653 (m_pCurLine == &m_RTFLine1) ? &m_RTFLine2 : &m_RTFLine1; | 653 (m_pCurLine == &m_RTFLine1) ? &m_RTFLine2 : &m_RTFLine1; |
654 FX_BOOL bAllChars = (m_iAlignment > FX_RTFLINEALIGNMENT_Right); | 654 bool bAllChars = (m_iAlignment > FX_RTFLINEALIGNMENT_Right); |
655 CFX_TPOArray tpos(100); | 655 CFX_TPOArray tpos(100); |
656 if (!EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { | 656 if (!EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { |
657 if (!m_bCharCode) | 657 if (!m_bCharCode) |
658 EndBreak_BidiLine(tpos, dwStatus); | 658 EndBreak_BidiLine(tpos, dwStatus); |
659 | 659 |
660 if (!m_bPagination && m_iAlignment > FX_RTFLINEALIGNMENT_Left) | 660 if (!m_bPagination && m_iAlignment > FX_RTFLINEALIGNMENT_Left) |
661 EndBreak_Alignment(tpos, bAllChars, dwStatus); | 661 EndBreak_Alignment(tpos, bAllChars, dwStatus); |
662 } | 662 } |
663 | 663 |
664 m_pCurLine = pNextLine; | 664 m_pCurLine = pNextLine; |
665 m_pCurLine->m_iStart = m_iBoundaryStart; | 665 m_pCurLine->m_iStart = m_iBoundaryStart; |
666 CFX_RTFChar* pTC = GetLastChar(0); | 666 CFX_RTFChar* pTC = GetLastChar(0); |
667 m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown; | 667 m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown; |
668 return dwStatus; | 668 return dwStatus; |
669 } | 669 } |
670 | 670 |
671 FX_BOOL CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine, | 671 bool CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine, |
672 FX_BOOL bAllChars, | 672 bool bAllChars, |
673 uint32_t dwStatus) { | 673 uint32_t dwStatus) { |
674 FX_BOOL bDone = FALSE; | 674 bool bDone = false; |
675 if (!m_bSingleLine && !m_bOrphanLine && | 675 if (!m_bSingleLine && !m_bOrphanLine && |
676 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { | 676 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
677 CFX_RTFChar& tc = m_pCurLine->GetChar(m_pCurLine->CountChars() - 1); | 677 CFX_RTFChar& tc = m_pCurLine->GetChar(m_pCurLine->CountChars() - 1); |
678 switch (tc.GetCharType()) { | 678 switch (tc.GetCharType()) { |
679 case FX_CHARTYPE_Tab: | 679 case FX_CHARTYPE_Tab: |
680 if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { | 680 if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { |
681 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); | 681 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); |
682 bDone = TRUE; | 682 bDone = true; |
683 } | 683 } |
684 break; | 684 break; |
685 case FX_CHARTYPE_Control: | 685 case FX_CHARTYPE_Control: |
686 break; | 686 break; |
687 case FX_CHARTYPE_Space: | 687 case FX_CHARTYPE_Space: |
688 if ((m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0) { | 688 if ((m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0) { |
689 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); | 689 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); |
690 bDone = TRUE; | 690 bDone = true; |
691 } | 691 } |
692 break; | 692 break; |
693 default: | 693 default: |
694 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); | 694 SplitTextLine(m_pCurLine, pNextLine, !m_bPagination && bAllChars); |
695 bDone = TRUE; | 695 bDone = true; |
696 break; | 696 break; |
697 } | 697 } |
698 } | 698 } |
699 if (m_bPagination || m_pCurLine->m_iMBCSChars > 0) { | 699 if (m_bPagination || m_pCurLine->m_iMBCSChars > 0) { |
700 const CFX_RTFChar* pCurChars = m_pCurLine->m_LineChars.GetData(); | 700 const CFX_RTFChar* pCurChars = m_pCurLine->m_LineChars.GetData(); |
701 const CFX_RTFChar* pTC; | 701 const CFX_RTFChar* pTC; |
702 CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; | 702 CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; |
703 CFX_RTFPiece tp; | 703 CFX_RTFPiece tp; |
704 tp.m_pChars = &m_pCurLine->m_LineChars; | 704 tp.m_pChars = &m_pCurLine->m_LineChars; |
705 FX_BOOL bNew = TRUE; | 705 bool bNew = true; |
706 uint32_t dwIdentity = (uint32_t)-1; | 706 uint32_t dwIdentity = (uint32_t)-1; |
707 int32_t iLast = m_pCurLine->CountChars() - 1, j = 0; | 707 int32_t iLast = m_pCurLine->CountChars() - 1, j = 0; |
708 for (int32_t i = 0; i <= iLast;) { | 708 for (int32_t i = 0; i <= iLast;) { |
709 pTC = pCurChars + i; | 709 pTC = pCurChars + i; |
710 if (bNew) { | 710 if (bNew) { |
711 tp.m_iStartChar = i; | 711 tp.m_iStartChar = i; |
712 tp.m_iStartPos += tp.m_iWidth; | 712 tp.m_iStartPos += tp.m_iWidth; |
713 tp.m_iWidth = 0; | 713 tp.m_iWidth = 0; |
714 tp.m_dwStatus = pTC->m_dwStatus; | 714 tp.m_dwStatus = pTC->m_dwStatus; |
715 tp.m_iFontSize = pTC->m_iFontSize; | 715 tp.m_iFontSize = pTC->m_iFontSize; |
716 tp.m_iFontHeight = pTC->m_iFontHeight; | 716 tp.m_iFontHeight = pTC->m_iFontHeight; |
717 tp.m_iHorizontalScale = pTC->m_iHorizontalScale; | 717 tp.m_iHorizontalScale = pTC->m_iHorizontalScale; |
718 tp.m_iVerticalScale = pTC->m_iVertialScale; | 718 tp.m_iVerticalScale = pTC->m_iVertialScale; |
719 tp.m_dwLayoutStyles = pTC->m_dwLayoutStyles; | 719 tp.m_dwLayoutStyles = pTC->m_dwLayoutStyles; |
720 dwIdentity = pTC->m_dwIdentity; | 720 dwIdentity = pTC->m_dwIdentity; |
721 tp.m_dwIdentity = dwIdentity; | 721 tp.m_dwIdentity = dwIdentity; |
722 tp.m_pUserData = pTC->m_pUserData; | 722 tp.m_pUserData = pTC->m_pUserData; |
723 j = i; | 723 j = i; |
724 bNew = FALSE; | 724 bNew = false; |
725 } | 725 } |
726 if (i == iLast || pTC->m_dwStatus != FX_RTFBREAK_None || | 726 if (i == iLast || pTC->m_dwStatus != FX_RTFBREAK_None || |
727 pTC->m_dwIdentity != dwIdentity) { | 727 pTC->m_dwIdentity != dwIdentity) { |
728 tp.m_iChars = i - j; | 728 tp.m_iChars = i - j; |
729 if (pTC->m_dwIdentity == dwIdentity) { | 729 if (pTC->m_dwIdentity == dwIdentity) { |
730 tp.m_dwStatus = pTC->m_dwStatus; | 730 tp.m_dwStatus = pTC->m_dwStatus; |
731 tp.m_iWidth += pTC->m_iCharWidth; | 731 tp.m_iWidth += pTC->m_iCharWidth; |
732 tp.m_iChars += 1; | 732 tp.m_iChars += 1; |
733 i++; | 733 i++; |
734 } | 734 } |
735 pCurPieces->Add(tp); | 735 pCurPieces->Add(tp); |
736 bNew = TRUE; | 736 bNew = true; |
737 } else { | 737 } else { |
738 tp.m_iWidth += pTC->m_iCharWidth; | 738 tp.m_iWidth += pTC->m_iCharWidth; |
739 i++; | 739 i++; |
740 } | 740 } |
741 } | 741 } |
742 return TRUE; | 742 return true; |
743 } | 743 } |
744 if (bAllChars && !bDone) { | 744 if (bAllChars && !bDone) { |
745 int32_t iEndPos = m_pCurLine->GetLineEnd(); | 745 int32_t iEndPos = m_pCurLine->GetLineEnd(); |
746 GetBreakPos(m_pCurLine->m_LineChars, iEndPos, bAllChars, TRUE); | 746 GetBreakPos(m_pCurLine->m_LineChars, iEndPos, bAllChars, true); |
747 } | 747 } |
748 return FALSE; | 748 return false; |
749 } | 749 } |
750 void CFX_RTFBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) { | 750 void CFX_RTFBreak::EndBreak_BidiLine(CFX_TPOArray& tpos, uint32_t dwStatus) { |
751 FX_TPO tpo; | 751 FX_TPO tpo; |
752 CFX_RTFPiece tp; | 752 CFX_RTFPiece tp; |
753 CFX_RTFChar* pTC; | 753 CFX_RTFChar* pTC; |
754 int32_t i, j; | 754 int32_t i, j; |
755 CFX_RTFCharArray& chars = m_pCurLine->m_LineChars; | 755 CFX_RTFCharArray& chars = m_pCurLine->m_LineChars; |
756 int32_t iCount = m_pCurLine->CountChars(); | 756 int32_t iCount = m_pCurLine->CountChars(); |
757 FX_BOOL bDone = (!m_bPagination && !m_bCharCode && | 757 bool bDone = (!m_bPagination && !m_bCharCode && |
758 (m_pCurLine->m_iArabicChars > 0 || m_bRTL)); | 758 (m_pCurLine->m_iArabicChars > 0 || m_bRTL)); |
759 if (bDone) { | 759 if (bDone) { |
760 int32_t iBidiNum = 0; | 760 int32_t iBidiNum = 0; |
761 for (i = 0; i < iCount; i++) { | 761 for (i = 0; i < iCount; i++) { |
762 pTC = chars.GetDataPtr(i); | 762 pTC = chars.GetDataPtr(i); |
763 pTC->m_iBidiPos = i; | 763 pTC->m_iBidiPos = i; |
764 if (pTC->GetCharType() != FX_CHARTYPE_Control) { | 764 if (pTC->GetCharType() != FX_CHARTYPE_Control) { |
765 iBidiNum = i; | 765 iBidiNum = i; |
766 } | 766 } |
767 if (i == 0) { | 767 if (i == 0) { |
768 pTC->m_iBidiLevel = 1; | 768 pTC->m_iBidiLevel = 1; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 int32_t iStartPos = m_pCurLine->m_iStart; | 837 int32_t iStartPos = m_pCurLine->m_iStart; |
838 for (i = 0; i <= j; i++) { | 838 for (i = 0; i <= j; i++) { |
839 tpo = tpos.GetAt(i); | 839 tpo = tpos.GetAt(i); |
840 CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); | 840 CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); |
841 ttp.m_iStartPos = iStartPos; | 841 ttp.m_iStartPos = iStartPos; |
842 iStartPos += ttp.m_iWidth; | 842 iStartPos += ttp.m_iWidth; |
843 } | 843 } |
844 } | 844 } |
845 } | 845 } |
846 void CFX_RTFBreak::EndBreak_Alignment(CFX_TPOArray& tpos, | 846 void CFX_RTFBreak::EndBreak_Alignment(CFX_TPOArray& tpos, |
847 FX_BOOL bAllChars, | 847 bool bAllChars, |
848 uint32_t dwStatus) { | 848 uint32_t dwStatus) { |
849 CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; | 849 CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; |
850 int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; | 850 int32_t iNetWidth = m_pCurLine->m_iWidth, iGapChars = 0, iCharWidth; |
851 int32_t iCount = pCurPieces->GetSize(); | 851 int32_t iCount = pCurPieces->GetSize(); |
852 FX_BOOL bFind = FALSE; | 852 bool bFind = false; |
853 uint32_t dwCharType; | 853 uint32_t dwCharType; |
854 int32_t i, j; | 854 int32_t i, j; |
855 FX_TPO tpo; | 855 FX_TPO tpo; |
856 for (i = iCount - 1; i > -1; i--) { | 856 for (i = iCount - 1; i > -1; i--) { |
857 tpo = tpos.GetAt(i); | 857 tpo = tpos.GetAt(i); |
858 CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); | 858 CFX_RTFPiece& ttp = pCurPieces->GetAt(tpo.index); |
859 if (!bFind) { | 859 if (!bFind) { |
860 iNetWidth = ttp.GetEndPos(); | 860 iNetWidth = ttp.GetEndPos(); |
861 } | 861 } |
862 FX_BOOL bArabic = FX_IsOdd(ttp.m_iBidiLevel); | 862 bool bArabic = FX_IsOdd(ttp.m_iBidiLevel); |
863 j = bArabic ? 0 : ttp.m_iChars - 1; | 863 j = bArabic ? 0 : ttp.m_iChars - 1; |
864 while (j > -1 && j < ttp.m_iChars) { | 864 while (j > -1 && j < ttp.m_iChars) { |
865 const CFX_RTFChar& tc = ttp.GetChar(j); | 865 const CFX_RTFChar& tc = ttp.GetChar(j); |
866 if (tc.m_nBreakType == FX_LBT_DIRECT_BRK) { | 866 if (tc.m_nBreakType == FX_LBT_DIRECT_BRK) { |
867 iGapChars++; | 867 iGapChars++; |
868 } | 868 } |
869 if (!bFind || !bAllChars) { | 869 if (!bFind || !bAllChars) { |
870 dwCharType = tc.GetCharType(); | 870 dwCharType = tc.GetCharType(); |
871 if (dwCharType == FX_CHARTYPE_Space || | 871 if (dwCharType == FX_CHARTYPE_Space || |
872 dwCharType == FX_CHARTYPE_Control) { | 872 dwCharType == FX_CHARTYPE_Control) { |
873 if (!bFind) { | 873 if (!bFind) { |
874 iCharWidth = tc.m_iCharWidth; | 874 iCharWidth = tc.m_iCharWidth; |
875 if (bAllChars && iCharWidth > 0) { | 875 if (bAllChars && iCharWidth > 0) { |
876 iNetWidth -= iCharWidth; | 876 iNetWidth -= iCharWidth; |
877 } | 877 } |
878 } | 878 } |
879 } else { | 879 } else { |
880 bFind = TRUE; | 880 bFind = true; |
881 if (!bAllChars) { | 881 if (!bAllChars) { |
882 break; | 882 break; |
883 } | 883 } |
884 } | 884 } |
885 } | 885 } |
886 j += bArabic ? 1 : -1; | 886 j += bArabic ? 1 : -1; |
887 } | 887 } |
888 if (!bAllChars && bFind) { | 888 if (!bAllChars && bFind) { |
889 break; | 889 break; |
890 } | 890 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
929 for (i = 0; i < iCount; i++) { | 929 for (i = 0; i < iCount; i++) { |
930 CFX_RTFPiece& ttp = pCurPieces->GetAt(i); | 930 CFX_RTFPiece& ttp = pCurPieces->GetAt(i); |
931 ttp.m_iStartPos += iOffset; | 931 ttp.m_iStartPos += iOffset; |
932 } | 932 } |
933 } | 933 } |
934 } | 934 } |
935 } | 935 } |
936 | 936 |
937 int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, | 937 int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, |
938 int32_t& iEndPos, | 938 int32_t& iEndPos, |
939 FX_BOOL bAllChars, | 939 bool bAllChars, |
940 FX_BOOL bOnlyBrk) { | 940 bool bOnlyBrk) { |
941 int32_t iLength = tca.GetSize() - 1; | 941 int32_t iLength = tca.GetSize() - 1; |
942 if (iLength < 1) | 942 if (iLength < 1) |
943 return iLength; | 943 return iLength; |
944 | 944 |
945 int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, | 945 int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, |
946 iLast = -1, iLastPos = -1; | 946 iLast = -1, iLastPos = -1; |
947 if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iBoundaryEnd) { | 947 if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iBoundaryEnd) { |
948 if (!bAllChars || m_bCharCode) | 948 if (!bAllChars || m_bCharCode) |
949 return iLength; | 949 return iLength; |
950 | 950 |
951 iBreak = iLength; | 951 iBreak = iLength; |
952 iBreakPos = iEndPos; | 952 iBreakPos = iEndPos; |
953 } | 953 } |
954 CFX_RTFChar* pCharArray = tca.GetData(); | 954 CFX_RTFChar* pCharArray = tca.GetData(); |
955 if (m_bCharCode) { | 955 if (m_bCharCode) { |
956 const CFX_RTFChar* pChar; | 956 const CFX_RTFChar* pChar; |
957 int32_t iCharWidth; | 957 int32_t iCharWidth; |
958 while (iLength > 0) { | 958 while (iLength > 0) { |
959 if (iEndPos <= m_iBoundaryEnd) | 959 if (iEndPos <= m_iBoundaryEnd) |
960 break; | 960 break; |
961 | 961 |
962 pChar = pCharArray + iLength--; | 962 pChar = pCharArray + iLength--; |
963 iCharWidth = pChar->m_iCharWidth; | 963 iCharWidth = pChar->m_iCharWidth; |
964 if (iCharWidth > 0) | 964 if (iCharWidth > 0) |
965 iEndPos -= iCharWidth; | 965 iEndPos -= iCharWidth; |
966 } | 966 } |
967 return iLength; | 967 return iLength; |
968 } | 968 } |
969 FX_BOOL bSpaceBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0; | 969 bool bSpaceBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0; |
970 FX_BOOL bTabBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0; | 970 bool bTabBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0; |
971 FX_BOOL bNumberBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_NumberBreak) != 0; | 971 bool bNumberBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_NumberBreak) != 0; |
972 FX_BOOL bInfixBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_InfixBreak) != 0; | 972 bool bInfixBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_InfixBreak) != 0; |
973 FX_LINEBREAKTYPE eType; | 973 FX_LINEBREAKTYPE eType; |
974 uint32_t nCodeProp, nCur, nNext; | 974 uint32_t nCodeProp, nCur, nNext; |
975 CFX_RTFChar* pCur = pCharArray + iLength--; | 975 CFX_RTFChar* pCur = pCharArray + iLength--; |
976 if (bAllChars) { | 976 if (bAllChars) { |
977 pCur->m_nBreakType = FX_LBT_UNKNOWN; | 977 pCur->m_nBreakType = FX_LBT_UNKNOWN; |
978 } | 978 } |
979 nCodeProp = pCur->m_dwCharProps; | 979 nCodeProp = pCur->m_dwCharProps; |
980 nNext = nCodeProp & 0x003F; | 980 nNext = nCodeProp & 0x003F; |
981 int32_t iCharWidth = pCur->m_iCharWidth; | 981 int32_t iCharWidth = pCur->m_iCharWidth; |
982 if (iCharWidth > 0) { | 982 if (iCharWidth > 0) { |
983 iEndPos -= iCharWidth; | 983 iEndPos -= iCharWidth; |
984 } | 984 } |
985 while (iLength >= 0) { | 985 while (iLength >= 0) { |
986 pCur = pCharArray + iLength; | 986 pCur = pCharArray + iLength; |
987 nCodeProp = pCur->m_dwCharProps; | 987 nCodeProp = pCur->m_dwCharProps; |
988 nCur = nCodeProp & 0x003F; | 988 nCur = nCodeProp & 0x003F; |
989 FX_BOOL bNeedBreak = FALSE; | 989 bool bNeedBreak = false; |
990 if (nCur == FX_CBP_SP) { | 990 if (nCur == FX_CBP_SP) { |
991 bNeedBreak = !bSpaceBreak; | 991 bNeedBreak = !bSpaceBreak; |
992 if (nNext == FX_CBP_SP) { | 992 if (nNext == FX_CBP_SP) { |
993 eType = bSpaceBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; | 993 eType = bSpaceBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; |
994 } else { | 994 } else { |
995 eType = gs_FX_LineBreak_PairTable[nCur][nNext]; | 995 eType = gs_FX_LineBreak_PairTable[nCur][nNext]; |
996 } | 996 } |
997 } else if (nCur == FX_CBP_TB) { | 997 } else if (nCur == FX_CBP_TB) { |
998 bNeedBreak = !bTabBreak; | 998 bNeedBreak = !bTabBreak; |
999 if (nNext == FX_CBP_TB) { | 999 if (nNext == FX_CBP_TB) { |
1000 eType = bTabBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; | 1000 eType = bTabBreak ? FX_LBT_DIRECT_BRK : FX_LBT_PROHIBITED_BRK; |
1001 } else { | 1001 } else { |
1002 eType = gs_FX_LineBreak_PairTable[nCur][nNext]; | 1002 eType = gs_FX_LineBreak_PairTable[nCur][nNext]; |
1003 } | 1003 } |
1004 } else if ((bNumberBreak && nCur == FX_CBP_NU && nNext == FX_CBP_NU) || | 1004 } else if ((bNumberBreak && nCur == FX_CBP_NU && nNext == FX_CBP_NU) || |
1005 (bInfixBreak && nCur == FX_CBP_IS && nNext == FX_CBP_IS)) { | 1005 (bInfixBreak && nCur == FX_CBP_IS && nNext == FX_CBP_IS)) { |
1006 eType = FX_LBT_DIRECT_BRK; | 1006 eType = FX_LBT_DIRECT_BRK; |
1007 } else { | 1007 } else { |
1008 if (nNext == FX_CBP_SP) { | 1008 if (nNext == FX_CBP_SP) { |
1009 eType = FX_LBT_PROHIBITED_BRK; | 1009 eType = FX_LBT_PROHIBITED_BRK; |
1010 } else { | 1010 } else { |
1011 eType = gs_FX_LineBreak_PairTable[nCur][nNext]; | 1011 eType = gs_FX_LineBreak_PairTable[nCur][nNext]; |
1012 } | 1012 } |
1013 } | 1013 } |
1014 if (bAllChars) { | 1014 if (bAllChars) { |
1015 pCur->m_nBreakType = eType; | 1015 pCur->m_nBreakType = eType; |
1016 } | 1016 } |
1017 if (!bOnlyBrk) { | 1017 if (!bOnlyBrk) { |
1018 iCharWidth = pCur->m_iCharWidth; | 1018 iCharWidth = pCur->m_iCharWidth; |
1019 FX_BOOL bBreak = FALSE; | 1019 bool bBreak = false; |
1020 if (nCur == FX_CBP_TB && bTabBreak) { | 1020 if (nCur == FX_CBP_TB && bTabBreak) { |
1021 bBreak = iCharWidth > 0 && iEndPos - iCharWidth <= m_iBoundaryEnd; | 1021 bBreak = iCharWidth > 0 && iEndPos - iCharWidth <= m_iBoundaryEnd; |
1022 } else { | 1022 } else { |
1023 bBreak = iEndPos <= m_iBoundaryEnd; | 1023 bBreak = iEndPos <= m_iBoundaryEnd; |
1024 } | 1024 } |
1025 if (m_bSingleLine || m_bOrphanLine || bBreak || bNeedBreak) { | 1025 if (m_bSingleLine || m_bOrphanLine || bBreak || bNeedBreak) { |
1026 if (eType == FX_LBT_DIRECT_BRK && iBreak < 0) { | 1026 if (eType == FX_LBT_DIRECT_BRK && iBreak < 0) { |
1027 iBreak = iLength; | 1027 iBreak = iLength; |
1028 iBreakPos = iEndPos; | 1028 iBreakPos = iEndPos; |
1029 if (!bAllChars) { | 1029 if (!bAllChars) { |
(...skipping 28 matching lines...) Expand all Loading... |
1058 } | 1058 } |
1059 if (iLast > -1) { | 1059 if (iLast > -1) { |
1060 iEndPos = iLastPos; | 1060 iEndPos = iLastPos; |
1061 return iLast; | 1061 return iLast; |
1062 } | 1062 } |
1063 return 0; | 1063 return 0; |
1064 } | 1064 } |
1065 | 1065 |
1066 void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine, | 1066 void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine, |
1067 CFX_RTFLine* pNextLine, | 1067 CFX_RTFLine* pNextLine, |
1068 FX_BOOL bAllChars) { | 1068 bool bAllChars) { |
1069 ASSERT(pCurLine && pNextLine); | 1069 ASSERT(pCurLine && pNextLine); |
1070 int32_t iCount = pCurLine->CountChars(); | 1070 int32_t iCount = pCurLine->CountChars(); |
1071 if (iCount < 2) { | 1071 if (iCount < 2) { |
1072 return; | 1072 return; |
1073 } | 1073 } |
1074 int32_t iEndPos = pCurLine->GetLineEnd(); | 1074 int32_t iEndPos = pCurLine->GetLineEnd(); |
1075 CFX_RTFCharArray& curChars = pCurLine->m_LineChars; | 1075 CFX_RTFCharArray& curChars = pCurLine->m_LineChars; |
1076 int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, FALSE); | 1076 int32_t iCharPos = GetBreakPos(curChars, iEndPos, bAllChars, false); |
1077 if (iCharPos < 0) { | 1077 if (iCharPos < 0) { |
1078 iCharPos = 0; | 1078 iCharPos = 0; |
1079 } | 1079 } |
1080 iCharPos++; | 1080 iCharPos++; |
1081 if (iCharPos >= iCount) { | 1081 if (iCharPos >= iCount) { |
1082 pNextLine->RemoveAll(TRUE); | 1082 pNextLine->RemoveAll(true); |
1083 CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1); | 1083 CFX_Char* pTC = curChars.GetDataPtr(iCharPos - 1); |
1084 pTC->m_nBreakType = FX_LBT_UNKNOWN; | 1084 pTC->m_nBreakType = FX_LBT_UNKNOWN; |
1085 return; | 1085 return; |
1086 } | 1086 } |
1087 CFX_RTFCharArray& nextChars = pNextLine->m_LineChars; | 1087 CFX_RTFCharArray& nextChars = pNextLine->m_LineChars; |
1088 int cur_size = curChars.GetSize(); | 1088 int cur_size = curChars.GetSize(); |
1089 nextChars.SetSize(cur_size - iCharPos); | 1089 nextChars.SetSize(cur_size - iCharPos); |
1090 FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos), | 1090 FXSYS_memcpy(nextChars.GetData(), curChars.GetDataPtr(iCharPos), |
1091 (cur_size - iCharPos) * sizeof(CFX_RTFChar)); | 1091 (cur_size - iCharPos) * sizeof(CFX_RTFChar)); |
1092 iCount -= iCharPos; | 1092 iCount -= iCharPos; |
(...skipping 13 matching lines...) Expand all Loading... |
1106 } | 1106 } |
1107 if (tc->m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) { | 1107 if (tc->m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) { |
1108 pCurLine->m_iMBCSChars--; | 1108 pCurLine->m_iMBCSChars--; |
1109 pNextLine->m_iMBCSChars++; | 1109 pNextLine->m_iMBCSChars++; |
1110 } | 1110 } |
1111 tc->m_dwStatus = 0; | 1111 tc->m_dwStatus = 0; |
1112 } | 1112 } |
1113 } | 1113 } |
1114 | 1114 |
1115 int32_t CFX_RTFBreak::CountBreakPieces() const { | 1115 int32_t CFX_RTFBreak::CountBreakPieces() const { |
1116 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); | 1116 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(true); |
1117 return pRTFPieces ? pRTFPieces->GetSize() : 0; | 1117 return pRTFPieces ? pRTFPieces->GetSize() : 0; |
1118 } | 1118 } |
1119 | 1119 |
1120 const CFX_RTFPiece* CFX_RTFBreak::GetBreakPiece(int32_t index) const { | 1120 const CFX_RTFPiece* CFX_RTFBreak::GetBreakPiece(int32_t index) const { |
1121 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); | 1121 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(true); |
1122 if (!pRTFPieces) | 1122 if (!pRTFPieces) |
1123 return nullptr; | 1123 return nullptr; |
1124 | 1124 |
1125 if (index < 0 || index >= pRTFPieces->GetSize()) | 1125 if (index < 0 || index >= pRTFPieces->GetSize()) |
1126 return nullptr; | 1126 return nullptr; |
1127 | 1127 |
1128 return pRTFPieces->GetPtrAt(index); | 1128 return pRTFPieces->GetPtrAt(index); |
1129 } | 1129 } |
1130 | 1130 |
1131 void CFX_RTFBreak::GetLineRect(CFX_RectF& rect) const { | 1131 void CFX_RTFBreak::GetLineRect(CFX_RectF& rect) const { |
1132 rect.top = 0; | 1132 rect.top = 0; |
1133 CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); | 1133 CFX_RTFLine* pRTFLine = GetRTFLine(true); |
1134 if (!pRTFLine) { | 1134 if (!pRTFLine) { |
1135 rect.left = ((FX_FLOAT)m_iBoundaryStart) / 20000.0f; | 1135 rect.left = ((FX_FLOAT)m_iBoundaryStart) / 20000.0f; |
1136 rect.width = rect.height = 0; | 1136 rect.width = rect.height = 0; |
1137 return; | 1137 return; |
1138 } | 1138 } |
1139 rect.left = ((FX_FLOAT)pRTFLine->m_iStart) / 20000.0f; | 1139 rect.left = ((FX_FLOAT)pRTFLine->m_iStart) / 20000.0f; |
1140 rect.width = ((FX_FLOAT)pRTFLine->m_iWidth) / 20000.0f; | 1140 rect.width = ((FX_FLOAT)pRTFLine->m_iWidth) / 20000.0f; |
1141 CFX_RTFPieceArray& rtfPieces = pRTFLine->m_LinePieces; | 1141 CFX_RTFPieceArray& rtfPieces = pRTFLine->m_LinePieces; |
1142 int32_t iCount = rtfPieces.GetSize(); | 1142 int32_t iCount = rtfPieces.GetSize(); |
1143 if (iCount < 1) { | 1143 if (iCount < 1) { |
1144 rect.width = 0; | 1144 rect.width = 0; |
1145 return; | 1145 return; |
1146 } | 1146 } |
1147 CFX_RTFPiece* pBreakPiece; | 1147 CFX_RTFPiece* pBreakPiece; |
1148 int32_t iLineHeight = 0, iMax; | 1148 int32_t iLineHeight = 0, iMax; |
1149 for (int32_t i = 0; i < iCount; i++) { | 1149 for (int32_t i = 0; i < iCount; i++) { |
1150 pBreakPiece = rtfPieces.GetPtrAt(i); | 1150 pBreakPiece = rtfPieces.GetPtrAt(i); |
1151 int32_t iFontHeight = FXSYS_round(pBreakPiece->m_iFontHeight * | 1151 int32_t iFontHeight = FXSYS_round(pBreakPiece->m_iFontHeight * |
1152 pBreakPiece->m_iVerticalScale / 100.0f); | 1152 pBreakPiece->m_iVerticalScale / 100.0f); |
1153 iMax = std::max(pBreakPiece->m_iFontSize, iFontHeight); | 1153 iMax = std::max(pBreakPiece->m_iFontSize, iFontHeight); |
1154 if (i == 0) { | 1154 if (i == 0) { |
1155 iLineHeight = iMax; | 1155 iLineHeight = iMax; |
1156 } else if (iLineHeight < iMax) { | 1156 } else if (iLineHeight < iMax) { |
1157 iLineHeight = iMax; | 1157 iLineHeight = iMax; |
1158 } | 1158 } |
1159 } | 1159 } |
1160 rect.height = ((FX_FLOAT)iLineHeight) / 20.0f; | 1160 rect.height = ((FX_FLOAT)iLineHeight) / 20.0f; |
1161 } | 1161 } |
1162 void CFX_RTFBreak::ClearBreakPieces() { | 1162 void CFX_RTFBreak::ClearBreakPieces() { |
1163 CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); | 1163 CFX_RTFLine* pRTFLine = GetRTFLine(true); |
1164 if (pRTFLine) { | 1164 if (pRTFLine) { |
1165 pRTFLine->RemoveAll(TRUE); | 1165 pRTFLine->RemoveAll(true); |
1166 } | 1166 } |
1167 m_iReady = 0; | 1167 m_iReady = 0; |
1168 } | 1168 } |
1169 void CFX_RTFBreak::Reset() { | 1169 void CFX_RTFBreak::Reset() { |
1170 m_eCharType = FX_CHARTYPE_Unknown; | 1170 m_eCharType = FX_CHARTYPE_Unknown; |
1171 m_RTFLine1.RemoveAll(TRUE); | 1171 m_RTFLine1.RemoveAll(true); |
1172 m_RTFLine2.RemoveAll(TRUE); | 1172 m_RTFLine2.RemoveAll(true); |
1173 } | 1173 } |
1174 int32_t CFX_RTFBreak::GetDisplayPos(const FX_RTFTEXTOBJ* pText, | 1174 int32_t CFX_RTFBreak::GetDisplayPos(const FX_RTFTEXTOBJ* pText, |
1175 FXTEXT_CHARPOS* pCharPos, | 1175 FXTEXT_CHARPOS* pCharPos, |
1176 FX_BOOL bCharCode, | 1176 bool bCharCode, |
1177 CFX_WideString* pWSForms, | 1177 CFX_WideString* pWSForms, |
1178 FX_AdjustCharDisplayPos pAdjustPos) const { | 1178 FX_AdjustCharDisplayPos pAdjustPos) const { |
1179 if (!pText || pText->iLength < 1) { | 1179 if (!pText || pText->iLength < 1) { |
1180 return 0; | 1180 return 0; |
1181 } | 1181 } |
1182 ASSERT(pText->pStr && pText->pWidths && pText->pFont && pText->pRect); | 1182 ASSERT(pText->pStr && pText->pWidths && pText->pFont && pText->pRect); |
1183 const FX_WCHAR* pStr = pText->pStr; | 1183 const FX_WCHAR* pStr = pText->pStr; |
1184 int32_t* pWidths = pText->pWidths; | 1184 int32_t* pWidths = pText->pWidths; |
1185 int32_t iLength = pText->iLength - 1; | 1185 int32_t iLength = pText->iLength - 1; |
1186 CFGAS_GEFont* pFont = pText->pFont; | 1186 CFGAS_GEFont* pFont = pText->pFont; |
1187 uint32_t dwStyles = pText->dwLayoutStyles; | 1187 uint32_t dwStyles = pText->dwLayoutStyles; |
1188 CFX_RectF rtText(*pText->pRect); | 1188 CFX_RectF rtText(*pText->pRect); |
1189 FX_BOOL bRTLPiece = FX_IsOdd(pText->iBidiLevel); | 1189 bool bRTLPiece = FX_IsOdd(pText->iBidiLevel); |
1190 FX_FLOAT fFontSize = pText->fFontSize; | 1190 FX_FLOAT fFontSize = pText->fFontSize; |
1191 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); | 1191 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
1192 int32_t iAscent = pFont->GetAscent(); | 1192 int32_t iAscent = pFont->GetAscent(); |
1193 int32_t iDescent = pFont->GetDescent(); | 1193 int32_t iDescent = pFont->GetDescent(); |
1194 int32_t iMaxHeight = iAscent - iDescent; | 1194 int32_t iMaxHeight = iAscent - iDescent; |
1195 FX_FLOAT fFontHeight = fFontSize; | 1195 FX_FLOAT fFontHeight = fFontSize; |
1196 FX_FLOAT fAscent = fFontHeight * (FX_FLOAT)iAscent / (FX_FLOAT)iMaxHeight; | 1196 FX_FLOAT fAscent = fFontHeight * (FX_FLOAT)iAscent / (FX_FLOAT)iMaxHeight; |
1197 FX_FLOAT fDescent = fFontHeight * (FX_FLOAT)iDescent / (FX_FLOAT)iMaxHeight; | 1197 FX_FLOAT fDescent = fFontHeight * (FX_FLOAT)iDescent / (FX_FLOAT)iMaxHeight; |
1198 FX_BOOL bVerticalDoc = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalLayout) != 0; | 1198 bool bVerticalDoc = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalLayout) != 0; |
1199 FX_BOOL bVerticalChar = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalChars) != 0; | 1199 bool bVerticalChar = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalChars) != 0; |
1200 FX_BOOL bArabicNumber = (dwStyles & FX_RTFLAYOUTSTYLE_ArabicNumber) != 0; | 1200 bool bArabicNumber = (dwStyles & FX_RTFLAYOUTSTYLE_ArabicNumber) != 0; |
1201 FX_BOOL bMBCSCode = (dwStyles & FX_RTFLAYOUTSTYLE_MBCSCode) != 0; | 1201 bool bMBCSCode = (dwStyles & FX_RTFLAYOUTSTYLE_MBCSCode) != 0; |
1202 int32_t iRotation = GetLineRotation(dwStyles) + pText->iCharRotation; | 1202 int32_t iRotation = GetLineRotation(dwStyles) + pText->iCharRotation; |
1203 int32_t iCharRotation; | 1203 int32_t iCharRotation; |
1204 FX_WCHAR wch, wPrev = 0xFEFF, wNext, wForm; | 1204 FX_WCHAR wch, wPrev = 0xFEFF, wNext, wForm; |
1205 int32_t iWidth, iCharWidth, iCharHeight; | 1205 int32_t iWidth, iCharWidth, iCharHeight; |
1206 FX_FLOAT fX, fY, fCharWidth, fCharHeight; | 1206 FX_FLOAT fX, fY, fCharWidth, fCharHeight; |
1207 int32_t iHorScale = pText->iHorizontalScale; | 1207 int32_t iHorScale = pText->iHorizontalScale; |
1208 int32_t iVerScale = pText->iVerticalScale; | 1208 int32_t iVerScale = pText->iVerticalScale; |
1209 FX_BOOL bEmptyChar; | 1209 bool bEmptyChar; |
1210 uint32_t dwProps, dwCharType; | 1210 uint32_t dwProps, dwCharType; |
1211 fX = rtText.left; | 1211 fX = rtText.left; |
1212 fY = rtText.top; | 1212 fY = rtText.top; |
1213 if (bVerticalDoc) { | 1213 if (bVerticalDoc) { |
1214 fX += (rtText.width - fFontSize) / 2.0f; | 1214 fX += (rtText.width - fFontSize) / 2.0f; |
1215 if (bRTLPiece) { | 1215 if (bRTLPiece) { |
1216 fY = rtText.bottom(); | 1216 fY = rtText.bottom(); |
1217 } | 1217 } |
1218 } else { | 1218 } else { |
1219 if (bRTLPiece) { | 1219 if (bRTLPiece) { |
(...skipping 18 matching lines...) Expand all Loading... |
1238 } | 1238 } |
1239 if (iWidth != 0) { | 1239 if (iWidth != 0) { |
1240 iCharWidth = iWidth; | 1240 iCharWidth = iWidth; |
1241 if (iCharWidth < 0) { | 1241 if (iCharWidth < 0) { |
1242 iCharWidth = -iCharWidth; | 1242 iCharWidth = -iCharWidth; |
1243 } | 1243 } |
1244 if (!bMBCSCode) { | 1244 if (!bMBCSCode) { |
1245 bEmptyChar = (dwCharType >= FX_CHARTYPE_Tab && | 1245 bEmptyChar = (dwCharType >= FX_CHARTYPE_Tab && |
1246 dwCharType <= FX_CHARTYPE_Control); | 1246 dwCharType <= FX_CHARTYPE_Control); |
1247 } else { | 1247 } else { |
1248 bEmptyChar = FALSE; | 1248 bEmptyChar = false; |
1249 } | 1249 } |
1250 if (!bEmptyChar) { | 1250 if (!bEmptyChar) { |
1251 iCount++; | 1251 iCount++; |
1252 } | 1252 } |
1253 if (pCharPos) { | 1253 if (pCharPos) { |
1254 iCharWidth /= iFontSize; | 1254 iCharWidth /= iFontSize; |
1255 wForm = wch; | 1255 wForm = wch; |
1256 if (!bMBCSCode) { | 1256 if (!bMBCSCode) { |
1257 if (dwCharType >= FX_CHARTYPE_ArabicAlef) { | 1257 if (dwCharType >= FX_CHARTYPE_ArabicAlef) { |
1258 if (i < iLength) { | 1258 if (i < iLength) { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1305 fCharHeight = fFontSize * iCharHeight / 1000.0f; | 1305 fCharHeight = fFontSize * iCharHeight / 1000.0f; |
1306 if (!bMBCSCode && bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { | 1306 if (!bMBCSCode && bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { |
1307 if (bVerticalDoc) { | 1307 if (bVerticalDoc) { |
1308 fY -= fCharHeight; | 1308 fY -= fCharHeight; |
1309 } else { | 1309 } else { |
1310 fX -= fCharWidth; | 1310 fX -= fCharWidth; |
1311 } | 1311 } |
1312 } | 1312 } |
1313 if (!bEmptyChar) { | 1313 if (!bEmptyChar) { |
1314 CFX_PointF ptOffset; | 1314 CFX_PointF ptOffset; |
1315 FX_BOOL bAdjusted = FALSE; | 1315 bool bAdjusted = false; |
1316 if (pAdjustPos) { | 1316 if (pAdjustPos) { |
1317 bAdjusted = pAdjustPos(wForm, bMBCSCode, pFont, fFontSize, | 1317 bAdjusted = pAdjustPos(wForm, bMBCSCode, pFont, fFontSize, |
1318 bVerticalChar, ptOffset); | 1318 bVerticalChar, ptOffset); |
1319 } | 1319 } |
1320 if (!bAdjusted && bVerticalChar && (dwProps & 0x00010000) != 0) { | 1320 if (!bAdjusted && bVerticalChar && (dwProps & 0x00010000) != 0) { |
1321 CFX_Rect rtBBox; | 1321 CFX_Rect rtBBox; |
1322 rtBBox.Reset(); | 1322 rtBBox.Reset(); |
1323 if (pFont->GetCharBBox(wForm, rtBBox, bMBCSCode)) { | 1323 if (pFont->GetCharBBox(wForm, rtBBox, bMBCSCode)) { |
1324 ptOffset.x = fFontSize * (850 - rtBBox.right()) / 1000.0f; | 1324 ptOffset.x = fFontSize * (850 - rtBBox.right()) / 1000.0f; |
1325 ptOffset.y = fFontSize * (1000 - rtBBox.height) / 2000.0f; | 1325 ptOffset.y = fFontSize * (1000 - rtBBox.height) / 2000.0f; |
1326 } | 1326 } |
1327 } | 1327 } |
1328 pCharPos->m_OriginX = fX + ptOffset.x; | 1328 pCharPos->m_OriginX = fX + ptOffset.x; |
1329 pCharPos->m_OriginY = fY - ptOffset.y; | 1329 pCharPos->m_OriginY = fY - ptOffset.y; |
1330 } | 1330 } |
1331 if (!bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { | 1331 if (!bRTLPiece && dwCharType != FX_CHARTYPE_Combination) { |
1332 if (bVerticalDoc) { | 1332 if (bVerticalDoc) { |
1333 fY += fCharHeight; | 1333 fY += fCharHeight; |
1334 } else { | 1334 } else { |
1335 fX += fCharWidth; | 1335 fX += fCharWidth; |
1336 } | 1336 } |
1337 } | 1337 } |
1338 if (!bEmptyChar) { | 1338 if (!bEmptyChar) { |
1339 pCharPos->m_bGlyphAdjust = TRUE; | 1339 pCharPos->m_bGlyphAdjust = true; |
1340 if (bVerticalDoc) { | 1340 if (bVerticalDoc) { |
1341 if (iCharRotation == 0) { | 1341 if (iCharRotation == 0) { |
1342 pCharPos->m_AdjustMatrix[0] = -1; | 1342 pCharPos->m_AdjustMatrix[0] = -1; |
1343 pCharPos->m_AdjustMatrix[1] = 0; | 1343 pCharPos->m_AdjustMatrix[1] = 0; |
1344 pCharPos->m_AdjustMatrix[2] = 0; | 1344 pCharPos->m_AdjustMatrix[2] = 0; |
1345 pCharPos->m_AdjustMatrix[3] = 1; | 1345 pCharPos->m_AdjustMatrix[3] = 1; |
1346 pCharPos->m_OriginY += fAscent * iVerScale / 100.0f; | 1346 pCharPos->m_OriginY += fAscent * iVerScale / 100.0f; |
1347 } else if (iCharRotation == 1) { | 1347 } else if (iCharRotation == 1) { |
1348 pCharPos->m_AdjustMatrix[0] = 0; | 1348 pCharPos->m_AdjustMatrix[0] = 0; |
1349 pCharPos->m_AdjustMatrix[1] = -1; | 1349 pCharPos->m_AdjustMatrix[1] = -1; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1410 } | 1410 } |
1411 } | 1411 } |
1412 if (iWidth > 0) { | 1412 if (iWidth > 0) { |
1413 wPrev = wch; | 1413 wPrev = wch; |
1414 } | 1414 } |
1415 } | 1415 } |
1416 return iCount; | 1416 return iCount; |
1417 } | 1417 } |
1418 int32_t CFX_RTFBreak::GetCharRects(const FX_RTFTEXTOBJ* pText, | 1418 int32_t CFX_RTFBreak::GetCharRects(const FX_RTFTEXTOBJ* pText, |
1419 CFX_RectFArray& rtArray, | 1419 CFX_RectFArray& rtArray, |
1420 FX_BOOL bCharBBox) const { | 1420 bool bCharBBox) const { |
1421 if (!pText || pText->iLength < 1) { | 1421 if (!pText || pText->iLength < 1) { |
1422 return 0; | 1422 return 0; |
1423 } | 1423 } |
1424 ASSERT(pText->pStr && pText->pWidths && pText->pFont && pText->pRect); | 1424 ASSERT(pText->pStr && pText->pWidths && pText->pFont && pText->pRect); |
1425 const FX_WCHAR* pStr = pText->pStr; | 1425 const FX_WCHAR* pStr = pText->pStr; |
1426 int32_t* pWidths = pText->pWidths; | 1426 int32_t* pWidths = pText->pWidths; |
1427 int32_t iLength = pText->iLength; | 1427 int32_t iLength = pText->iLength; |
1428 CFX_RectF rect(*pText->pRect); | 1428 CFX_RectF rect(*pText->pRect); |
1429 FX_BOOL bRTLPiece = FX_IsOdd(pText->iBidiLevel); | 1429 bool bRTLPiece = FX_IsOdd(pText->iBidiLevel); |
1430 FX_FLOAT fFontSize = pText->fFontSize; | 1430 FX_FLOAT fFontSize = pText->fFontSize; |
1431 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); | 1431 int32_t iFontSize = FXSYS_round(fFontSize * 20.0f); |
1432 FX_FLOAT fScale = fFontSize / 1000.0f; | 1432 FX_FLOAT fScale = fFontSize / 1000.0f; |
1433 CFGAS_GEFont* pFont = pText->pFont; | 1433 CFGAS_GEFont* pFont = pText->pFont; |
1434 if (!pFont) { | 1434 if (!pFont) { |
1435 bCharBBox = FALSE; | 1435 bCharBBox = false; |
1436 } | 1436 } |
1437 CFX_Rect bbox; | 1437 CFX_Rect bbox; |
1438 bbox.Set(0, 0, 0, 0); | 1438 bbox.Set(0, 0, 0, 0); |
1439 if (bCharBBox) { | 1439 if (bCharBBox) { |
1440 bCharBBox = pFont->GetBBox(bbox); | 1440 bCharBBox = pFont->GetBBox(bbox); |
1441 } | 1441 } |
1442 FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale); | 1442 FX_FLOAT fLeft = std::max(0.0f, bbox.left * fScale); |
1443 FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale); | 1443 FX_FLOAT fHeight = FXSYS_fabs(bbox.height * fScale); |
1444 rtArray.RemoveAll(); | 1444 rtArray.RemoveAll(); |
1445 rtArray.SetSize(iLength); | 1445 rtArray.SetSize(iLength); |
1446 uint32_t dwStyles = pText->dwLayoutStyles; | 1446 uint32_t dwStyles = pText->dwLayoutStyles; |
1447 FX_BOOL bVertical = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalLayout) != 0; | 1447 bool bVertical = (dwStyles & FX_RTFLAYOUTSTYLE_VerticalLayout) != 0; |
1448 FX_BOOL bSingleLine = (dwStyles & FX_RTFLAYOUTSTYLE_SingleLine) != 0; | 1448 bool bSingleLine = (dwStyles & FX_RTFLAYOUTSTYLE_SingleLine) != 0; |
1449 FX_BOOL bCombText = (dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; | 1449 bool bCombText = (dwStyles & FX_TXTLAYOUTSTYLE_CombText) != 0; |
1450 FX_WCHAR wch, wLineBreakChar = pText->wLineBreakChar; | 1450 FX_WCHAR wch, wLineBreakChar = pText->wLineBreakChar; |
1451 int32_t iCharSize; | 1451 int32_t iCharSize; |
1452 FX_FLOAT fCharSize, fStart; | 1452 FX_FLOAT fCharSize, fStart; |
1453 if (bVertical) { | 1453 if (bVertical) { |
1454 fStart = bRTLPiece ? rect.bottom() : rect.top; | 1454 fStart = bRTLPiece ? rect.bottom() : rect.top; |
1455 } else { | 1455 } else { |
1456 fStart = bRTLPiece ? rect.right() : rect.left; | 1456 fStart = bRTLPiece ? rect.right() : rect.left; |
1457 } | 1457 } |
1458 for (int32_t i = 0; i < iLength; i++) { | 1458 for (int32_t i = 0; i < iLength; i++) { |
1459 wch = *pStr++; | 1459 wch = *pStr++; |
1460 iCharSize = *pWidths++; | 1460 iCharSize = *pWidths++; |
1461 fCharSize = (FX_FLOAT)iCharSize / 20000.0f; | 1461 fCharSize = (FX_FLOAT)iCharSize / 20000.0f; |
1462 FX_BOOL bRet = (!bSingleLine && FX_IsCtrlCode(wch)); | 1462 bool bRet = (!bSingleLine && FX_IsCtrlCode(wch)); |
1463 if (!(wch == L'\v' || wch == L'\f' || wch == 0x2028 || wch == 0x2029 || | 1463 if (!(wch == L'\v' || wch == L'\f' || wch == 0x2028 || wch == 0x2029 || |
1464 (wLineBreakChar != 0xFEFF && wch == wLineBreakChar))) { | 1464 (wLineBreakChar != 0xFEFF && wch == wLineBreakChar))) { |
1465 bRet = FALSE; | 1465 bRet = false; |
1466 } | 1466 } |
1467 if (bRet) { | 1467 if (bRet) { |
1468 iCharSize = iFontSize * 500; | 1468 iCharSize = iFontSize * 500; |
1469 fCharSize = fFontSize / 2.0f; | 1469 fCharSize = fFontSize / 2.0f; |
1470 } | 1470 } |
1471 if (bVertical) { | 1471 if (bVertical) { |
1472 rect.top = fStart; | 1472 rect.top = fStart; |
1473 if (bRTLPiece) { | 1473 if (bRTLPiece) { |
1474 rect.top -= fCharSize; | 1474 rect.top -= fCharSize; |
1475 fStart -= fCharSize; | 1475 fStart -= fCharSize; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1558 iLength(0), | 1558 iLength(0), |
1559 pFont(nullptr), | 1559 pFont(nullptr), |
1560 fFontSize(12.0f), | 1560 fFontSize(12.0f), |
1561 dwLayoutStyles(0), | 1561 dwLayoutStyles(0), |
1562 iCharRotation(0), | 1562 iCharRotation(0), |
1563 iBidiLevel(0), | 1563 iBidiLevel(0), |
1564 pRect(nullptr), | 1564 pRect(nullptr), |
1565 wLineBreakChar(L'\n'), | 1565 wLineBreakChar(L'\n'), |
1566 iHorizontalScale(100), | 1566 iHorizontalScale(100), |
1567 iVerticalScale(100) {} | 1567 iVerticalScale(100) {} |
OLD | NEW |