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 "../../include/fpdfdoc/fpdf_doc.h" | 7 #include "../../include/fpdfdoc/fpdf_doc.h" |
8 #include "../../include/fpdfdoc/fpdf_vt.h" | 8 #include "../../include/fpdfdoc/fpdf_vt.h" |
9 #include "pdf_vt.h" | 9 #include "pdf_vt.h" |
10 const FX_BYTE gFontSizeSteps[] = {» 4, 6, 8, 9, 10,»12, 14, 18, 20, 25,»
30, 35, 40, 45, 50,» 55, 60, 70, 80, 90,» 100, 110, 120, 130, 144}; | 10 const uint8_t gFontSizeSteps[] = {» 4, 6, 8, 9, 10,»12, 14, 18, 20, 25,»
30, 35, 40, 45, 50,» 55, 60, 70, 80, 90,» 100, 110, 120, 130, 144}; |
11 #define PVT_RETURN_LENGTH 1 | 11 #define PVT_RETURN_LENGTH 1 |
12 #define PVT_DEFAULT_FONTSIZE 18.0f | 12 #define PVT_DEFAULT_FONTSIZE 18.0f |
13 #define PVTWORD_SCRIPT_NORMAL 0 | 13 #define PVTWORD_SCRIPT_NORMAL 0 |
14 #define PVTWORD_SCRIPT_SUPER 1 | 14 #define PVTWORD_SCRIPT_SUPER 1 |
15 #define PVTWORD_SCRIPT_SUB 2 | 15 #define PVTWORD_SCRIPT_SUB 2 |
16 #define PVT_FONTSCALE 0.001f | 16 #define PVT_FONTSCALE 0.001f |
17 #define PVT_PERCENT 0.01f | 17 #define PVT_PERCENT 0.01f |
18 #define PVT_HALF 0.5f | 18 #define PVT_HALF 0.5f |
19 CLine::CLine() | 19 CLine::CLine() |
20 { | 20 { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 { | 55 { |
56 ResetWordArray(); | 56 ResetWordArray(); |
57 ResetLineArray(); | 57 ResetLineArray(); |
58 } | 58 } |
59 void CSection::ResetLineArray() | 59 void CSection::ResetLineArray() |
60 { | 60 { |
61 m_LineArray.RemoveAll(); | 61 m_LineArray.RemoveAll(); |
62 } | 62 } |
63 void CSection::ResetWordArray() | 63 void CSection::ResetWordArray() |
64 { | 64 { |
65 for (FX_INT32 i = 0, sz = m_WordArray.GetSize(); i < sz; i++) { | 65 for (int32_t i = 0, sz = m_WordArray.GetSize(); i < sz; i++) { |
66 delete m_WordArray.GetAt(i); | 66 delete m_WordArray.GetAt(i); |
67 } | 67 } |
68 m_WordArray.RemoveAll(); | 68 m_WordArray.RemoveAll(); |
69 } | 69 } |
70 void CSection::ResetLinePlace() | 70 void CSection::ResetLinePlace() |
71 { | 71 { |
72 for (FX_INT32 i = 0, sz = m_LineArray.GetSize(); i < sz; i++) { | 72 for (int32_t i = 0, sz = m_LineArray.GetSize(); i < sz; i++) { |
73 if (CLine * pLine = m_LineArray.GetAt(i)) { | 73 if (CLine * pLine = m_LineArray.GetAt(i)) { |
74 pLine->LinePlace = CPVT_WordPlace(SecPlace.nSecIndex, i, -1); | 74 pLine->LinePlace = CPVT_WordPlace(SecPlace.nSecIndex, i, -1); |
75 } | 75 } |
76 } | 76 } |
77 } | 77 } |
78 CPVT_WordPlace CSection::AddWord(const CPVT_WordPlace & place, const CPVT_WordIn
fo & wordinfo) | 78 CPVT_WordPlace CSection::AddWord(const CPVT_WordPlace & place, const CPVT_WordIn
fo & wordinfo) |
79 { | 79 { |
80 if (CPVT_WordInfo * pWord = FX_NEW CPVT_WordInfo(wordinfo)) { | 80 if (CPVT_WordInfo * pWord = FX_NEW CPVT_WordInfo(wordinfo)) { |
81 FX_INT32 nWordIndex = FPDF_MAX(FPDF_MIN(place.nWordIndex, this->m_WordAr
ray.GetSize()), 0); | 81 int32_t nWordIndex = FPDF_MAX(FPDF_MIN(place.nWordIndex, this->m_WordArr
ay.GetSize()), 0); |
82 if (nWordIndex == m_WordArray.GetSize()) { | 82 if (nWordIndex == m_WordArray.GetSize()) { |
83 m_WordArray.Add(pWord); | 83 m_WordArray.Add(pWord); |
84 } else { | 84 } else { |
85 m_WordArray.InsertAt(nWordIndex, pWord); | 85 m_WordArray.InsertAt(nWordIndex, pWord); |
86 } | 86 } |
87 } | 87 } |
88 return place; | 88 return place; |
89 } | 89 } |
90 CPVT_WordPlace CSection::AddLine(const CPVT_LineInfo & lineinfo) | 90 CPVT_WordPlace CSection::AddLine(const CPVT_LineInfo & lineinfo) |
91 { | 91 { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 return pNextLine->GetBeginWordPlace(); | 155 return pNextLine->GetBeginWordPlace(); |
156 } | 156 } |
157 } else { | 157 } else { |
158 return pLine->GetNextWordPlace(place); | 158 return pLine->GetNextWordPlace(place); |
159 } | 159 } |
160 } | 160 } |
161 return place; | 161 return place; |
162 } | 162 } |
163 void CSection::UpdateWordPlace(CPVT_WordPlace & place) const | 163 void CSection::UpdateWordPlace(CPVT_WordPlace & place) const |
164 { | 164 { |
165 FX_INT32 nLeft = 0; | 165 int32_t nLeft = 0; |
166 FX_INT32 nRight = m_LineArray.GetSize() - 1; | 166 int32_t nRight = m_LineArray.GetSize() - 1; |
167 FX_INT32 nMid = (nLeft + nRight) / 2; | 167 int32_t nMid = (nLeft + nRight) / 2; |
168 while (nLeft <= nRight) { | 168 while (nLeft <= nRight) { |
169 if (CLine * pLine = m_LineArray.GetAt(nMid)) { | 169 if (CLine * pLine = m_LineArray.GetAt(nMid)) { |
170 if (place.nWordIndex < pLine->m_LineInfo.nBeginWordIndex) { | 170 if (place.nWordIndex < pLine->m_LineInfo.nBeginWordIndex) { |
171 nRight = nMid - 1; | 171 nRight = nMid - 1; |
172 nMid = (nLeft + nRight) / 2; | 172 nMid = (nLeft + nRight) / 2; |
173 } else if (place.nWordIndex > pLine->m_LineInfo.nEndWordIndex) { | 173 } else if (place.nWordIndex > pLine->m_LineInfo.nEndWordIndex) { |
174 nLeft = nMid + 1; | 174 nLeft = nMid + 1; |
175 nMid = (nLeft + nRight) / 2; | 175 nMid = (nLeft + nRight) / 2; |
176 } else { | 176 } else { |
177 place.nLineIndex = nMid; | 177 place.nLineIndex = nMid; |
178 return; | 178 return; |
179 } | 179 } |
180 } else { | 180 } else { |
181 break; | 181 break; |
182 } | 182 } |
183 } | 183 } |
184 } | 184 } |
185 CPVT_WordPlace CSection::SearchWordPlace(const CPDF_Point & point) const | 185 CPVT_WordPlace CSection::SearchWordPlace(const CPDF_Point & point) const |
186 { | 186 { |
187 ASSERT(m_pVT != NULL); | 187 ASSERT(m_pVT != NULL); |
188 CPVT_WordPlace place = GetBeginWordPlace(); | 188 CPVT_WordPlace place = GetBeginWordPlace(); |
189 FX_BOOL bUp = TRUE; | 189 FX_BOOL bUp = TRUE; |
190 FX_BOOL bDown = TRUE; | 190 FX_BOOL bDown = TRUE; |
191 FX_INT32 nLeft = 0; | 191 int32_t nLeft = 0; |
192 FX_INT32 nRight = m_LineArray.GetSize() - 1; | 192 int32_t nRight = m_LineArray.GetSize() - 1; |
193 FX_INT32 nMid = m_LineArray.GetSize() / 2; | 193 int32_t nMid = m_LineArray.GetSize() / 2; |
194 FX_FLOAT fTop = 0; | 194 FX_FLOAT fTop = 0; |
195 FX_FLOAT fBottom = 0; | 195 FX_FLOAT fBottom = 0; |
196 while (nLeft <= nRight) { | 196 while (nLeft <= nRight) { |
197 if (CLine * pLine = m_LineArray.GetAt(nMid)) { | 197 if (CLine * pLine = m_LineArray.GetAt(nMid)) { |
198 fTop = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineAscent - m_
pVT->GetLineLeading(m_SecInfo); | 198 fTop = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineAscent - m_
pVT->GetLineLeading(m_SecInfo); |
199 fBottom = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineDescent; | 199 fBottom = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineDescent; |
200 if (IsFloatBigger(point.y, fTop)) { | 200 if (IsFloatBigger(point.y, fTop)) { |
201 bUp = FALSE; | 201 bUp = FALSE; |
202 } | 202 } |
203 if (IsFloatSmaller(point.y, fBottom)) { | 203 if (IsFloatSmaller(point.y, fBottom)) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 236 } |
237 return GetBeginWordPlace(); | 237 return GetBeginWordPlace(); |
238 } | 238 } |
239 CPVT_WordPlace CSection::SearchWordPlace(FX_FLOAT fx, const CPVT_WordRange & ran
ge) const | 239 CPVT_WordPlace CSection::SearchWordPlace(FX_FLOAT fx, const CPVT_WordRange & ran
ge) const |
240 { | 240 { |
241 CPVT_WordPlace wordplace = range.BeginPos; | 241 CPVT_WordPlace wordplace = range.BeginPos; |
242 wordplace.nWordIndex = -1; | 242 wordplace.nWordIndex = -1; |
243 if (!m_pVT) { | 243 if (!m_pVT) { |
244 return wordplace; | 244 return wordplace; |
245 } | 245 } |
246 FX_INT32 nLeft = range.BeginPos.nWordIndex; | 246 int32_t nLeft = range.BeginPos.nWordIndex; |
247 FX_INT32 nRight = range.EndPos.nWordIndex + 1; | 247 int32_t nRight = range.EndPos.nWordIndex + 1; |
248 FX_INT32 nMid = (nLeft + nRight) / 2; | 248 int32_t nMid = (nLeft + nRight) / 2; |
249 while (nLeft < nRight) { | 249 while (nLeft < nRight) { |
250 if (nMid == nLeft) { | 250 if (nMid == nLeft) { |
251 break; | 251 break; |
252 } | 252 } |
253 if (nMid == nRight) { | 253 if (nMid == nRight) { |
254 nMid--; | 254 nMid--; |
255 break; | 255 break; |
256 } | 256 } |
257 if (CPVT_WordInfo * pWord = m_WordArray.GetAt(nMid)) { | 257 if (CPVT_WordInfo * pWord = m_WordArray.GetAt(nMid)) { |
258 if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) { | 258 if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) { |
259 nLeft = nMid; | 259 nLeft = nMid; |
260 nMid = (nLeft + nRight) / 2; | 260 nMid = (nLeft + nRight) / 2; |
261 continue; | 261 continue; |
262 } else { | 262 } else { |
263 nRight = nMid; | 263 nRight = nMid; |
264 nMid = (nLeft + nRight) / 2; | 264 nMid = (nLeft + nRight) / 2; |
265 continue; | 265 continue; |
266 } | 266 } |
267 } else { | 267 } else { |
268 break; | 268 break; |
269 } | 269 } |
270 } | 270 } |
271 if (CPVT_WordInfo * pWord = m_WordArray.GetAt(nMid)) { | 271 if (CPVT_WordInfo * pWord = m_WordArray.GetAt(nMid)) { |
272 if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) { | 272 if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) { |
273 wordplace.nWordIndex = nMid; | 273 wordplace.nWordIndex = nMid; |
274 } | 274 } |
275 } | 275 } |
276 return wordplace; | 276 return wordplace; |
277 } | 277 } |
278 void CSection::ClearLeftWords(FX_INT32 nWordIndex) | 278 void CSection::ClearLeftWords(int32_t nWordIndex) |
279 { | 279 { |
280 for (FX_INT32 i = nWordIndex; i >= 0; i--) { | 280 for (int32_t i = nWordIndex; i >= 0; i--) { |
281 delete m_WordArray.GetAt(i); | 281 delete m_WordArray.GetAt(i); |
282 m_WordArray.RemoveAt(i); | 282 m_WordArray.RemoveAt(i); |
283 } | 283 } |
284 } | 284 } |
285 void CSection::ClearRightWords(FX_INT32 nWordIndex) | 285 void CSection::ClearRightWords(int32_t nWordIndex) |
286 { | 286 { |
287 for (FX_INT32 i = m_WordArray.GetSize() - 1; i > nWordIndex; i--) { | 287 for (int32_t i = m_WordArray.GetSize() - 1; i > nWordIndex; i--) { |
288 delete m_WordArray.GetAt(i); | 288 delete m_WordArray.GetAt(i); |
289 m_WordArray.RemoveAt(i); | 289 m_WordArray.RemoveAt(i); |
290 } | 290 } |
291 } | 291 } |
292 void CSection::ClearMidWords(FX_INT32 nBeginIndex, FX_INT32 nEndIndex) | 292 void CSection::ClearMidWords(int32_t nBeginIndex, int32_t nEndIndex) |
293 { | 293 { |
294 for (FX_INT32 i = nEndIndex; i > nBeginIndex; i--) { | 294 for (int32_t i = nEndIndex; i > nBeginIndex; i--) { |
295 delete m_WordArray.GetAt(i); | 295 delete m_WordArray.GetAt(i); |
296 m_WordArray.RemoveAt(i); | 296 m_WordArray.RemoveAt(i); |
297 } | 297 } |
298 } | 298 } |
299 void CSection::ClearWords(const CPVT_WordRange & PlaceRange) | 299 void CSection::ClearWords(const CPVT_WordRange & PlaceRange) |
300 { | 300 { |
301 CPVT_WordPlace SecBeginPos = GetBeginWordPlace(); | 301 CPVT_WordPlace SecBeginPos = GetBeginWordPlace(); |
302 CPVT_WordPlace SecEndPos = GetEndWordPlace(); | 302 CPVT_WordPlace SecEndPos = GetEndWordPlace(); |
303 if (PlaceRange.BeginPos.WordCmp(SecBeginPos) >= 0) { | 303 if (PlaceRange.BeginPos.WordCmp(SecBeginPos) >= 0) { |
304 if (PlaceRange.EndPos.WordCmp(SecEndPos) <= 0) { | 304 if (PlaceRange.EndPos.WordCmp(SecEndPos) <= 0) { |
(...skipping 20 matching lines...) Expand all Loading... |
325 } | 325 } |
326 CPVT_FloatRect CTypeset::CharArray() | 326 CPVT_FloatRect CTypeset::CharArray() |
327 { | 327 { |
328 ASSERT(m_pSection != NULL); | 328 ASSERT(m_pSection != NULL); |
329 ASSERT(m_pVT != NULL); | 329 ASSERT(m_pVT != NULL); |
330 FX_FLOAT fLineAscent = m_pVT->GetFontAscent(m_pVT->GetDefaultFontIndex(), m_
pVT->GetFontSize()); | 330 FX_FLOAT fLineAscent = m_pVT->GetFontAscent(m_pVT->GetDefaultFontIndex(), m_
pVT->GetFontSize()); |
331 FX_FLOAT fLineDescent = m_pVT->GetFontDescent(m_pVT->GetDefaultFontIndex(),
m_pVT->GetFontSize()); | 331 FX_FLOAT fLineDescent = m_pVT->GetFontDescent(m_pVT->GetDefaultFontIndex(),
m_pVT->GetFontSize()); |
332 m_rcRet.Default(); | 332 m_rcRet.Default(); |
333 FX_FLOAT x = 0.0f, y = 0.0f; | 333 FX_FLOAT x = 0.0f, y = 0.0f; |
334 FX_FLOAT fNextWidth; | 334 FX_FLOAT fNextWidth; |
335 FX_INT32 nStart = 0; | 335 int32_t nStart = 0; |
336 FX_FLOAT fNodeWidth = m_pVT->GetPlateWidth() / (m_pVT->m_nCharArray <= 0 ? 1
: m_pVT->m_nCharArray); | 336 FX_FLOAT fNodeWidth = m_pVT->GetPlateWidth() / (m_pVT->m_nCharArray <= 0 ? 1
: m_pVT->m_nCharArray); |
337 if (CLine * pLine = m_pSection->m_LineArray.GetAt(0)) { | 337 if (CLine * pLine = m_pSection->m_LineArray.GetAt(0)) { |
338 x = 0.0f; | 338 x = 0.0f; |
339 y += m_pVT->GetLineLeading(m_pSection->m_SecInfo); | 339 y += m_pVT->GetLineLeading(m_pSection->m_SecInfo); |
340 y += fLineAscent; | 340 y += fLineAscent; |
341 nStart = 0; | 341 nStart = 0; |
342 switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) { | 342 switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) { |
343 case 0: | 343 case 0: |
344 pLine->m_LineInfo.fLineX = fNodeWidth * PVT_HALF; | 344 pLine->m_LineInfo.fLineX = fNodeWidth * PVT_HALF; |
345 break; | 345 break; |
346 case 1: | 346 case 1: |
347 nStart = (m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize(
)) / 2; | 347 nStart = (m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize(
)) / 2; |
348 pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PV
T_HALF; | 348 pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PV
T_HALF; |
349 break; | 349 break; |
350 case 2: | 350 case 2: |
351 nStart = m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize()
; | 351 nStart = m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize()
; |
352 pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PV
T_HALF; | 352 pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PV
T_HALF; |
353 break; | 353 break; |
354 } | 354 } |
355 for (FX_INT32 w = 0, sz = m_pSection->m_WordArray.GetSize(); w < sz; w++
) { | 355 for (int32_t w = 0, sz = m_pSection->m_WordArray.GetSize(); w < sz; w++)
{ |
356 if (w >= m_pVT->m_nCharArray) { | 356 if (w >= m_pVT->m_nCharArray) { |
357 break; | 357 break; |
358 } | 358 } |
359 fNextWidth = 0; | 359 fNextWidth = 0; |
360 if (CPVT_WordInfo * pNextWord = (CPVT_WordInfo *)m_pSection->m_WordA
rray.GetAt(w + 1)) { | 360 if (CPVT_WordInfo * pNextWord = (CPVT_WordInfo *)m_pSection->m_WordA
rray.GetAt(w + 1)) { |
361 pNextWord->fWordTail = 0; | 361 pNextWord->fWordTail = 0; |
362 fNextWidth = m_pVT->GetWordWidth(*pNextWord); | 362 fNextWidth = m_pVT->GetWordWidth(*pNextWord); |
363 } | 363 } |
364 if (CPVT_WordInfo * pWord = (CPVT_WordInfo *)m_pSection->m_WordArray
.GetAt(w)) { | 364 if (CPVT_WordInfo * pWord = (CPVT_WordInfo *)m_pSection->m_WordArray
.GetAt(w)) { |
365 pWord->fWordTail = 0; | 365 pWord->fWordTail = 0; |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 return TRUE; | 584 return TRUE; |
585 } else if (IsCJK(prevWord)) { | 585 } else if (IsCJK(prevWord)) { |
586 return TRUE; | 586 return TRUE; |
587 } | 587 } |
588 return FALSE; | 588 return FALSE; |
589 } | 589 } |
590 void CTypeset::SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize) | 590 void CTypeset::SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize) |
591 { | 591 { |
592 ASSERT(m_pVT != NULL); | 592 ASSERT(m_pVT != NULL); |
593 ASSERT(m_pSection != NULL); | 593 ASSERT(m_pSection != NULL); |
594 FX_INT32 nLineHead = 0; | 594 int32_t nLineHead = 0; |
595 FX_INT32 nLineTail = 0; | 595 int32_t nLineTail = 0; |
596 FX_FLOAT fMaxX = 0.0f, fMaxY = 0.0f; | 596 FX_FLOAT fMaxX = 0.0f, fMaxY = 0.0f; |
597 FX_FLOAT fLineWidth = 0.0f, fBackupLineWidth = 0.0f; | 597 FX_FLOAT fLineWidth = 0.0f, fBackupLineWidth = 0.0f; |
598 FX_FLOAT fLineAscent = 0.0f, fBackupLineAscent = 0.0f; | 598 FX_FLOAT fLineAscent = 0.0f, fBackupLineAscent = 0.0f; |
599 FX_FLOAT fLineDescent = 0.0f, fBackupLineDescent = 0.0f; | 599 FX_FLOAT fLineDescent = 0.0f, fBackupLineDescent = 0.0f; |
600 FX_INT32 nWordStartPos = 0; | 600 int32_t nWordStartPos = 0; |
601 FX_BOOL bFullWord = FALSE; | 601 FX_BOOL bFullWord = FALSE; |
602 FX_INT32 nLineFullWordIndex = 0; | 602 int32_t nLineFullWordIndex = 0; |
603 FX_INT32 nCharIndex = 0; | 603 int32_t nCharIndex = 0; |
604 CPVT_LineInfo line; | 604 CPVT_LineInfo line; |
605 FX_FLOAT fWordWidth = 0; | 605 FX_FLOAT fWordWidth = 0; |
606 FX_FLOAT fTypesetWidth = FPDF_MAX(m_pVT->GetPlateWidth() - m_pVT->GetLineInd
ent(m_pSection->m_SecInfo), 0.0f); | 606 FX_FLOAT fTypesetWidth = FPDF_MAX(m_pVT->GetPlateWidth() - m_pVT->GetLineInd
ent(m_pSection->m_SecInfo), 0.0f); |
607 FX_INT32 nTotalWords = m_pSection->m_WordArray.GetSize(); | 607 int32_t nTotalWords = m_pSection->m_WordArray.GetSize(); |
608 FX_BOOL bOpened = FALSE; | 608 FX_BOOL bOpened = FALSE; |
609 if (nTotalWords > 0) { | 609 if (nTotalWords > 0) { |
610 FX_INT32 i = 0; | 610 int32_t i = 0; |
611 while (i < nTotalWords) { | 611 while (i < nTotalWords) { |
612 CPVT_WordInfo * pWord = m_pSection->m_WordArray.GetAt(i); | 612 CPVT_WordInfo * pWord = m_pSection->m_WordArray.GetAt(i); |
613 CPVT_WordInfo* pOldWord = pWord; | 613 CPVT_WordInfo* pOldWord = pWord; |
614 if (i > 0) { | 614 if (i > 0) { |
615 pOldWord = m_pSection->m_WordArray.GetAt(i - 1); | 615 pOldWord = m_pSection->m_WordArray.GetAt(i - 1); |
616 } | 616 } |
617 if (pWord) { | 617 if (pWord) { |
618 if (bTypeset) { | 618 if (bTypeset) { |
619 fLineAscent = FPDF_MAX(fLineAscent, m_pVT->GetWordAscent(*pW
ord, TRUE)); | 619 fLineAscent = FPDF_MAX(fLineAscent, m_pVT->GetWordAscent(*pW
ord, TRUE)); |
620 fLineDescent = FPDF_MIN(fLineDescent, m_pVT->GetWordDescent(
*pWord, TRUE)); | 620 fLineDescent = FPDF_MIN(fLineDescent, m_pVT->GetWordDescent(
*pWord, TRUE)); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 case 1: | 746 case 1: |
747 fMinX = (fTypesetWidth - m_rcRet.Width()) * PVT_HALF; | 747 fMinX = (fTypesetWidth - m_rcRet.Width()) * PVT_HALF; |
748 break; | 748 break; |
749 case 2: | 749 case 2: |
750 fMinX = fTypesetWidth - m_rcRet.Width(); | 750 fMinX = fTypesetWidth - m_rcRet.Width(); |
751 break; | 751 break; |
752 } | 752 } |
753 fMaxX = fMinX + m_rcRet.Width(); | 753 fMaxX = fMinX + m_rcRet.Width(); |
754 fMinY = 0.0f; | 754 fMinY = 0.0f; |
755 fMaxY = m_rcRet.Height(); | 755 fMaxY = m_rcRet.Height(); |
756 FX_INT32 nTotalLines = m_pSection->m_LineArray.GetSize(); | 756 int32_t nTotalLines = m_pSection->m_LineArray.GetSize(); |
757 if (nTotalLines > 0) { | 757 if (nTotalLines > 0) { |
758 m_pSection->m_SecInfo.nTotalLine = nTotalLines; | 758 m_pSection->m_SecInfo.nTotalLine = nTotalLines; |
759 for (FX_INT32 l = 0; l < nTotalLines; l++) { | 759 for (int32_t l = 0; l < nTotalLines; l++) { |
760 if (CLine * pLine = m_pSection->m_LineArray.GetAt(l)) { | 760 if (CLine * pLine = m_pSection->m_LineArray.GetAt(l)) { |
761 switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) { | 761 switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) { |
762 default: | 762 default: |
763 case 0: | 763 case 0: |
764 fPosX = 0; | 764 fPosX = 0; |
765 break; | 765 break; |
766 case 1: | 766 case 1: |
767 fPosX = (fTypesetWidth - pLine->m_LineInfo.fLineWidth) *
PVT_HALF; | 767 fPosX = (fTypesetWidth - pLine->m_LineInfo.fLineWidth) *
PVT_HALF; |
768 break; | 768 break; |
769 case 2: | 769 case 2: |
770 fPosX = fTypesetWidth - pLine->m_LineInfo.fLineWidth; | 770 fPosX = fTypesetWidth - pLine->m_LineInfo.fLineWidth; |
771 break; | 771 break; |
772 } | 772 } |
773 fPosX += fLineIndent; | 773 fPosX += fLineIndent; |
774 fPosY += m_pVT->GetLineLeading(m_pSection->m_SecInfo); | 774 fPosY += m_pVT->GetLineLeading(m_pSection->m_SecInfo); |
775 fPosY += pLine->m_LineInfo.fLineAscent; | 775 fPosY += pLine->m_LineInfo.fLineAscent; |
776 pLine->m_LineInfo.fLineX = fPosX - fMinX; | 776 pLine->m_LineInfo.fLineX = fPosX - fMinX; |
777 pLine->m_LineInfo.fLineY = fPosY - fMinY; | 777 pLine->m_LineInfo.fLineY = fPosY - fMinY; |
778 for (FX_INT32 w = pLine->m_LineInfo.nBeginWordIndex; w <= pLine-
>m_LineInfo.nEndWordIndex; w++) { | 778 for (int32_t w = pLine->m_LineInfo.nBeginWordIndex; w <= pLine->
m_LineInfo.nEndWordIndex; w++) { |
779 if (CPVT_WordInfo * pWord = m_pSection->m_WordArray.GetAt(w)
) { | 779 if (CPVT_WordInfo * pWord = m_pSection->m_WordArray.GetAt(w)
) { |
780 pWord->fWordX = fPosX - fMinX; | 780 pWord->fWordX = fPosX - fMinX; |
781 if (pWord->pWordProps) { | 781 if (pWord->pWordProps) { |
782 switch (pWord->pWordProps->nScriptType) { | 782 switch (pWord->pWordProps->nScriptType) { |
783 default: | 783 default: |
784 case PVTWORD_SCRIPT_NORMAL: | 784 case PVTWORD_SCRIPT_NORMAL: |
785 pWord->fWordY = fPosY - fMinY; | 785 pWord->fWordY = fPosY - fMinY; |
786 break; | 786 break; |
787 case PVTWORD_SCRIPT_SUPER: | 787 case PVTWORD_SCRIPT_SUPER: |
788 pWord->fWordY = fPosY - m_pVT->GetWordAscent
(*pWord) - fMinY; | 788 pWord->fWordY = fPosY - m_pVT->GetWordAscent
(*pWord) - fMinY; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 pSection->ResetLinePlace(); | 848 pSection->ResetLinePlace(); |
849 } | 849 } |
850 m_bInitial = TRUE; | 850 m_bInitial = TRUE; |
851 } | 851 } |
852 } | 852 } |
853 void CPDF_VariableText::ResetAll() | 853 void CPDF_VariableText::ResetAll() |
854 { | 854 { |
855 m_bInitial = FALSE; | 855 m_bInitial = FALSE; |
856 ResetSectionArray(); | 856 ResetSectionArray(); |
857 } | 857 } |
858 CPVT_WordPlace CPDF_VariableText::InsertWord(const CPVT_WordPlace & place, FX_WO
RD word, FX_INT32 charset, | 858 CPVT_WordPlace CPDF_VariableText::InsertWord(const CPVT_WordPlace & place, FX_WO
RD word, int32_t charset, |
859 const CPVT_WordProps * pWordProps) | 859 const CPVT_WordProps * pWordProps) |
860 { | 860 { |
861 FX_INT32 nTotlaWords = this->GetTotalWords(); | 861 int32_t nTotlaWords = this->GetTotalWords(); |
862 if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) { | 862 if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) { |
863 return place; | 863 return place; |
864 } | 864 } |
865 if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) { | 865 if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) { |
866 return place; | 866 return place; |
867 } | 867 } |
868 CPVT_WordPlace newplace = place; | 868 CPVT_WordPlace newplace = place; |
869 newplace.nWordIndex ++; | 869 newplace.nWordIndex ++; |
870 if (m_bRichText) { | 870 if (m_bRichText) { |
871 CPVT_WordProps * pNewProps = pWordProps ? FX_NEW CPVT_WordProps(*pWordPr
ops) : FX_NEW CPVT_WordProps(); | 871 CPVT_WordProps * pNewProps = pWordProps ? FX_NEW CPVT_WordProps(*pWordPr
ops) : FX_NEW CPVT_WordProps(); |
872 if (pNewProps) { | 872 if (pNewProps) { |
873 pNewProps->nFontIndex = GetWordFontIndex(word, charset, pWordProps->
nFontIndex); | 873 pNewProps->nFontIndex = GetWordFontIndex(word, charset, pWordProps->
nFontIndex); |
874 return AddWord(newplace, CPVT_WordInfo(word, charset, -1, pNewProps)
); | 874 return AddWord(newplace, CPVT_WordInfo(word, charset, -1, pNewProps)
); |
875 } | 875 } |
876 } else { | 876 } else { |
877 FX_INT32 nFontIndex = GetSubWord() > 0 ? GetDefaultFontIndex() : GetWord
FontIndex(word, charset, GetDefaultFontIndex()); | 877 int32_t nFontIndex = GetSubWord() > 0 ? GetDefaultFontIndex() : GetWordF
ontIndex(word, charset, GetDefaultFontIndex()); |
878 return AddWord(newplace, CPVT_WordInfo(word, charset, nFontIndex, NULL))
; | 878 return AddWord(newplace, CPVT_WordInfo(word, charset, nFontIndex, NULL))
; |
879 } | 879 } |
880 return place; | 880 return place; |
881 } | 881 } |
882 CPVT_WordPlace CPDF_VariableText::InsertSection(const CPVT_WordPlace & place, co
nst CPVT_SecProps * pSecProps, | 882 CPVT_WordPlace CPDF_VariableText::InsertSection(const CPVT_WordPlace & place, co
nst CPVT_SecProps * pSecProps, |
883 const CPVT_WordProps * pWordProps) | 883 const CPVT_WordProps * pWordProps) |
884 { | 884 { |
885 FX_INT32 nTotlaWords = this->GetTotalWords(); | 885 int32_t nTotlaWords = this->GetTotalWords(); |
886 if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) { | 886 if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) { |
887 return place; | 887 return place; |
888 } | 888 } |
889 if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) { | 889 if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) { |
890 return place; | 890 return place; |
891 } | 891 } |
892 if (!m_bMultiLine) { | 892 if (!m_bMultiLine) { |
893 return place; | 893 return place; |
894 } | 894 } |
895 CPVT_WordPlace wordplace = place; | 895 CPVT_WordPlace wordplace = place; |
896 UpdateWordPlace(wordplace); | 896 UpdateWordPlace(wordplace); |
897 CPVT_WordPlace newplace = place; | 897 CPVT_WordPlace newplace = place; |
898 if (CSection * pSection = m_SectionArray.GetAt(wordplace.nSecIndex)) { | 898 if (CSection * pSection = m_SectionArray.GetAt(wordplace.nSecIndex)) { |
899 CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1); | 899 CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1); |
900 CPVT_SectionInfo secinfo; | 900 CPVT_SectionInfo secinfo; |
901 if (m_bRichText) { | 901 if (m_bRichText) { |
902 if (pSecProps) { | 902 if (pSecProps) { |
903 secinfo.pSecProps = FX_NEW CPVT_SecProps(*pSecProps); | 903 secinfo.pSecProps = FX_NEW CPVT_SecProps(*pSecProps); |
904 } | 904 } |
905 if (pWordProps) { | 905 if (pWordProps) { |
906 secinfo.pWordProps = FX_NEW CPVT_WordProps(*pWordProps); | 906 secinfo.pWordProps = FX_NEW CPVT_WordProps(*pWordProps); |
907 } | 907 } |
908 } | 908 } |
909 AddSection(NewPlace, secinfo); | 909 AddSection(NewPlace, secinfo); |
910 newplace = NewPlace; | 910 newplace = NewPlace; |
911 if (CSection * pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) { | 911 if (CSection * pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) { |
912 for (FX_INT32 w = wordplace.nWordIndex + 1, sz = pSection->m_WordArr
ay.GetSize(); w < sz; w++) { | 912 for (int32_t w = wordplace.nWordIndex + 1, sz = pSection->m_WordArra
y.GetSize(); w < sz; w++) { |
913 if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(w)) { | 913 if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(w)) { |
914 NewPlace.nWordIndex++; | 914 NewPlace.nWordIndex++; |
915 pNewSection->AddWord(NewPlace, *pWord); | 915 pNewSection->AddWord(NewPlace, *pWord); |
916 } | 916 } |
917 } | 917 } |
918 } | 918 } |
919 ClearSectionRightWords(wordplace); | 919 ClearSectionRightWords(wordplace); |
920 } | 920 } |
921 return newplace; | 921 return newplace; |
922 } | 922 } |
923 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace & place, FX_LP
CWSTR text, FX_INT32 charset, | 923 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace & place, FX_LP
CWSTR text, int32_t charset, |
924 const CPVT_SecProps * pSecProps, const CPVT_WordProps * pProps) | 924 const CPVT_SecProps * pSecProps, const CPVT_WordProps * pProps) |
925 { | 925 { |
926 CFX_WideString swText = text; | 926 CFX_WideString swText = text; |
927 CPVT_WordPlace wp = place; | 927 CPVT_WordPlace wp = place; |
928 for (FX_INT32 i = 0, sz = swText.GetLength(); i < sz; i++) { | 928 for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) { |
929 CPVT_WordPlace oldwp = wp; | 929 CPVT_WordPlace oldwp = wp; |
930 FX_WORD word = swText.GetAt(i); | 930 FX_WORD word = swText.GetAt(i); |
931 switch (word) { | 931 switch (word) { |
932 case 0x0D: | 932 case 0x0D: |
933 if (m_bMultiLine) { | 933 if (m_bMultiLine) { |
934 if (swText.GetAt(i + 1) == 0x0A) { | 934 if (swText.GetAt(i + 1) == 0x0A) { |
935 i += 1; | 935 i += 1; |
936 } | 936 } |
937 wp = InsertSection(wp, pSecProps, pProps); | 937 wp = InsertSection(wp, pSecProps, pProps); |
938 } | 938 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
973 return PlaceRange.BeginPos; | 973 return PlaceRange.BeginPos; |
974 } | 974 } |
975 CPVT_WordPlace CPDF_VariableText::DeleteWord(const CPVT_WordPlace & place) | 975 CPVT_WordPlace CPDF_VariableText::DeleteWord(const CPVT_WordPlace & place) |
976 { | 976 { |
977 return ClearRightWord(AjustLineHeader(place, TRUE)); | 977 return ClearRightWord(AjustLineHeader(place, TRUE)); |
978 } | 978 } |
979 CPVT_WordPlace CPDF_VariableText::BackSpaceWord(const CPVT_WordPlace & place) | 979 CPVT_WordPlace CPDF_VariableText::BackSpaceWord(const CPVT_WordPlace & place) |
980 { | 980 { |
981 return ClearLeftWord(AjustLineHeader(place, TRUE)); | 981 return ClearLeftWord(AjustLineHeader(place, TRUE)); |
982 } | 982 } |
983 void CPDF_VariableText::SetText(FX_LPCWSTR text, FX_INT32 charset, const CPVT_Se
cProps * pSecProps, | 983 void CPDF_VariableText::SetText(FX_LPCWSTR text, int32_t charset, const CPVT_Sec
Props * pSecProps, |
984 const CPVT_WordProps * pWordProps) | 984 const CPVT_WordProps * pWordProps) |
985 { | 985 { |
986 DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace())); | 986 DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace())); |
987 CFX_WideString swText = text; | 987 CFX_WideString swText = text; |
988 CPVT_WordPlace wp(0, 0, -1); | 988 CPVT_WordPlace wp(0, 0, -1); |
989 CPVT_SectionInfo secinfo; | 989 CPVT_SectionInfo secinfo; |
990 if (m_bRichText) { | 990 if (m_bRichText) { |
991 if (pSecProps) { | 991 if (pSecProps) { |
992 secinfo.pSecProps = FX_NEW CPVT_SecProps(*pSecProps); | 992 secinfo.pSecProps = FX_NEW CPVT_SecProps(*pSecProps); |
993 } | 993 } |
994 if (pWordProps) { | 994 if (pWordProps) { |
995 secinfo.pWordProps = FX_NEW CPVT_WordProps(*pWordProps); | 995 secinfo.pWordProps = FX_NEW CPVT_WordProps(*pWordProps); |
996 } | 996 } |
997 } | 997 } |
998 if (CSection * pSection = m_SectionArray.GetAt(0)) { | 998 if (CSection * pSection = m_SectionArray.GetAt(0)) { |
999 pSection->m_SecInfo = secinfo; | 999 pSection->m_SecInfo = secinfo; |
1000 } | 1000 } |
1001 FX_INT32 nCharCount = 0; | 1001 int32_t nCharCount = 0; |
1002 for (FX_INT32 i = 0, sz = swText.GetLength(); i < sz; i++) { | 1002 for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) { |
1003 if (m_nLimitChar > 0 && nCharCount >= m_nLimitChar) { | 1003 if (m_nLimitChar > 0 && nCharCount >= m_nLimitChar) { |
1004 break; | 1004 break; |
1005 } | 1005 } |
1006 if (m_nCharArray > 0 && nCharCount >= m_nCharArray) { | 1006 if (m_nCharArray > 0 && nCharCount >= m_nCharArray) { |
1007 break; | 1007 break; |
1008 } | 1008 } |
1009 FX_WORD word = swText.GetAt(i); | 1009 FX_WORD word = swText.GetAt(i); |
1010 switch (word) { | 1010 switch (word) { |
1011 case 0x0D: | 1011 case 0x0D: |
1012 if (m_bMultiLine) { | 1012 if (m_bMultiLine) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 place = GetBeginWordPlace(); | 1045 place = GetBeginWordPlace(); |
1046 } | 1046 } |
1047 if (place.nSecIndex >= m_SectionArray.GetSize()) { | 1047 if (place.nSecIndex >= m_SectionArray.GetSize()) { |
1048 place = GetEndWordPlace(); | 1048 place = GetEndWordPlace(); |
1049 } | 1049 } |
1050 place = AjustLineHeader(place, TRUE); | 1050 place = AjustLineHeader(place, TRUE); |
1051 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { | 1051 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { |
1052 pSection->UpdateWordPlace(place); | 1052 pSection->UpdateWordPlace(place); |
1053 } | 1053 } |
1054 } | 1054 } |
1055 FX_INT32 CPDF_VariableText::WordPlaceToWordIndex(const CPVT_WordPlace & place) c
onst | 1055 int32_t CPDF_VariableText::WordPlaceToWordIndex(const CPVT_WordPlace & place) co
nst |
1056 { | 1056 { |
1057 CPVT_WordPlace newplace = place; | 1057 CPVT_WordPlace newplace = place; |
1058 UpdateWordPlace(newplace); | 1058 UpdateWordPlace(newplace); |
1059 FX_INT32 nIndex = 0; | 1059 int32_t nIndex = 0; |
1060 FX_INT32 i = 0; | 1060 int32_t i = 0; |
1061 FX_INT32 sz = 0; | 1061 int32_t sz = 0; |
1062 for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex;
i++) { | 1062 for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex;
i++) { |
1063 if (CSection * pSection = m_SectionArray.GetAt(i)) { | 1063 if (CSection * pSection = m_SectionArray.GetAt(i)) { |
1064 nIndex += pSection->m_WordArray.GetSize(); | 1064 nIndex += pSection->m_WordArray.GetSize(); |
1065 if (i != m_SectionArray.GetSize() - 1) { | 1065 if (i != m_SectionArray.GetSize() - 1) { |
1066 nIndex += PVT_RETURN_LENGTH; | 1066 nIndex += PVT_RETURN_LENGTH; |
1067 } | 1067 } |
1068 } | 1068 } |
1069 } | 1069 } |
1070 if (i >= 0 && i < m_SectionArray.GetSize()) { | 1070 if (i >= 0 && i < m_SectionArray.GetSize()) { |
1071 nIndex += newplace.nWordIndex + PVT_RETURN_LENGTH; | 1071 nIndex += newplace.nWordIndex + PVT_RETURN_LENGTH; |
1072 } | 1072 } |
1073 return nIndex; | 1073 return nIndex; |
1074 } | 1074 } |
1075 CPVT_WordPlace CPDF_VariableText::WordIndexToWordPlace(FX_INT32 index) const | 1075 CPVT_WordPlace CPDF_VariableText::WordIndexToWordPlace(int32_t index) const |
1076 { | 1076 { |
1077 CPVT_WordPlace place = GetBeginWordPlace(); | 1077 CPVT_WordPlace place = GetBeginWordPlace(); |
1078 FX_INT32 nOldIndex = 0 , nIndex = 0; | 1078 int32_t nOldIndex = 0 , nIndex = 0; |
1079 FX_BOOL bFind = FALSE; | 1079 FX_BOOL bFind = FALSE; |
1080 for (FX_INT32 i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) { | 1080 for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) { |
1081 if (CSection * pSection = m_SectionArray.GetAt(i)) { | 1081 if (CSection * pSection = m_SectionArray.GetAt(i)) { |
1082 nIndex += pSection->m_WordArray.GetSize(); | 1082 nIndex += pSection->m_WordArray.GetSize(); |
1083 if (nIndex == index) { | 1083 if (nIndex == index) { |
1084 place = pSection->GetEndWordPlace(); | 1084 place = pSection->GetEndWordPlace(); |
1085 bFind = TRUE; | 1085 bFind = TRUE; |
1086 break; | 1086 break; |
1087 } else if (nIndex > index) { | 1087 } else if (nIndex > index) { |
1088 place.nSecIndex = i; | 1088 place.nSecIndex = i; |
1089 place.nWordIndex = index - nOldIndex - 1; | 1089 place.nWordIndex = index - nOldIndex - 1; |
1090 pSection->UpdateWordPlace(place); | 1090 pSection->UpdateWordPlace(place); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1152 } else { | 1152 } else { |
1153 return pSection->GetNextWordPlace(place); | 1153 return pSection->GetNextWordPlace(place); |
1154 } | 1154 } |
1155 } | 1155 } |
1156 return place; | 1156 return place; |
1157 } | 1157 } |
1158 CPVT_WordPlace CPDF_VariableText::SearchWordPlace(const CPDF_Point & point) cons
t | 1158 CPVT_WordPlace CPDF_VariableText::SearchWordPlace(const CPDF_Point & point) cons
t |
1159 { | 1159 { |
1160 CPDF_Point pt = OutToIn(point); | 1160 CPDF_Point pt = OutToIn(point); |
1161 CPVT_WordPlace place = GetBeginWordPlace(); | 1161 CPVT_WordPlace place = GetBeginWordPlace(); |
1162 FX_INT32 nLeft = 0; | 1162 int32_t nLeft = 0; |
1163 FX_INT32 nRight = m_SectionArray.GetSize() - 1; | 1163 int32_t nRight = m_SectionArray.GetSize() - 1; |
1164 FX_INT32 nMid = m_SectionArray.GetSize() / 2; | 1164 int32_t nMid = m_SectionArray.GetSize() / 2; |
1165 FX_BOOL bUp = TRUE; | 1165 FX_BOOL bUp = TRUE; |
1166 FX_BOOL bDown = TRUE; | 1166 FX_BOOL bDown = TRUE; |
1167 while (nLeft <= nRight) { | 1167 while (nLeft <= nRight) { |
1168 if (CSection * pSection = m_SectionArray.GetAt(nMid)) { | 1168 if (CSection * pSection = m_SectionArray.GetAt(nMid)) { |
1169 if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.top)) { | 1169 if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.top)) { |
1170 bUp = FALSE; | 1170 bUp = FALSE; |
1171 } | 1171 } |
1172 if (IsFloatBigger(pSection->m_SecInfo.rcSection.bottom, pt.y)) { | 1172 if (IsFloatBigger(pSection->m_SecInfo.rcSection.bottom, pt.y)) { |
1173 bDown = FALSE; | 1173 bDown = FALSE; |
1174 } | 1174 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1251 { | 1251 { |
1252 return CPVT_WordPlace(place.nSecIndex, 0, -1); | 1252 return CPVT_WordPlace(place.nSecIndex, 0, -1); |
1253 } | 1253 } |
1254 CPVT_WordPlace CPDF_VariableText::GetSectionEndPlace(const CPVT_WordPlace & plac
e) const | 1254 CPVT_WordPlace CPDF_VariableText::GetSectionEndPlace(const CPVT_WordPlace & plac
e) const |
1255 { | 1255 { |
1256 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { | 1256 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { |
1257 return pSection->GetEndWordPlace(); | 1257 return pSection->GetEndWordPlace(); |
1258 } | 1258 } |
1259 return place; | 1259 return place; |
1260 } | 1260 } |
1261 FX_INT32 CPDF_VariableText::GetTotalWords() const | 1261 int32_t CPDF_VariableText::GetTotalWords() const |
1262 { | 1262 { |
1263 FX_INT32 nTotal = 0; | 1263 int32_t nTotal = 0; |
1264 for (FX_INT32 i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) | 1264 for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) |
1265 if (CSection * pSection = m_SectionArray.GetAt(i)) { | 1265 if (CSection * pSection = m_SectionArray.GetAt(i)) { |
1266 nTotal += (pSection->m_WordArray.GetSize() + PVT_RETURN_LENGTH); | 1266 nTotal += (pSection->m_WordArray.GetSize() + PVT_RETURN_LENGTH); |
1267 } | 1267 } |
1268 return nTotal - PVT_RETURN_LENGTH; | 1268 return nTotal - PVT_RETURN_LENGTH; |
1269 } | 1269 } |
1270 void CPDF_VariableText::ResetSectionArray() | 1270 void CPDF_VariableText::ResetSectionArray() |
1271 { | 1271 { |
1272 for (FX_INT32 s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { | 1272 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { |
1273 delete m_SectionArray.GetAt(s); | 1273 delete m_SectionArray.GetAt(s); |
1274 } | 1274 } |
1275 m_SectionArray.RemoveAll(); | 1275 m_SectionArray.RemoveAll(); |
1276 } | 1276 } |
1277 CPVT_WordPlace CPDF_VariableText::AddSection(const CPVT_WordPlace & place, const
CPVT_SectionInfo & secinfo) | 1277 CPVT_WordPlace CPDF_VariableText::AddSection(const CPVT_WordPlace & place, const
CPVT_SectionInfo & secinfo) |
1278 { | 1278 { |
1279 if (IsValid() && !m_bMultiLine) { | 1279 if (IsValid() && !m_bMultiLine) { |
1280 return place; | 1280 return place; |
1281 } | 1281 } |
1282 FX_INT32 nSecIndex = FPDF_MAX(FPDF_MIN(place.nSecIndex, m_SectionArray.GetSi
ze()), 0); | 1282 int32_t nSecIndex = FPDF_MAX(FPDF_MIN(place.nSecIndex, m_SectionArray.GetSiz
e()), 0); |
1283 CSection * pSection = FX_NEW CSection(this); | 1283 CSection* pSection = new CSection(this); |
1284 if (!pSection) { | |
1285 return place; | |
1286 } | |
1287 pSection->m_SecInfo = secinfo; | 1284 pSection->m_SecInfo = secinfo; |
1288 pSection->SecPlace.nSecIndex = nSecIndex; | 1285 pSection->SecPlace.nSecIndex = nSecIndex; |
1289 if (nSecIndex == m_SectionArray.GetSize()) { | 1286 if (nSecIndex == m_SectionArray.GetSize()) { |
1290 m_SectionArray.Add(pSection); | 1287 m_SectionArray.Add(pSection); |
1291 } else { | 1288 } else { |
1292 m_SectionArray.InsertAt(nSecIndex, pSection); | 1289 m_SectionArray.InsertAt(nSecIndex, pSection); |
1293 } | 1290 } |
1294 return place; | 1291 return place; |
1295 } | 1292 } |
1296 CPVT_WordPlace CPDF_VariableText::AddLine(const CPVT_WordPlace & place, const CP
VT_LineInfo & lineinfo) | 1293 CPVT_WordPlace CPDF_VariableText::AddLine(const CPVT_WordPlace & place, const CP
VT_LineInfo & lineinfo) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 return FALSE; | 1351 return FALSE; |
1355 } | 1352 } |
1356 CPDF_Rect CPDF_VariableText::GetContentRect() const | 1353 CPDF_Rect CPDF_VariableText::GetContentRect() const |
1357 { | 1354 { |
1358 return InToOut(CPDF_EditContainer::GetContentRect()); | 1355 return InToOut(CPDF_EditContainer::GetContentRect()); |
1359 } | 1356 } |
1360 FX_FLOAT CPDF_VariableText::GetWordFontSize(const CPVT_WordInfo & WordInfo, FX_B
OOL bFactFontSize) | 1357 FX_FLOAT CPDF_VariableText::GetWordFontSize(const CPVT_WordInfo & WordInfo, FX_B
OOL bFactFontSize) |
1361 { | 1358 { |
1362 return m_bRichText && WordInfo.pWordProps ? (WordInfo.pWordProps->nScriptTyp
e == PVTWORD_SCRIPT_NORMAL || bFactFontSize ? WordInfo.pWordProps->fFontSize : W
ordInfo.pWordProps->fFontSize * PVT_HALF) : GetFontSize(); | 1359 return m_bRichText && WordInfo.pWordProps ? (WordInfo.pWordProps->nScriptTyp
e == PVTWORD_SCRIPT_NORMAL || bFactFontSize ? WordInfo.pWordProps->fFontSize : W
ordInfo.pWordProps->fFontSize * PVT_HALF) : GetFontSize(); |
1363 } | 1360 } |
1364 FX_INT32 CPDF_VariableText::GetWordFontIndex(const CPVT_WordInfo & WordInfo) | 1361 int32_t CPDF_VariableText::GetWordFontIndex(const CPVT_WordInfo & WordInfo) |
1365 { | 1362 { |
1366 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nFontIndex
: WordInfo.nFontIndex; | 1363 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nFontIndex
: WordInfo.nFontIndex; |
1367 } | 1364 } |
1368 FX_FLOAT CPDF_VariableText::GetWordWidth(FX_INT32 nFontIndex, FX_WORD Word, FX_W
ORD SubWord, | 1365 FX_FLOAT CPDF_VariableText::GetWordWidth(int32_t nFontIndex, FX_WORD Word, FX_WO
RD SubWord, |
1369 FX_FLOAT fCharSpace, FX_INT32 nHorzScale, | 1366 FX_FLOAT fCharSpace, int32_t nHorzScale, |
1370 FX_FLOAT fFontSize, FX_FLOAT fWordTail, FX_INT32 nWordStyle) | 1367 FX_FLOAT fFontSize, FX_FLOAT fWordTail, int32_t nWordStyle) |
1371 { | 1368 { |
1372 return (GetCharWidth(nFontIndex, Word, SubWord, nWordStyle) * fFontSize * PV
T_FONTSCALE + fCharSpace) * nHorzScale * PVT_PERCENT + fWordTail; | 1369 return (GetCharWidth(nFontIndex, Word, SubWord, nWordStyle) * fFontSize * PV
T_FONTSCALE + fCharSpace) * nHorzScale * PVT_PERCENT + fWordTail; |
1373 } | 1370 } |
1374 FX_FLOAT CPDF_VariableText::GetWordWidth(const CPVT_WordInfo & WordInfo) | 1371 FX_FLOAT CPDF_VariableText::GetWordWidth(const CPVT_WordInfo & WordInfo) |
1375 { | 1372 { |
1376 return GetWordWidth(GetWordFontIndex(WordInfo), WordInfo.Word, GetSubWord(),
GetCharSpace(WordInfo), GetHorzScale(WordInfo), | 1373 return GetWordWidth(GetWordFontIndex(WordInfo), WordInfo.Word, GetSubWord(),
GetCharSpace(WordInfo), GetHorzScale(WordInfo), |
1377 GetWordFontSize(WordInfo), WordInfo.fWordTail, | 1374 GetWordFontSize(WordInfo), WordInfo.fWordTail, |
1378 WordInfo.pWordProps ? WordInfo.pWordProps->nWordStyle :
0); | 1375 WordInfo.pWordProps ? WordInfo.pWordProps->nWordStyle :
0); |
1379 } | 1376 } |
1380 FX_FLOAT CPDF_VariableText::GetLineAscent(const CPVT_SectionInfo & SecInfo) | 1377 FX_FLOAT CPDF_VariableText::GetLineAscent(const CPVT_SectionInfo & SecInfo) |
1381 { | 1378 { |
1382 return m_bRichText && SecInfo.pWordProps ? GetFontAscent(SecInfo.pWordProps-
>nFontIndex, SecInfo.pWordProps->fFontSize) : | 1379 return m_bRichText && SecInfo.pWordProps ? GetFontAscent(SecInfo.pWordProps-
>nFontIndex, SecInfo.pWordProps->fFontSize) : |
1383 GetFontAscent(GetDefaultFontIndex(), GetFontSize()); | 1380 GetFontAscent(GetDefaultFontIndex(), GetFontSize()); |
1384 } | 1381 } |
1385 FX_FLOAT CPDF_VariableText::GetLineDescent(const CPVT_SectionInfo & SecInfo) | 1382 FX_FLOAT CPDF_VariableText::GetLineDescent(const CPVT_SectionInfo & SecInfo) |
1386 { | 1383 { |
1387 return m_bRichText && SecInfo.pWordProps ? GetFontDescent(SecInfo.pWordProps
->nFontIndex, SecInfo.pWordProps->fFontSize) : | 1384 return m_bRichText && SecInfo.pWordProps ? GetFontDescent(SecInfo.pWordProps
->nFontIndex, SecInfo.pWordProps->fFontSize) : |
1388 GetFontDescent(GetDefaultFontIndex(), GetFontSize()); | 1385 GetFontDescent(GetDefaultFontIndex(), GetFontSize()); |
1389 } | 1386 } |
1390 FX_FLOAT CPDF_VariableText::GetFontAscent(FX_INT32 nFontIndex, FX_FLOAT fFontSiz
e) | 1387 FX_FLOAT CPDF_VariableText::GetFontAscent(int32_t nFontIndex, FX_FLOAT fFontSize
) |
1391 { | 1388 { |
1392 return (FX_FLOAT)GetTypeAscent(nFontIndex) * fFontSize * PVT_FONTSCALE; | 1389 return (FX_FLOAT)GetTypeAscent(nFontIndex) * fFontSize * PVT_FONTSCALE; |
1393 } | 1390 } |
1394 FX_FLOAT CPDF_VariableText::GetFontDescent(FX_INT32 nFontIndex, FX_FLOAT fFontSi
ze) | 1391 FX_FLOAT CPDF_VariableText::GetFontDescent(int32_t nFontIndex, FX_FLOAT fFontSiz
e) |
1395 { | 1392 { |
1396 return (FX_FLOAT)GetTypeDescent(nFontIndex) * fFontSize * PVT_FONTSCALE; | 1393 return (FX_FLOAT)GetTypeDescent(nFontIndex) * fFontSize * PVT_FONTSCALE; |
1397 } | 1394 } |
1398 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo & WordInfo, FX_FLO
AT fFontSize) | 1395 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo & WordInfo, FX_FLO
AT fFontSize) |
1399 { | 1396 { |
1400 return GetFontAscent(GetWordFontIndex(WordInfo), fFontSize); | 1397 return GetFontAscent(GetWordFontIndex(WordInfo), fFontSize); |
1401 } | 1398 } |
1402 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo & WordInfo, FX_FL
OAT fFontSize) | 1399 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo & WordInfo, FX_FL
OAT fFontSize) |
1403 { | 1400 { |
1404 return GetFontDescent(GetWordFontIndex(WordInfo), fFontSize); | 1401 return GetFontDescent(GetWordFontIndex(WordInfo), fFontSize); |
1405 } | 1402 } |
1406 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo & WordInfo, FX_BOO
L bFactFontSize) | 1403 FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo & WordInfo, FX_BOO
L bFactFontSize) |
1407 { | 1404 { |
1408 return GetFontAscent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo, b
FactFontSize)); | 1405 return GetFontAscent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo, b
FactFontSize)); |
1409 } | 1406 } |
1410 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo & WordInfo, FX_BO
OL bFactFontSize) | 1407 FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo & WordInfo, FX_BO
OL bFactFontSize) |
1411 { | 1408 { |
1412 return GetFontDescent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo,
bFactFontSize)); | 1409 return GetFontDescent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo,
bFactFontSize)); |
1413 } | 1410 } |
1414 FX_FLOAT CPDF_VariableText::GetLineLeading(const CPVT_SectionInfo & SecInfo) | 1411 FX_FLOAT CPDF_VariableText::GetLineLeading(const CPVT_SectionInfo & SecInfo) |
1415 { | 1412 { |
1416 return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineLeading :
m_fLineLeading; | 1413 return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineLeading :
m_fLineLeading; |
1417 } | 1414 } |
1418 FX_FLOAT CPDF_VariableText::GetLineIndent(const CPVT_SectionInfo & SecInfo) | 1415 FX_FLOAT CPDF_VariableText::GetLineIndent(const CPVT_SectionInfo & SecInfo) |
1419 { | 1416 { |
1420 return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineIndent : 0
.0f; | 1417 return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineIndent : 0
.0f; |
1421 } | 1418 } |
1422 FX_INT32 CPDF_VariableText::GetAlignment(const CPVT_SectionInfo& SecInfo) | 1419 int32_t CPDF_VariableText::GetAlignment(const CPVT_SectionInfo& SecInfo) |
1423 { | 1420 { |
1424 return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->nAlignment : th
is->m_nAlignment; | 1421 return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->nAlignment : th
is->m_nAlignment; |
1425 } | 1422 } |
1426 FX_FLOAT CPDF_VariableText::GetCharSpace(const CPVT_WordInfo & WordInfo) | 1423 FX_FLOAT CPDF_VariableText::GetCharSpace(const CPVT_WordInfo & WordInfo) |
1427 { | 1424 { |
1428 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->fCharSpace
: m_fCharSpace; | 1425 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->fCharSpace
: m_fCharSpace; |
1429 } | 1426 } |
1430 FX_INT32 CPDF_VariableText::GetHorzScale(const CPVT_WordInfo & WordInfo) | 1427 int32_t CPDF_VariableText::GetHorzScale(const CPVT_WordInfo & WordInfo) |
1431 { | 1428 { |
1432 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nHorzScale
: m_nHorzScale; | 1429 return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nHorzScale
: m_nHorzScale; |
1433 } | 1430 } |
1434 void CPDF_VariableText::ClearSectionRightWords(const CPVT_WordPlace & place) | 1431 void CPDF_VariableText::ClearSectionRightWords(const CPVT_WordPlace & place) |
1435 { | 1432 { |
1436 CPVT_WordPlace wordplace = AjustLineHeader(place, TRUE); | 1433 CPVT_WordPlace wordplace = AjustLineHeader(place, TRUE); |
1437 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { | 1434 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { |
1438 for (FX_INT32 w = pSection->m_WordArray.GetSize() - 1; w > wordplace.nWo
rdIndex; w--) { | 1435 for (int32_t w = pSection->m_WordArray.GetSize() - 1; w > wordplace.nWor
dIndex; w--) { |
1439 delete pSection->m_WordArray.GetAt(w); | 1436 delete pSection->m_WordArray.GetAt(w); |
1440 pSection->m_WordArray.RemoveAt(w); | 1437 pSection->m_WordArray.RemoveAt(w); |
1441 } | 1438 } |
1442 } | 1439 } |
1443 } | 1440 } |
1444 CPVT_WordPlace CPDF_VariableText::AjustLineHeader(const CPVT_WordPlace & place,
FX_BOOL bPrevOrNext) const | 1441 CPVT_WordPlace CPDF_VariableText::AjustLineHeader(const CPVT_WordPlace & place,
FX_BOOL bPrevOrNext) const |
1445 { | 1442 { |
1446 if (place.nWordIndex < 0 && place.nLineIndex > 0) { | 1443 if (place.nWordIndex < 0 && place.nLineIndex > 0) { |
1447 if (bPrevOrNext) { | 1444 if (bPrevOrNext) { |
1448 return GetPrevWordPlace(place); | 1445 return GetPrevWordPlace(place); |
(...skipping 13 matching lines...) Expand all Loading... |
1462 delete pSection; | 1459 delete pSection; |
1463 m_SectionArray.RemoveAt(place.nSecIndex); | 1460 m_SectionArray.RemoveAt(place.nSecIndex); |
1464 return TRUE; | 1461 return TRUE; |
1465 } | 1462 } |
1466 } | 1463 } |
1467 return FALSE; | 1464 return FALSE; |
1468 } | 1465 } |
1469 void CPDF_VariableText::ClearEmptySections(const CPVT_WordRange & PlaceRange) | 1466 void CPDF_VariableText::ClearEmptySections(const CPVT_WordRange & PlaceRange) |
1470 { | 1467 { |
1471 CPVT_WordPlace wordplace; | 1468 CPVT_WordPlace wordplace; |
1472 for (FX_INT32 s = PlaceRange.EndPos.nSecIndex; s > PlaceRange.BeginPos.nSecI
ndex; s--) { | 1469 for (int32_t s = PlaceRange.EndPos.nSecIndex; s > PlaceRange.BeginPos.nSecIn
dex; s--) { |
1473 wordplace.nSecIndex = s; | 1470 wordplace.nSecIndex = s; |
1474 ClearEmptySection(wordplace); | 1471 ClearEmptySection(wordplace); |
1475 } | 1472 } |
1476 } | 1473 } |
1477 void CPDF_VariableText::LinkLatterSection(const CPVT_WordPlace & place) | 1474 void CPDF_VariableText::LinkLatterSection(const CPVT_WordPlace & place) |
1478 { | 1475 { |
1479 CPVT_WordPlace oldplace = AjustLineHeader(place, TRUE); | 1476 CPVT_WordPlace oldplace = AjustLineHeader(place, TRUE); |
1480 if (CSection * pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) { | 1477 if (CSection * pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) { |
1481 if (CSection * pSection = m_SectionArray.GetAt(oldplace.nSecIndex)) { | 1478 if (CSection * pSection = m_SectionArray.GetAt(oldplace.nSecIndex)) { |
1482 for (FX_INT32 w = 0, sz = pNextSection->m_WordArray.GetSize(); w < s
z; w++) { | 1479 for (int32_t w = 0, sz = pNextSection->m_WordArray.GetSize(); w < sz
; w++) { |
1483 if (CPVT_WordInfo * pWord = pNextSection->m_WordArray.GetAt(w))
{ | 1480 if (CPVT_WordInfo * pWord = pNextSection->m_WordArray.GetAt(w))
{ |
1484 oldplace.nWordIndex ++; | 1481 oldplace.nWordIndex ++; |
1485 pSection->AddWord(oldplace, *pWord); | 1482 pSection->AddWord(oldplace, *pWord); |
1486 } | 1483 } |
1487 } | 1484 } |
1488 } | 1485 } |
1489 delete pNextSection; | 1486 delete pNextSection; |
1490 m_SectionArray.RemoveAt(place.nSecIndex + 1); | 1487 m_SectionArray.RemoveAt(place.nSecIndex + 1); |
1491 } | 1488 } |
1492 } | 1489 } |
1493 void CPDF_VariableText::ClearWords(const CPVT_WordRange & PlaceRange) | 1490 void CPDF_VariableText::ClearWords(const CPVT_WordRange & PlaceRange) |
1494 { | 1491 { |
1495 CPVT_WordRange NewRange; | 1492 CPVT_WordRange NewRange; |
1496 NewRange.BeginPos = AjustLineHeader(PlaceRange.BeginPos, TRUE); | 1493 NewRange.BeginPos = AjustLineHeader(PlaceRange.BeginPos, TRUE); |
1497 NewRange.EndPos = AjustLineHeader(PlaceRange.EndPos, TRUE); | 1494 NewRange.EndPos = AjustLineHeader(PlaceRange.EndPos, TRUE); |
1498 for (FX_INT32 s = NewRange.EndPos.nSecIndex; s >= NewRange.BeginPos.nSecInde
x; s--) { | 1495 for (int32_t s = NewRange.EndPos.nSecIndex; s >= NewRange.BeginPos.nSecIndex
; s--) { |
1499 if (CSection * pSection = m_SectionArray.GetAt(s)) { | 1496 if (CSection * pSection = m_SectionArray.GetAt(s)) { |
1500 pSection->ClearWords(NewRange); | 1497 pSection->ClearWords(NewRange); |
1501 } | 1498 } |
1502 } | 1499 } |
1503 } | 1500 } |
1504 CPVT_WordPlace CPDF_VariableText::ClearLeftWord(const CPVT_WordPlace & place) | 1501 CPVT_WordPlace CPDF_VariableText::ClearLeftWord(const CPVT_WordPlace & place) |
1505 { | 1502 { |
1506 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { | 1503 if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) { |
1507 CPVT_WordPlace leftplace = this->GetPrevWordPlace(place); | 1504 CPVT_WordPlace leftplace = this->GetPrevWordPlace(place); |
1508 if (leftplace != place) { | 1505 if (leftplace != place) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1551 rcRet = RearrangeSections(CPVT_WordRange(GetBeginWordPlace(), GetEnd
WordPlace())); | 1548 rcRet = RearrangeSections(CPVT_WordRange(GetBeginWordPlace(), GetEnd
WordPlace())); |
1552 } else { | 1549 } else { |
1553 rcRet = RearrangeSections(PlaceRange); | 1550 rcRet = RearrangeSections(PlaceRange); |
1554 } | 1551 } |
1555 } | 1552 } |
1556 SetContentRect(rcRet); | 1553 SetContentRect(rcRet); |
1557 return rcRet; | 1554 return rcRet; |
1558 } | 1555 } |
1559 FX_FLOAT CPDF_VariableText::GetAutoFontSize() | 1556 FX_FLOAT CPDF_VariableText::GetAutoFontSize() |
1560 { | 1557 { |
1561 FX_INT32 nTotal = sizeof(gFontSizeSteps) / sizeof(FX_BYTE); | 1558 int32_t nTotal = sizeof(gFontSizeSteps) / sizeof(uint8_t); |
1562 if (IsMultiLine()) { | 1559 if (IsMultiLine()) { |
1563 nTotal /= 4; | 1560 nTotal /= 4; |
1564 } | 1561 } |
1565 if (nTotal <= 0) { | 1562 if (nTotal <= 0) { |
1566 return 0; | 1563 return 0; |
1567 } | 1564 } |
1568 if (GetPlateWidth() <= 0) { | 1565 if (GetPlateWidth() <= 0) { |
1569 return 0; | 1566 return 0; |
1570 } | 1567 } |
1571 FX_INT32 nLeft = 0; | 1568 int32_t nLeft = 0; |
1572 FX_INT32 nRight = nTotal - 1; | 1569 int32_t nRight = nTotal - 1; |
1573 FX_INT32 nMid = nTotal / 2; | 1570 int32_t nMid = nTotal / 2; |
1574 while (nLeft <= nRight) { | 1571 while (nLeft <= nRight) { |
1575 if (IsBigger(gFontSizeSteps[nMid])) { | 1572 if (IsBigger(gFontSizeSteps[nMid])) { |
1576 nRight = nMid - 1; | 1573 nRight = nMid - 1; |
1577 nMid = (nLeft + nRight) / 2; | 1574 nMid = (nLeft + nRight) / 2; |
1578 continue; | 1575 continue; |
1579 } else { | 1576 } else { |
1580 nLeft = nMid + 1; | 1577 nLeft = nMid + 1; |
1581 nMid = (nLeft + nRight) / 2; | 1578 nMid = (nLeft + nRight) / 2; |
1582 continue; | 1579 continue; |
1583 } | 1580 } |
1584 } | 1581 } |
1585 return (FX_FLOAT)gFontSizeSteps[nMid]; | 1582 return (FX_FLOAT)gFontSizeSteps[nMid]; |
1586 } | 1583 } |
1587 FX_BOOL CPDF_VariableText::IsBigger(FX_FLOAT fFontSize) | 1584 FX_BOOL CPDF_VariableText::IsBigger(FX_FLOAT fFontSize) |
1588 { | 1585 { |
1589 FX_BOOL bBigger = FALSE; | 1586 FX_BOOL bBigger = FALSE; |
1590 CPVT_Size szTotal; | 1587 CPVT_Size szTotal; |
1591 for (FX_INT32 s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { | 1588 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { |
1592 if (CSection * pSection = m_SectionArray.GetAt(s)) { | 1589 if (CSection * pSection = m_SectionArray.GetAt(s)) { |
1593 CPVT_Size size = pSection->GetSectionSize(fFontSize); | 1590 CPVT_Size size = pSection->GetSectionSize(fFontSize); |
1594 szTotal.x = FPDF_MAX(size.x, szTotal.x); | 1591 szTotal.x = FPDF_MAX(size.x, szTotal.x); |
1595 szTotal.y += size.y; | 1592 szTotal.y += size.y; |
1596 if (IsFloatBigger(szTotal.x, GetPlateWidth()) | 1593 if (IsFloatBigger(szTotal.x, GetPlateWidth()) |
1597 || IsFloatBigger(szTotal.y, GetPlateHeight()) | 1594 || IsFloatBigger(szTotal.y, GetPlateHeight()) |
1598 ) { | 1595 ) { |
1599 bBigger = TRUE; | 1596 bBigger = TRUE; |
1600 break; | 1597 break; |
1601 } | 1598 } |
1602 } | 1599 } |
1603 } | 1600 } |
1604 return bBigger; | 1601 return bBigger; |
1605 } | 1602 } |
1606 CPVT_FloatRect CPDF_VariableText::RearrangeSections(const CPVT_WordRange & Place
Range) | 1603 CPVT_FloatRect CPDF_VariableText::RearrangeSections(const CPVT_WordRange & Place
Range) |
1607 { | 1604 { |
1608 CPVT_WordPlace place; | 1605 CPVT_WordPlace place; |
1609 FX_FLOAT fPosY = 0; | 1606 FX_FLOAT fPosY = 0; |
1610 FX_FLOAT fOldHeight; | 1607 FX_FLOAT fOldHeight; |
1611 FX_INT32 nSSecIndex = PlaceRange.BeginPos.nSecIndex; | 1608 int32_t nSSecIndex = PlaceRange.BeginPos.nSecIndex; |
1612 FX_INT32 nESecIndex = PlaceRange.EndPos.nSecIndex; | 1609 int32_t nESecIndex = PlaceRange.EndPos.nSecIndex; |
1613 CPVT_FloatRect rcRet; | 1610 CPVT_FloatRect rcRet; |
1614 for (FX_INT32 s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { | 1611 for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) { |
1615 place.nSecIndex = s; | 1612 place.nSecIndex = s; |
1616 if (CSection * pSection = m_SectionArray.GetAt(s)) { | 1613 if (CSection * pSection = m_SectionArray.GetAt(s)) { |
1617 pSection->SecPlace = place; | 1614 pSection->SecPlace = place; |
1618 CPVT_FloatRect rcSec = pSection->m_SecInfo.rcSection; | 1615 CPVT_FloatRect rcSec = pSection->m_SecInfo.rcSection; |
1619 if (s >= nSSecIndex) { | 1616 if (s >= nSSecIndex) { |
1620 if (s <= nESecIndex) { | 1617 if (s <= nESecIndex) { |
1621 rcSec = pSection->Rearrange(); | 1618 rcSec = pSection->Rearrange(); |
1622 rcSec.top += fPosY; | 1619 rcSec.top += fPosY; |
1623 rcSec.bottom += fPosY; | 1620 rcSec.bottom += fPosY; |
1624 } else { | 1621 } else { |
(...skipping 10 matching lines...) Expand all Loading... |
1635 rcRet.left = FPDF_MIN(rcSec.left, rcRet.left); | 1632 rcRet.left = FPDF_MIN(rcSec.left, rcRet.left); |
1636 rcRet.top = FPDF_MIN(rcSec.top, rcRet.top); | 1633 rcRet.top = FPDF_MIN(rcSec.top, rcRet.top); |
1637 rcRet.right = FPDF_MAX(rcSec.right, rcRet.right); | 1634 rcRet.right = FPDF_MAX(rcSec.right, rcRet.right); |
1638 rcRet.bottom = FPDF_MAX(rcSec.bottom, rcRet.bottom); | 1635 rcRet.bottom = FPDF_MAX(rcSec.bottom, rcRet.bottom); |
1639 } | 1636 } |
1640 fPosY += rcSec.Height(); | 1637 fPosY += rcSec.Height(); |
1641 } | 1638 } |
1642 } | 1639 } |
1643 return rcRet; | 1640 return rcRet; |
1644 } | 1641 } |
1645 FX_INT32 CPDF_VariableText::GetCharWidth(FX_INT32 nFontIndex, FX_WORD Word, FX_W
ORD SubWord, FX_INT32 nWordStyle) | 1642 int32_t CPDF_VariableText::GetCharWidth(int32_t nFontIndex, FX_WORD Word, FX_WOR
D SubWord, int32_t nWordStyle) |
1646 { | 1643 { |
1647 if (m_pVTProvider) { | 1644 if (m_pVTProvider) { |
1648 if (SubWord > 0) { | 1645 if (SubWord > 0) { |
1649 return m_pVTProvider->GetCharWidth(nFontIndex, SubWord, nWordStyle); | 1646 return m_pVTProvider->GetCharWidth(nFontIndex, SubWord, nWordStyle); |
1650 } else { | 1647 } else { |
1651 return m_pVTProvider->GetCharWidth(nFontIndex, Word, nWordStyle); | 1648 return m_pVTProvider->GetCharWidth(nFontIndex, Word, nWordStyle); |
1652 } | 1649 } |
1653 } | 1650 } |
1654 return 0; | 1651 return 0; |
1655 } | 1652 } |
1656 FX_INT32 CPDF_VariableText::GetTypeAscent(FX_INT32 nFontIndex) | 1653 int32_t CPDF_VariableText::GetTypeAscent(int32_t nFontIndex) |
1657 { | 1654 { |
1658 return m_pVTProvider ? m_pVTProvider->GetTypeAscent(nFontIndex) : 0; | 1655 return m_pVTProvider ? m_pVTProvider->GetTypeAscent(nFontIndex) : 0; |
1659 } | 1656 } |
1660 FX_INT32 CPDF_VariableText::GetTypeDescent(FX_INT32 nFontIndex) | 1657 int32_t CPDF_VariableText::GetTypeDescent(int32_t nFontIndex) |
1661 { | 1658 { |
1662 return m_pVTProvider ? m_pVTProvider->GetTypeDescent(nFontIndex) : 0; | 1659 return m_pVTProvider ? m_pVTProvider->GetTypeDescent(nFontIndex) : 0; |
1663 } | 1660 } |
1664 FX_INT32 CPDF_VariableText::GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_
INT32 nFontIndex) | 1661 int32_t CPDF_VariableText::GetWordFontIndex(FX_WORD word, int32_t charset, int32
_t nFontIndex) |
1665 { | 1662 { |
1666 return m_pVTProvider ? m_pVTProvider->GetWordFontIndex(word, charset, nFontI
ndex) : -1; | 1663 return m_pVTProvider ? m_pVTProvider->GetWordFontIndex(word, charset, nFontI
ndex) : -1; |
1667 } | 1664 } |
1668 FX_INT32 CPDF_VariableText::GetDefaultFontIndex() | 1665 int32_t CPDF_VariableText::GetDefaultFontIndex() |
1669 { | 1666 { |
1670 return m_pVTProvider ? m_pVTProvider->GetDefaultFontIndex() : -1; | 1667 return m_pVTProvider ? m_pVTProvider->GetDefaultFontIndex() : -1; |
1671 } | 1668 } |
1672 FX_BOOL CPDF_VariableText::IsLatinWord(FX_WORD word) | 1669 FX_BOOL CPDF_VariableText::IsLatinWord(FX_WORD word) |
1673 { | 1670 { |
1674 return m_pVTProvider ? m_pVTProvider->IsLatinWord(word) : FALSE; | 1671 return m_pVTProvider ? m_pVTProvider->IsLatinWord(word) : FALSE; |
1675 } | 1672 } |
1676 IPDF_VariableText_Iterator * CPDF_VariableText::GetIterator() | 1673 IPDF_VariableText_Iterator * CPDF_VariableText::GetIterator() |
1677 { | 1674 { |
1678 if (!m_pVTIterator) { | 1675 if (!m_pVTIterator) { |
1679 return m_pVTIterator = FX_NEW CPDF_VariableText_Iterator(this); | 1676 return m_pVTIterator = FX_NEW CPDF_VariableText_Iterator(this); |
1680 } | 1677 } |
1681 return m_pVTIterator; | 1678 return m_pVTIterator; |
1682 } | 1679 } |
1683 IPDF_VariableText_Provider* CPDF_VariableText::SetProvider(IPDF_VariableText
_Provider * pProvider) | 1680 IPDF_VariableText_Provider* CPDF_VariableText::SetProvider(IPDF_VariableText
_Provider * pProvider) |
1684 { | 1681 { |
1685 IPDF_VariableText_Provider* pOld = m_pVTProvider; | 1682 IPDF_VariableText_Provider* pOld = m_pVTProvider; |
1686 m_pVTProvider = pProvider; | 1683 m_pVTProvider = pProvider; |
1687 return pOld; | 1684 return pOld; |
1688 } | 1685 } |
1689 CPDF_VariableText_Iterator::CPDF_VariableText_Iterator(CPDF_VariableText * pVT): | 1686 CPDF_VariableText_Iterator::CPDF_VariableText_Iterator(CPDF_VariableText * pVT): |
1690 m_CurPos(-1, -1, -1), | 1687 m_CurPos(-1, -1, -1), |
1691 m_pVT(pVT) | 1688 m_pVT(pVT) |
1692 { | 1689 { |
1693 } | 1690 } |
1694 CPDF_VariableText_Iterator::~CPDF_VariableText_Iterator() | 1691 CPDF_VariableText_Iterator::~CPDF_VariableText_Iterator() |
1695 { | 1692 { |
1696 } | 1693 } |
1697 void CPDF_VariableText_Iterator::SetAt(FX_INT32 nWordIndex) | 1694 void CPDF_VariableText_Iterator::SetAt(int32_t nWordIndex) |
1698 { | 1695 { |
1699 ASSERT(m_pVT != NULL); | 1696 ASSERT(m_pVT != NULL); |
1700 m_CurPos = m_pVT->WordIndexToWordPlace(nWordIndex); | 1697 m_CurPos = m_pVT->WordIndexToWordPlace(nWordIndex); |
1701 } | 1698 } |
1702 void CPDF_VariableText_Iterator::SetAt(const CPVT_WordPlace & place) | 1699 void CPDF_VariableText_Iterator::SetAt(const CPVT_WordPlace & place) |
1703 { | 1700 { |
1704 ASSERT(m_pVT != NULL); | 1701 ASSERT(m_pVT != NULL); |
1705 m_CurPos = place; | 1702 m_CurPos = place; |
1706 } | 1703 } |
1707 FX_BOOL CPDF_VariableText_Iterator::NextWord() | 1704 FX_BOOL CPDF_VariableText_Iterator::NextWord() |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1854 if (pSection->m_SecInfo.pSecProps) { | 1851 if (pSection->m_SecInfo.pSecProps) { |
1855 *pSection->m_SecInfo.pSecProps = section.SecProps; | 1852 *pSection->m_SecInfo.pSecProps = section.SecProps; |
1856 } | 1853 } |
1857 if (pSection->m_SecInfo.pWordProps) { | 1854 if (pSection->m_SecInfo.pWordProps) { |
1858 *pSection->m_SecInfo.pWordProps = section.WordProps; | 1855 *pSection->m_SecInfo.pWordProps = section.WordProps; |
1859 } | 1856 } |
1860 return TRUE; | 1857 return TRUE; |
1861 } | 1858 } |
1862 return FALSE; | 1859 return FALSE; |
1863 } | 1860 } |
OLD | NEW |