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

Side by Side Diff: xfa/fde/tto/fde_textout.cpp

Issue 2467203003: Remove FX_BOOL from xfa. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fde/tto/fde_textout.h ('k') | xfa/fde/xml/cfx_saxreader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fde/tto/fde_textout.h" 7 #include "xfa/fde/tto/fde_textout.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 12 matching lines...) Expand all
23 m_fFontSize(12.0f), 23 m_fFontSize(12.0f),
24 m_fLineSpace(m_fFontSize), 24 m_fLineSpace(m_fFontSize),
25 m_fLinePos(0.0f), 25 m_fLinePos(0.0f),
26 m_fTolerance(0.0f), 26 m_fTolerance(0.0f),
27 m_iAlignment(0), 27 m_iAlignment(0),
28 m_iTxtBkAlignment(0), 28 m_iTxtBkAlignment(0),
29 m_wParagraphBkChar(L'\n'), 29 m_wParagraphBkChar(L'\n'),
30 m_TxtColor(0xFF000000), 30 m_TxtColor(0xFF000000),
31 m_dwStyles(0), 31 m_dwStyles(0),
32 m_dwTxtBkStyles(0), 32 m_dwTxtBkStyles(0),
33 m_bElliChanged(FALSE), 33 m_bElliChanged(false),
34 m_iEllipsisWidth(0), 34 m_iEllipsisWidth(0),
35 m_ttoLines(5), 35 m_ttoLines(5),
36 m_iCurLine(0), 36 m_iCurLine(0),
37 m_iCurPiece(0), 37 m_iCurPiece(0),
38 m_iTotalLines(0) { 38 m_iTotalLines(0) {
39 m_Matrix.SetIdentity(); 39 m_Matrix.SetIdentity();
40 m_rtClip.Reset(); 40 m_rtClip.Reset();
41 m_rtLogicClip.Reset(); 41 m_rtLogicClip.Reset();
42 } 42 }
43 43
44 CFDE_TextOut::~CFDE_TextOut() { 44 CFDE_TextOut::~CFDE_TextOut() {
45 m_ttoLines.RemoveAll(FALSE); 45 m_ttoLines.RemoveAll(false);
46 } 46 }
47 47
48 void CFDE_TextOut::SetFont(CFGAS_GEFont* pFont) { 48 void CFDE_TextOut::SetFont(CFGAS_GEFont* pFont) {
49 ASSERT(pFont); 49 ASSERT(pFont);
50 m_pFont = pFont; 50 m_pFont = pFont;
51 m_pTxtBreak->SetFont(pFont); 51 m_pTxtBreak->SetFont(pFont);
52 } 52 }
53 53
54 void CFDE_TextOut::SetFontSize(FX_FLOAT fFontSize) { 54 void CFDE_TextOut::SetFontSize(FX_FLOAT fFontSize) {
55 ASSERT(fFontSize > 0); 55 ASSERT(fFontSize > 0);
(...skipping 25 matching lines...) Expand all
81 } 81 }
82 if (dwStyles & FDE_TTOSTYLE_VerticalLayout) { 82 if (dwStyles & FDE_TTOSTYLE_VerticalLayout) {
83 m_dwTxtBkStyles |= 83 m_dwTxtBkStyles |=
84 (FX_TXTLAYOUTSTYLE_VerticalChars | FX_TXTLAYOUTSTYLE_VerticalLayout); 84 (FX_TXTLAYOUTSTYLE_VerticalChars | FX_TXTLAYOUTSTYLE_VerticalLayout);
85 } 85 }
86 m_pTxtBreak->SetLayoutStyles(m_dwTxtBkStyles); 86 m_pTxtBreak->SetLayoutStyles(m_dwTxtBkStyles);
87 } 87 }
88 88
89 void CFDE_TextOut::SetTabWidth(FX_FLOAT fTabWidth) { 89 void CFDE_TextOut::SetTabWidth(FX_FLOAT fTabWidth) {
90 ASSERT(fTabWidth > 1.0f); 90 ASSERT(fTabWidth > 1.0f);
91 m_pTxtBreak->SetTabWidth(fTabWidth, FALSE); 91 m_pTxtBreak->SetTabWidth(fTabWidth, false);
92 } 92 }
93 93
94 void CFDE_TextOut::SetEllipsisString(const CFX_WideString& wsEllipsis) { 94 void CFDE_TextOut::SetEllipsisString(const CFX_WideString& wsEllipsis) {
95 m_bElliChanged = TRUE; 95 m_bElliChanged = true;
96 m_wsEllipsis = wsEllipsis; 96 m_wsEllipsis = wsEllipsis;
97 } 97 }
98 98
99 void CFDE_TextOut::SetParagraphBreakChar(FX_WCHAR wch) { 99 void CFDE_TextOut::SetParagraphBreakChar(FX_WCHAR wch) {
100 m_wParagraphBkChar = wch; 100 m_wParagraphBkChar = wch;
101 m_pTxtBreak->SetParagraphBreakChar(wch); 101 m_pTxtBreak->SetParagraphBreakChar(wch);
102 } 102 }
103 103
104 void CFDE_TextOut::SetAlignment(int32_t iAlignment) { 104 void CFDE_TextOut::SetAlignment(int32_t iAlignment) {
105 m_iAlignment = iAlignment; 105 m_iAlignment = iAlignment;
(...skipping 19 matching lines...) Expand all
125 ASSERT(fLineSpace > 1.0f); 125 ASSERT(fLineSpace > 1.0f);
126 m_fLineSpace = fLineSpace; 126 m_fLineSpace = fLineSpace;
127 } 127 }
128 128
129 void CFDE_TextOut::SetDIBitmap(CFX_DIBitmap* pDIB) { 129 void CFDE_TextOut::SetDIBitmap(CFX_DIBitmap* pDIB) {
130 ASSERT(pDIB); 130 ASSERT(pDIB);
131 131
132 m_pRenderDevice.reset(); 132 m_pRenderDevice.reset();
133 CFX_FxgeDevice* device = new CFX_FxgeDevice; 133 CFX_FxgeDevice* device = new CFX_FxgeDevice;
134 device->Attach(pDIB, false, nullptr, false); 134 device->Attach(pDIB, false, nullptr, false);
135 m_pRenderDevice.reset(new CFDE_RenderDevice(device, FALSE)); 135 m_pRenderDevice.reset(new CFDE_RenderDevice(device, false));
136 } 136 }
137 137
138 void CFDE_TextOut::SetRenderDevice(CFX_RenderDevice* pDevice) { 138 void CFDE_TextOut::SetRenderDevice(CFX_RenderDevice* pDevice) {
139 ASSERT(pDevice); 139 ASSERT(pDevice);
140 m_pRenderDevice.reset(new CFDE_RenderDevice(pDevice, FALSE)); 140 m_pRenderDevice.reset(new CFDE_RenderDevice(pDevice, false));
141 } 141 }
142 142
143 void CFDE_TextOut::SetClipRect(const CFX_Rect& rtClip) { 143 void CFDE_TextOut::SetClipRect(const CFX_Rect& rtClip) {
144 m_rtClip.Set((FX_FLOAT)rtClip.left, (FX_FLOAT)rtClip.top, 144 m_rtClip.Set((FX_FLOAT)rtClip.left, (FX_FLOAT)rtClip.top,
145 (FX_FLOAT)rtClip.Width(), (FX_FLOAT)rtClip.Height()); 145 (FX_FLOAT)rtClip.Width(), (FX_FLOAT)rtClip.Height());
146 } 146 }
147 147
148 void CFDE_TextOut::SetClipRect(const CFX_RectF& rtClip) { 148 void CFDE_TextOut::SetClipRect(const CFX_RectF& rtClip) {
149 m_rtClip = rtClip; 149 m_rtClip = rtClip;
150 } 150 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 } 233 }
234 } 234 }
235 235
236 void CFDE_TextOut::CalcTextSize(const FX_WCHAR* pwsStr, 236 void CFDE_TextOut::CalcTextSize(const FX_WCHAR* pwsStr,
237 int32_t iLength, 237 int32_t iLength,
238 CFX_RectF& rect) { 238 CFX_RectF& rect) {
239 ASSERT(m_pFont && m_fFontSize >= 1.0f); 239 ASSERT(m_pFont && m_fFontSize >= 1.0f);
240 SetLineWidth(rect); 240 SetLineWidth(rect);
241 m_iTotalLines = 0; 241 m_iTotalLines = 0;
242 const FX_WCHAR* pStr = pwsStr; 242 const FX_WCHAR* pStr = pwsStr;
243 FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); 243 bool bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey);
244 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); 244 bool bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout);
245 FX_FLOAT fWidth = 0.0f; 245 FX_FLOAT fWidth = 0.0f;
246 FX_FLOAT fHeight = 0.0f; 246 FX_FLOAT fHeight = 0.0f;
247 FX_FLOAT fStartPos = bVertical ? rect.bottom() : rect.right(); 247 FX_FLOAT fStartPos = bVertical ? rect.bottom() : rect.right();
248 uint32_t dwBreakStatus = 0; 248 uint32_t dwBreakStatus = 0;
249 FX_WCHAR wPreChar = 0; 249 FX_WCHAR wPreChar = 0;
250 FX_WCHAR wch; 250 FX_WCHAR wch;
251 FX_WCHAR wBreak = 0; 251 FX_WCHAR wBreak = 0;
252 while (iLength-- > 0) { 252 while (iLength-- > 0) {
253 wch = *pStr++; 253 wch = *pStr++;
254 if (wBreak == 0 && (wch == L'\n' || wch == L'\r')) { 254 if (wBreak == 0 && (wch == L'\n' || wch == L'\r')) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 } else { 307 } else {
308 if (rect.Width() < 1.0f) { 308 if (rect.Width() < 1.0f) {
309 rect.width = m_fFontSize * 1000.0f; 309 rect.width = m_fFontSize * 1000.0f;
310 } 310 }
311 fLineWidth = rect.Width(); 311 fLineWidth = rect.Width();
312 } 312 }
313 m_pTxtBreak->SetLineWidth(fLineWidth); 313 m_pTxtBreak->SetLineWidth(fLineWidth);
314 } 314 }
315 } 315 }
316 316
317 FX_BOOL CFDE_TextOut::RetrieveLineWidth(uint32_t dwBreakStatus, 317 bool CFDE_TextOut::RetrieveLineWidth(uint32_t dwBreakStatus,
318 FX_FLOAT& fStartPos, 318 FX_FLOAT& fStartPos,
319 FX_FLOAT& fWidth, 319 FX_FLOAT& fWidth,
320 FX_FLOAT& fHeight) { 320 FX_FLOAT& fHeight) {
321 if (dwBreakStatus <= FX_TXTBREAK_PieceBreak) { 321 if (dwBreakStatus <= FX_TXTBREAK_PieceBreak) {
322 return FALSE; 322 return false;
323 } 323 }
324 FX_FLOAT fLineStep = 324 FX_FLOAT fLineStep =
325 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; 325 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize;
326 FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); 326 bool bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap);
327 FX_FLOAT fLineWidth = 0.0f; 327 FX_FLOAT fLineWidth = 0.0f;
328 int32_t iCount = m_pTxtBreak->CountBreakPieces(); 328 int32_t iCount = m_pTxtBreak->CountBreakPieces();
329 for (int32_t i = 0; i < iCount; i++) { 329 for (int32_t i = 0; i < iCount; i++) {
330 const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); 330 const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i);
331 fLineWidth += (FX_FLOAT)pPiece->m_iWidth / 20000.0f; 331 fLineWidth += (FX_FLOAT)pPiece->m_iWidth / 20000.0f;
332 fStartPos = std::min(fStartPos, (FX_FLOAT)pPiece->m_iStartPos / 20000.0f); 332 fStartPos = std::min(fStartPos, (FX_FLOAT)pPiece->m_iStartPos / 20000.0f);
333 } 333 }
334 m_pTxtBreak->ClearBreakPieces(); 334 m_pTxtBreak->ClearBreakPieces();
335 if (dwBreakStatus == FX_TXTBREAK_ParagraphBreak) { 335 if (dwBreakStatus == FX_TXTBREAK_ParagraphBreak) {
336 m_pTxtBreak->Reset(); 336 m_pTxtBreak->Reset();
337 } 337 }
338 if (!bLineWrap && dwBreakStatus == FX_TXTBREAK_LineBreak) { 338 if (!bLineWrap && dwBreakStatus == FX_TXTBREAK_LineBreak) {
339 fWidth += fLineWidth; 339 fWidth += fLineWidth;
340 } else { 340 } else {
341 fWidth = std::max(fWidth, fLineWidth); 341 fWidth = std::max(fWidth, fLineWidth);
342 fHeight += fLineStep; 342 fHeight += fLineStep;
343 } 343 }
344 m_iTotalLines++; 344 m_iTotalLines++;
345 return TRUE; 345 return true;
346 } 346 }
347 347
348 void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, 348 void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr,
349 int32_t iLength, 349 int32_t iLength,
350 int32_t x, 350 int32_t x,
351 int32_t y) { 351 int32_t y) {
352 CFX_RectF rtText; 352 CFX_RectF rtText;
353 rtText.Set((FX_FLOAT)x, (FX_FLOAT)y, m_fFontSize * 1000.0f, 353 rtText.Set((FX_FLOAT)x, (FX_FLOAT)y, m_fFontSize * 1000.0f,
354 m_fFontSize * 1000.0f); 354 m_fFontSize * 1000.0f);
355 DrawText(pwsStr, iLength, rtText); 355 DrawText(pwsStr, iLength, rtText);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 return; 412 return;
413 413
414 if (rect.width < m_fFontSize || rect.height < m_fFontSize) { 414 if (rect.width < m_fFontSize || rect.height < m_fFontSize) {
415 return; 415 return;
416 } 416 }
417 FX_FLOAT fLineWidth = rect.width; 417 FX_FLOAT fLineWidth = rect.width;
418 if (m_dwStyles & FDE_TTOSTYLE_VerticalLayout) { 418 if (m_dwStyles & FDE_TTOSTYLE_VerticalLayout) {
419 fLineWidth = rect.height; 419 fLineWidth = rect.height;
420 } 420 }
421 m_pTxtBreak->SetLineWidth(fLineWidth); 421 m_pTxtBreak->SetLineWidth(fLineWidth);
422 m_ttoLines.RemoveAll(TRUE); 422 m_ttoLines.RemoveAll(true);
423 m_wsText.clear(); 423 m_wsText.clear();
424 LoadText(pwsStr, iLength, rect); 424 LoadText(pwsStr, iLength, rect);
425 if (m_dwStyles & FDE_TTOSTYLE_Ellipsis) { 425 if (m_dwStyles & FDE_TTOSTYLE_Ellipsis) {
426 ReplaceWidthEllipsis(); 426 ReplaceWidthEllipsis();
427 } 427 }
428 Reload(rect); 428 Reload(rect);
429 DoAlignment(rect); 429 DoAlignment(rect);
430 OnDraw(rtClip); 430 OnDraw(rtClip);
431 } 431 }
432 432
(...skipping 13 matching lines...) Expand all
446 if (m_CharPos.size() < size) 446 if (m_CharPos.size() < size)
447 m_CharPos.resize(size, FXTEXT_CHARPOS()); 447 m_CharPos.resize(size, FXTEXT_CHARPOS());
448 break; 448 break;
449 } 449 }
450 } 450 }
451 451
452 void CFDE_TextOut::LoadEllipsis() { 452 void CFDE_TextOut::LoadEllipsis() {
453 if (!m_bElliChanged) { 453 if (!m_bElliChanged) {
454 return; 454 return;
455 } 455 }
456 m_bElliChanged = FALSE; 456 m_bElliChanged = false;
457 m_iEllipsisWidth = 0; 457 m_iEllipsisWidth = 0;
458 int32_t iLength = m_wsEllipsis.GetLength(); 458 int32_t iLength = m_wsEllipsis.GetLength();
459 if (iLength < 1) { 459 if (iLength < 1) {
460 return; 460 return;
461 } 461 }
462 ExpandBuffer(iLength, 1); 462 ExpandBuffer(iLength, 1);
463 const FX_WCHAR* pStr = m_wsEllipsis.c_str(); 463 const FX_WCHAR* pStr = m_wsEllipsis.c_str();
464 uint32_t dwBreakStatus; 464 uint32_t dwBreakStatus;
465 FX_WCHAR wch; 465 FX_WCHAR wch;
466 while (iLength-- > 0) { 466 while (iLength-- > 0) {
(...skipping 23 matching lines...) Expand all
490 } 490 }
491 m_pTxtBreak->ClearBreakPieces(); 491 m_pTxtBreak->ClearBreakPieces();
492 } 492 }
493 493
494 void CFDE_TextOut::LoadText(const FX_WCHAR* pwsStr, 494 void CFDE_TextOut::LoadText(const FX_WCHAR* pwsStr,
495 int32_t iLength, 495 int32_t iLength,
496 const CFX_RectF& rect) { 496 const CFX_RectF& rect) {
497 FX_WCHAR* pStr = m_wsText.GetBuffer(iLength); 497 FX_WCHAR* pStr = m_wsText.GetBuffer(iLength);
498 int32_t iTxtLength = iLength; 498 int32_t iTxtLength = iLength;
499 ExpandBuffer(iTxtLength, 0); 499 ExpandBuffer(iTxtLength, 0);
500 FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); 500 bool bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey);
501 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); 501 bool bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout);
502 FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); 502 bool bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap);
503 FX_FLOAT fLineStep = 503 FX_FLOAT fLineStep =
504 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; 504 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize;
505 FX_FLOAT fLineStop = bVertical ? rect.left : rect.bottom(); 505 FX_FLOAT fLineStop = bVertical ? rect.left : rect.bottom();
506 m_fLinePos = bVertical ? rect.right() : rect.top; 506 m_fLinePos = bVertical ? rect.right() : rect.top;
507 if (bVertical) { 507 if (bVertical) {
508 fLineStep = -fLineStep; 508 fLineStep = -fLineStep;
509 } 509 }
510 m_hotKeys.RemoveAll(); 510 m_hotKeys.RemoveAll();
511 int32_t iStartChar = 0; 511 int32_t iStartChar = 0;
512 int32_t iChars = 0; 512 int32_t iChars = 0;
513 int32_t iPieceWidths = 0; 513 int32_t iPieceWidths = 0;
514 uint32_t dwBreakStatus; 514 uint32_t dwBreakStatus;
515 FX_WCHAR wch; 515 FX_WCHAR wch;
516 FX_BOOL bRet = FALSE; 516 bool bRet = false;
517 while (iTxtLength-- > 0) { 517 while (iTxtLength-- > 0) {
518 wch = *pwsStr++; 518 wch = *pwsStr++;
519 if (bHotKey && wch == L'&' && *(pStr - 1) != L'&') { 519 if (bHotKey && wch == L'&' && *(pStr - 1) != L'&') {
520 if (iTxtLength > 0) 520 if (iTxtLength > 0)
521 m_hotKeys.Add(iChars); 521 m_hotKeys.Add(iChars);
522 continue; 522 continue;
523 } 523 }
524 *pStr++ = wch; 524 *pStr++ = wch;
525 iChars++; 525 iChars++;
526 dwBreakStatus = m_pTxtBreak->AppendChar(wch); 526 dwBreakStatus = m_pTxtBreak->AppendChar(wch);
527 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { 527 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
528 FX_BOOL bEndofLine = 528 bool bEndofLine =
529 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, FALSE, rect); 529 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, false, rect);
530 if (bEndofLine && (bLineWrap || (dwBreakStatus > FX_TXTBREAK_LineBreak && 530 if (bEndofLine && (bLineWrap || (dwBreakStatus > FX_TXTBREAK_LineBreak &&
531 !bLineWrap))) { 531 !bLineWrap))) {
532 iPieceWidths = 0; 532 iPieceWidths = 0;
533 m_iCurLine++; 533 m_iCurLine++;
534 m_fLinePos += fLineStep; 534 m_fLinePos += fLineStep;
535 } 535 }
536 if ((bVertical && m_fLinePos + fLineStep < fLineStop) || 536 if ((bVertical && m_fLinePos + fLineStep < fLineStop) ||
537 (!bVertical && m_fLinePos + fLineStep > fLineStop)) { 537 (!bVertical && m_fLinePos + fLineStep > fLineStop)) {
538 int32_t iCurLine = m_iCurLine; 538 int32_t iCurLine = m_iCurLine;
539 if (bEndofLine) { 539 if (bEndofLine) {
540 iCurLine--; 540 iCurLine--;
541 } 541 }
542 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(iCurLine); 542 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(iCurLine);
543 pLine->m_bNewReload = TRUE; 543 pLine->m_bNewReload = true;
544 bRet = TRUE; 544 bRet = true;
545 break; 545 break;
546 } 546 }
547 } 547 }
548 } 548 }
549 dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); 549 dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
550 if (dwBreakStatus > FX_TXTBREAK_PieceBreak && !bRet) { 550 if (dwBreakStatus > FX_TXTBREAK_PieceBreak && !bRet) {
551 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, FALSE, rect); 551 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, false, rect);
552 } 552 }
553 m_pTxtBreak->ClearBreakPieces(); 553 m_pTxtBreak->ClearBreakPieces();
554 m_pTxtBreak->Reset(); 554 m_pTxtBreak->Reset();
555 m_wsText.ReleaseBuffer(iLength); 555 m_wsText.ReleaseBuffer(iLength);
556 } 556 }
557 557
558 FX_BOOL CFDE_TextOut::RetriecePieces(uint32_t dwBreakStatus, 558 bool CFDE_TextOut::RetriecePieces(uint32_t dwBreakStatus,
559 int32_t& iStartChar, 559 int32_t& iStartChar,
560 int32_t& iPieceWidths, 560 int32_t& iPieceWidths,
561 FX_BOOL bReload, 561 bool bReload,
562 const CFX_RectF& rect) { 562 const CFX_RectF& rect) {
563 FX_BOOL bSingleLine = !!(m_dwStyles & FDE_TTOSTYLE_SingleLine); 563 bool bSingleLine = !!(m_dwStyles & FDE_TTOSTYLE_SingleLine);
564 FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); 564 bool bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap);
565 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); 565 bool bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout);
566 FX_FLOAT fLineStep = 566 FX_FLOAT fLineStep =
567 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; 567 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize;
568 if (bVertical) { 568 if (bVertical) {
569 fLineStep = -fLineStep; 569 fLineStep = -fLineStep;
570 } 570 }
571 CFX_Char* pTC = nullptr; 571 CFX_Char* pTC = nullptr;
572 FX_BOOL bNeedReload = FALSE; 572 bool bNeedReload = false;
573 FX_FLOAT fLineWidth = bVertical ? rect.Height() : rect.Width(); 573 FX_FLOAT fLineWidth = bVertical ? rect.Height() : rect.Width();
574 int32_t iLineWidth = FXSYS_round(fLineWidth * 20000.0f); 574 int32_t iLineWidth = FXSYS_round(fLineWidth * 20000.0f);
575 int32_t iCount = m_pTxtBreak->CountBreakPieces(); 575 int32_t iCount = m_pTxtBreak->CountBreakPieces();
576 for (int32_t i = 0; i < iCount; i++) { 576 for (int32_t i = 0; i < iCount; i++) {
577 const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); 577 const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i);
578 int32_t iPieceChars = pPiece->GetLength(); 578 int32_t iPieceChars = pPiece->GetLength();
579 int32_t iChar = iStartChar; 579 int32_t iChar = iStartChar;
580 int32_t iWidth = 0; 580 int32_t iWidth = 0;
581 int32_t j = 0; 581 int32_t j = 0;
582 for (; j < iPieceChars; j++) { 582 for (; j < iPieceChars; j++) {
583 pTC = pPiece->GetCharPtr(j); 583 pTC = pPiece->GetCharPtr(j);
584 int32_t iCurCharWidth = pTC->m_iCharWidth > 0 ? pTC->m_iCharWidth : 0; 584 int32_t iCurCharWidth = pTC->m_iCharWidth > 0 ? pTC->m_iCharWidth : 0;
585 if (bSingleLine || !bLineWrap) { 585 if (bSingleLine || !bLineWrap) {
586 if (iLineWidth - iPieceWidths - iWidth < iCurCharWidth) { 586 if (iLineWidth - iPieceWidths - iWidth < iCurCharWidth) {
587 bNeedReload = TRUE; 587 bNeedReload = true;
588 break; 588 break;
589 } 589 }
590 } 590 }
591 iWidth += iCurCharWidth; 591 iWidth += iCurCharWidth;
592 m_CharWidths[iChar++] = iCurCharWidth; 592 m_CharWidths[iChar++] = iCurCharWidth;
593 } 593 }
594 if (j == 0 && !bReload) { 594 if (j == 0 && !bReload) {
595 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(m_iCurLine); 595 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(m_iCurLine);
596 pLine->m_bNewReload = TRUE; 596 pLine->m_bNewReload = true;
597 } else if (j > 0) { 597 } else if (j > 0) {
598 CFX_RectF rtPiece; 598 CFX_RectF rtPiece;
599 if (bVertical) { 599 if (bVertical) {
600 rtPiece.left = m_fLinePos; 600 rtPiece.left = m_fLinePos;
601 rtPiece.top = rect.top + (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; 601 rtPiece.top = rect.top + (FX_FLOAT)pPiece->m_iStartPos / 20000.0f;
602 rtPiece.width = fLineStep; 602 rtPiece.width = fLineStep;
603 rtPiece.height = iWidth / 20000.0f; 603 rtPiece.height = iWidth / 20000.0f;
604 } else { 604 } else {
605 rtPiece.left = rect.left + (FX_FLOAT)pPiece->m_iStartPos / 20000.0f; 605 rtPiece.left = rect.left + (FX_FLOAT)pPiece->m_iStartPos / 20000.0f;
606 rtPiece.top = m_fLinePos; 606 rtPiece.top = m_fLinePos;
607 rtPiece.width = iWidth / 20000.0f; 607 rtPiece.width = iWidth / 20000.0f;
608 rtPiece.height = fLineStep; 608 rtPiece.height = fLineStep;
609 } 609 }
610 FDE_TTOPIECE ttoPiece; 610 FDE_TTOPIECE ttoPiece;
611 ttoPiece.iStartChar = iStartChar; 611 ttoPiece.iStartChar = iStartChar;
612 ttoPiece.iChars = j; 612 ttoPiece.iChars = j;
613 ttoPiece.rtPiece = rtPiece; 613 ttoPiece.rtPiece = rtPiece;
614 ttoPiece.dwCharStyles = pPiece->m_dwCharStyles; 614 ttoPiece.dwCharStyles = pPiece->m_dwCharStyles;
615 if (FX_IsOdd(pPiece->m_iBidiLevel)) { 615 if (FX_IsOdd(pPiece->m_iBidiLevel)) {
616 ttoPiece.dwCharStyles |= FX_TXTCHARSTYLE_OddBidiLevel; 616 ttoPiece.dwCharStyles |= FX_TXTCHARSTYLE_OddBidiLevel;
617 } 617 }
618 AppendPiece(ttoPiece, bNeedReload, (bReload && i == iCount - 1)); 618 AppendPiece(ttoPiece, bNeedReload, (bReload && i == iCount - 1));
619 } 619 }
620 iStartChar += iPieceChars; 620 iStartChar += iPieceChars;
621 iPieceWidths += iWidth; 621 iPieceWidths += iWidth;
622 } 622 }
623 m_pTxtBreak->ClearBreakPieces(); 623 m_pTxtBreak->ClearBreakPieces();
624 FX_BOOL bRet = bSingleLine || bLineWrap || (!bLineWrap && bNeedReload) || 624 bool bRet = bSingleLine || bLineWrap || (!bLineWrap && bNeedReload) ||
625 dwBreakStatus == FX_TXTBREAK_ParagraphBreak; 625 dwBreakStatus == FX_TXTBREAK_ParagraphBreak;
626 return bRet; 626 return bRet;
627 } 627 }
628 628
629 void CFDE_TextOut::AppendPiece(const FDE_TTOPIECE& ttoPiece, 629 void CFDE_TextOut::AppendPiece(const FDE_TTOPIECE& ttoPiece,
630 FX_BOOL bNeedReload, 630 bool bNeedReload,
631 FX_BOOL bEnd) { 631 bool bEnd) {
632 if (m_iCurLine >= m_ttoLines.GetSize()) { 632 if (m_iCurLine >= m_ttoLines.GetSize()) {
633 CFDE_TTOLine ttoLine; 633 CFDE_TTOLine ttoLine;
634 ttoLine.m_bNewReload = bNeedReload; 634 ttoLine.m_bNewReload = bNeedReload;
635 m_iCurPiece = ttoLine.AddPiece(m_iCurPiece, ttoPiece); 635 m_iCurPiece = ttoLine.AddPiece(m_iCurPiece, ttoPiece);
636 m_iCurLine = m_ttoLines.Add(ttoLine); 636 m_iCurLine = m_ttoLines.Add(ttoLine);
637 } else { 637 } else {
638 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(m_iCurLine); 638 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(m_iCurLine);
639 pLine->m_bNewReload = bNeedReload; 639 pLine->m_bNewReload = bNeedReload;
640 m_iCurPiece = pLine->AddPiece(m_iCurPiece, ttoPiece); 640 m_iCurPiece = pLine->AddPiece(m_iCurPiece, ttoPiece);
641 if (bEnd) { 641 if (bEnd) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 continue; 702 continue;
703 703
704 m_iCurLine = i; 704 m_iCurLine = i;
705 m_iCurPiece = 0; 705 m_iCurPiece = 0;
706 ReloadLinePiece(pLine, rect); 706 ReloadLinePiece(pLine, rect);
707 } 707 }
708 } 708 }
709 709
710 void CFDE_TextOut::ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect) { 710 void CFDE_TextOut::ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect) {
711 const FX_WCHAR* pwsStr = m_wsText.c_str(); 711 const FX_WCHAR* pwsStr = m_wsText.c_str();
712 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); 712 bool bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout);
713 int32_t iPieceWidths = 0; 713 int32_t iPieceWidths = 0;
714 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(0); 714 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(0);
715 int32_t iStartChar = pPiece->iStartChar; 715 int32_t iStartChar = pPiece->iStartChar;
716 m_fLinePos = bVertical ? pPiece->rtPiece.left : pPiece->rtPiece.top; 716 m_fLinePos = bVertical ? pPiece->rtPiece.left : pPiece->rtPiece.top;
717 int32_t iPieceCount = pLine->GetSize(); 717 int32_t iPieceCount = pLine->GetSize();
718 int32_t iPieceIndex = 0; 718 int32_t iPieceIndex = 0;
719 uint32_t dwBreakStatus = 0; 719 uint32_t dwBreakStatus = 0;
720 FX_WCHAR wch; 720 FX_WCHAR wch;
721 while (iPieceIndex < iPieceCount) { 721 while (iPieceIndex < iPieceCount) {
722 int32_t iStar = iStartChar; 722 int32_t iStar = iStartChar;
723 int32_t iEnd = pPiece->iChars + iStar; 723 int32_t iEnd = pPiece->iChars + iStar;
724 while (iStar < iEnd) { 724 while (iStar < iEnd) {
725 wch = *(pwsStr + iStar); 725 wch = *(pwsStr + iStar);
726 dwBreakStatus = m_pTxtBreak->AppendChar(wch); 726 dwBreakStatus = m_pTxtBreak->AppendChar(wch);
727 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { 727 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
728 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, TRUE, rect); 728 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, true, rect);
729 } 729 }
730 iStar++; 730 iStar++;
731 } 731 }
732 iPieceIndex++; 732 iPieceIndex++;
733 pPiece = pLine->GetPtrAt(iPieceIndex); 733 pPiece = pLine->GetPtrAt(iPieceIndex);
734 } 734 }
735 dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak); 735 dwBreakStatus = m_pTxtBreak->EndBreak(FX_TXTBREAK_ParagraphBreak);
736 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { 736 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) {
737 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, TRUE, rect); 737 RetriecePieces(dwBreakStatus, iStartChar, iPieceWidths, true, rect);
738 } 738 }
739 m_pTxtBreak->Reset(); 739 m_pTxtBreak->Reset();
740 } 740 }
741 741
742 void CFDE_TextOut::DoAlignment(const CFX_RectF& rect) { 742 void CFDE_TextOut::DoAlignment(const CFX_RectF& rect) {
743 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); 743 bool bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout);
744 FX_FLOAT fLineStopS = bVertical ? rect.right() : rect.bottom(); 744 FX_FLOAT fLineStopS = bVertical ? rect.right() : rect.bottom();
745 int32_t iLines = m_ttoLines.GetSize(); 745 int32_t iLines = m_ttoLines.GetSize();
746 if (iLines < 1) 746 if (iLines < 1)
747 return; 747 return;
748 FDE_TTOPIECE* pFirstPiece = m_ttoLines.GetPtrAt(iLines - 1)->GetPtrAt(0); 748 FDE_TTOPIECE* pFirstPiece = m_ttoLines.GetPtrAt(iLines - 1)->GetPtrAt(0);
749 if (!pFirstPiece) 749 if (!pFirstPiece)
750 return; 750 return;
751 751
752 FX_FLOAT fLineStopD = 752 FX_FLOAT fLineStopD =
753 bVertical ? pFirstPiece->rtPiece.right() : pFirstPiece->rtPiece.bottom(); 753 bVertical ? pFirstPiece->rtPiece.right() : pFirstPiece->rtPiece.bottom();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 tr.pFont = m_pFont; 829 tr.pFont = m_pFont;
830 tr.fFontSize = m_fFontSize; 830 tr.fFontSize = m_fFontSize;
831 tr.dwStyles = m_dwTxtBkStyles; 831 tr.dwStyles = m_dwTxtBkStyles;
832 tr.dwCharStyles = pPiece->dwCharStyles; 832 tr.dwCharStyles = pPiece->dwCharStyles;
833 tr.wLineBreakChar = m_wParagraphBkChar; 833 tr.wLineBreakChar = m_wParagraphBkChar;
834 tr.pRect = &pPiece->rtPiece; 834 tr.pRect = &pPiece->rtPiece;
835 return tr; 835 return tr;
836 } 836 }
837 837
838 void CFDE_TextOut::DrawLine(const FDE_TTOPIECE* pPiece, CFDE_Pen*& pPen) { 838 void CFDE_TextOut::DrawLine(const FDE_TTOPIECE* pPiece, CFDE_Pen*& pPen) {
839 FX_BOOL bUnderLine = !!(m_dwStyles & FDE_TTOSTYLE_Underline); 839 bool bUnderLine = !!(m_dwStyles & FDE_TTOSTYLE_Underline);
840 FX_BOOL bStrikeOut = !!(m_dwStyles & FDE_TTOSTYLE_Strikeout); 840 bool bStrikeOut = !!(m_dwStyles & FDE_TTOSTYLE_Strikeout);
841 FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); 841 bool bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey);
842 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); 842 bool bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout);
843 if (!bUnderLine && !bStrikeOut && !bHotKey) 843 if (!bUnderLine && !bStrikeOut && !bHotKey)
844 return; 844 return;
845 845
846 if (!pPen) { 846 if (!pPen) {
847 pPen = new CFDE_Pen; 847 pPen = new CFDE_Pen;
848 pPen->SetColor(m_TxtColor); 848 pPen->SetColor(m_TxtColor);
849 } 849 }
850 std::unique_ptr<CFDE_Path> pPath(new CFDE_Path); 850 std::unique_ptr<CFDE_Path> pPath(new CFDE_Path);
851 int32_t iLineCount = 0; 851 int32_t iLineCount = 0;
852 CFX_RectF rtText = pPiece->rtPiece; 852 CFX_RectF rtText = pPiece->rtPiece;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 iLineCount++; 905 iLineCount++;
906 } 906 }
907 } 907 }
908 } 908 }
909 } 909 }
910 if (iLineCount > 0) 910 if (iLineCount > 0)
911 m_pRenderDevice->DrawPath(pPen, 1, pPath.get(), &m_Matrix); 911 m_pRenderDevice->DrawPath(pPen, 1, pPath.get(), &m_Matrix);
912 } 912 }
913 913
914 CFDE_TTOLine::CFDE_TTOLine() 914 CFDE_TTOLine::CFDE_TTOLine()
915 : m_bNewReload(FALSE), m_pieces(5), m_iPieceCount(0) {} 915 : m_bNewReload(false), m_pieces(5), m_iPieceCount(0) {}
916 916
917 CFDE_TTOLine::CFDE_TTOLine(const CFDE_TTOLine& ttoLine) : m_pieces(5) { 917 CFDE_TTOLine::CFDE_TTOLine(const CFDE_TTOLine& ttoLine) : m_pieces(5) {
918 m_bNewReload = ttoLine.m_bNewReload; 918 m_bNewReload = ttoLine.m_bNewReload;
919 m_iPieceCount = ttoLine.m_iPieceCount; 919 m_iPieceCount = ttoLine.m_iPieceCount;
920 m_pieces.Copy(ttoLine.m_pieces, 0, -1); 920 m_pieces.Copy(ttoLine.m_pieces, 0, -1);
921 } 921 }
922 922
923 CFDE_TTOLine::~CFDE_TTOLine() {} 923 CFDE_TTOLine::~CFDE_TTOLine() {}
924 924
925 int32_t CFDE_TTOLine::AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece) { 925 int32_t CFDE_TTOLine::AddPiece(int32_t index, const FDE_TTOPIECE& ttoPiece) {
(...skipping 15 matching lines...) Expand all
941 if (index >= m_iPieceCount) { 941 if (index >= m_iPieceCount) {
942 return nullptr; 942 return nullptr;
943 } 943 }
944 return m_pieces.GetPtrAt(index); 944 return m_pieces.GetPtrAt(index);
945 } 945 }
946 946
947 void CFDE_TTOLine::RemoveLast(int32_t iCount) { 947 void CFDE_TTOLine::RemoveLast(int32_t iCount) {
948 m_pieces.RemoveLast(iCount); 948 m_pieces.RemoveLast(iCount);
949 } 949 }
950 950
951 void CFDE_TTOLine::RemoveAll(FX_BOOL bLeaveMemory) { 951 void CFDE_TTOLine::RemoveAll(bool bLeaveMemory) {
952 m_pieces.RemoveAll(bLeaveMemory); 952 m_pieces.RemoveAll(bLeaveMemory);
953 } 953 }
OLDNEW
« no previous file with comments | « xfa/fde/tto/fde_textout.h ('k') | xfa/fde/xml/cfx_saxreader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698