OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fde/tto/fde_textout.h" | 7 #include "xfa/fde/tto/fde_textout.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 | 10 |
11 #include "core/fxcrt/include/fx_coordinates.h" | 11 #include "core/fxcrt/include/fx_coordinates.h" |
12 #include "core/fxcrt/include/fx_system.h" | 12 #include "core/fxcrt/include/fx_system.h" |
13 #include "xfa/fde/cfde_path.h" | 13 #include "xfa/fde/cfde_path.h" |
14 #include "xfa/fde/fde_gedevice.h" | 14 #include "xfa/fde/fde_gedevice.h" |
15 #include "xfa/fde/fde_object.h" | 15 #include "xfa/fde/fde_object.h" |
16 #include "xfa/fgas/crt/fgas_memory.h" | 16 #include "xfa/fgas/crt/fgas_memory.h" |
17 #include "xfa/fgas/crt/fgas_utils.h" | 17 #include "xfa/fgas/crt/fgas_utils.h" |
18 #include "xfa/fgas/layout/fgas_textbreak.h" | 18 #include "xfa/fgas/layout/fgas_textbreak.h" |
19 | 19 |
20 CFDE_TextOut::CFDE_TextOut() | 20 CFDE_TextOut::CFDE_TextOut() |
21 : m_pFont(NULL), | 21 : m_pFont(nullptr), |
22 m_fFontSize(12.0f), | 22 m_fFontSize(12.0f), |
23 m_fLineSpace(m_fFontSize), | 23 m_fLineSpace(m_fFontSize), |
24 m_fLinePos(0.0f), | 24 m_fLinePos(0.0f), |
25 m_fTolerance(0.0f), | 25 m_fTolerance(0.0f), |
26 m_iAlignment(0), | 26 m_iAlignment(0), |
27 m_iTxtBkAlignment(0), | 27 m_iTxtBkAlignment(0), |
28 m_pCharWidths(NULL), | 28 m_pCharWidths(nullptr), |
29 m_iChars(0), | 29 m_iChars(0), |
30 m_pEllCharWidths(NULL), | 30 m_pEllCharWidths(nullptr), |
31 m_iEllChars(0), | 31 m_iEllChars(0), |
32 m_wParagraphBkChar(L'\n'), | 32 m_wParagraphBkChar(L'\n'), |
33 m_TxtColor(0xFF000000), | 33 m_TxtColor(0xFF000000), |
34 m_dwStyles(0), | 34 m_dwStyles(0), |
35 m_dwTxtBkStyles(0), | 35 m_dwTxtBkStyles(0), |
36 m_bElliChanged(FALSE), | 36 m_bElliChanged(FALSE), |
37 m_iEllipsisWidth(0), | 37 m_iEllipsisWidth(0), |
38 m_ttoLines(5), | 38 m_ttoLines(5), |
39 m_iCurLine(0), | 39 m_iCurLine(0), |
40 m_iCurPiece(0), | 40 m_iCurPiece(0), |
41 m_iTotalLines(0), | 41 m_iTotalLines(0), |
42 m_pCharPos(NULL), | 42 m_pCharPos(nullptr), |
43 m_iCharPosSize(0) { | 43 m_iCharPosSize(0) { |
44 m_pTxtBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); | 44 m_pTxtBreak = new CFX_TxtBreak(FX_TXTBREAKPOLICY_None); |
45 m_Matrix.SetIdentity(); | 45 m_Matrix.SetIdentity(); |
46 m_rtClip.Reset(); | 46 m_rtClip.Reset(); |
47 m_rtLogicClip.Reset(); | 47 m_rtLogicClip.Reset(); |
48 } | 48 } |
49 CFDE_TextOut::~CFDE_TextOut() { | 49 CFDE_TextOut::~CFDE_TextOut() { |
50 delete m_pTxtBreak; | 50 delete m_pTxtBreak; |
51 FX_Free(m_pCharWidths); | 51 FX_Free(m_pCharWidths); |
52 FX_Free(m_pEllCharWidths); | 52 FX_Free(m_pEllCharWidths); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 CFX_RectF rtText; | 184 CFX_RectF rtText; |
185 rtText.Set((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, (FX_FLOAT)rect.Width(), | 185 rtText.Set((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, (FX_FLOAT)rect.Width(), |
186 (FX_FLOAT)rect.Height()); | 186 (FX_FLOAT)rect.Height()); |
187 CalcSize(pwsStr, iLength, rtText); | 187 CalcSize(pwsStr, iLength, rtText); |
188 rect.Set((int32_t)rtText.left, (int32_t)rtText.top, (int32_t)rtText.Width(), | 188 rect.Set((int32_t)rtText.left, (int32_t)rtText.top, (int32_t)rtText.Width(), |
189 (int32_t)rtText.Height()); | 189 (int32_t)rtText.Height()); |
190 } | 190 } |
191 void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, | 191 void CFDE_TextOut::CalcSize(const FX_WCHAR* pwsStr, |
192 int32_t iLength, | 192 int32_t iLength, |
193 CFX_RectF& rect) { | 193 CFX_RectF& rect) { |
194 if (pwsStr == NULL || iLength < 1) { | 194 if (!pwsStr || iLength < 1) { |
195 rect.width = 0.0f; | 195 rect.width = 0.0f; |
196 rect.height = 0.0f; | 196 rect.height = 0.0f; |
197 } else { | 197 } else { |
198 CFX_Matrix rm; | 198 CFX_Matrix rm; |
199 rm.SetReverse(m_Matrix); | 199 rm.SetReverse(m_Matrix); |
200 rm.TransformRect(rect); | 200 rm.TransformRect(rect); |
201 CalcTextSize(pwsStr, iLength, rect); | 201 CalcTextSize(pwsStr, iLength, rect); |
202 m_Matrix.TransformRect(rect); | 202 m_Matrix.TransformRect(rect); |
203 } | 203 } |
204 } | 204 } |
205 void CFDE_TextOut::CalcLogicSize(const FX_WCHAR* pwsStr, | 205 void CFDE_TextOut::CalcLogicSize(const FX_WCHAR* pwsStr, |
206 int32_t iLength, | 206 int32_t iLength, |
207 CFX_SizeF& size) { | 207 CFX_SizeF& size) { |
208 CFX_RectF rtText; | 208 CFX_RectF rtText; |
209 rtText.Set(0.0f, 0.0f, size.x, size.y); | 209 rtText.Set(0.0f, 0.0f, size.x, size.y); |
210 CalcLogicSize(pwsStr, iLength, rtText); | 210 CalcLogicSize(pwsStr, iLength, rtText); |
211 size.x = rtText.Width(); | 211 size.x = rtText.Width(); |
212 size.y = rtText.Height(); | 212 size.y = rtText.Height(); |
213 } | 213 } |
214 void CFDE_TextOut::CalcLogicSize(const FX_WCHAR* pwsStr, | 214 void CFDE_TextOut::CalcLogicSize(const FX_WCHAR* pwsStr, |
215 int32_t iLength, | 215 int32_t iLength, |
216 CFX_RectF& rect) { | 216 CFX_RectF& rect) { |
217 if (pwsStr == NULL || iLength < 1) { | 217 if (!pwsStr || iLength < 1) { |
218 rect.width = 0.0f; | 218 rect.width = 0.0f; |
219 rect.height = 0.0f; | 219 rect.height = 0.0f; |
220 } else { | 220 } else { |
221 CalcTextSize(pwsStr, iLength, rect); | 221 CalcTextSize(pwsStr, iLength, rect); |
222 } | 222 } |
223 } | 223 } |
224 void CFDE_TextOut::CalcTextSize(const FX_WCHAR* pwsStr, | 224 void CFDE_TextOut::CalcTextSize(const FX_WCHAR* pwsStr, |
225 int32_t iLength, | 225 int32_t iLength, |
226 CFX_RectF& rect) { | 226 CFX_RectF& rect) { |
227 ASSERT(m_pFont != NULL && m_fFontSize >= 1.0f); | 227 ASSERT(m_pFont && m_fFontSize >= 1.0f); |
228 SetLineWidth(rect); | 228 SetLineWidth(rect); |
229 m_iTotalLines = 0; | 229 m_iTotalLines = 0; |
230 const FX_WCHAR* pStr = pwsStr; | 230 const FX_WCHAR* pStr = pwsStr; |
231 FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); | 231 FX_BOOL bHotKey = !!(m_dwStyles & FDE_TTOSTYLE_HotKey); |
232 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); | 232 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); |
233 FX_FLOAT fWidth = 0.0f; | 233 FX_FLOAT fWidth = 0.0f; |
234 FX_FLOAT fHeight = 0.0f; | 234 FX_FLOAT fHeight = 0.0f; |
235 FX_FLOAT fStartPos = bVertical ? rect.bottom() : rect.right(); | 235 FX_FLOAT fStartPos = bVertical ? rect.bottom() : rect.right(); |
236 uint32_t dwBreakStatus = 0; | 236 uint32_t dwBreakStatus = 0; |
237 FX_WCHAR wPreChar = 0; | 237 FX_WCHAR wPreChar = 0; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 CFX_RectF rtClip; | 379 CFX_RectF rtClip; |
380 rtClip.Set(m_rtLogicClip.left, m_rtLogicClip.top, m_rtLogicClip.width, | 380 rtClip.Set(m_rtLogicClip.left, m_rtLogicClip.top, m_rtLogicClip.width, |
381 m_rtLogicClip.height); | 381 m_rtLogicClip.height); |
382 m_Matrix.TransformRect(rtClip); | 382 m_Matrix.TransformRect(rtClip); |
383 DrawText(pwsStr, iLength, rect, rtClip); | 383 DrawText(pwsStr, iLength, rect, rtClip); |
384 } | 384 } |
385 void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, | 385 void CFDE_TextOut::DrawText(const FX_WCHAR* pwsStr, |
386 int32_t iLength, | 386 int32_t iLength, |
387 const CFX_RectF& rect, | 387 const CFX_RectF& rect, |
388 const CFX_RectF& rtClip) { | 388 const CFX_RectF& rtClip) { |
389 ASSERT(m_pFont != NULL && m_fFontSize >= 1.0f); | 389 ASSERT(m_pFont && m_fFontSize >= 1.0f); |
390 if (pwsStr == NULL || iLength < 1) { | 390 if (!pwsStr || iLength < 1) |
391 return; | 391 return; |
392 } | 392 |
393 if (rect.width < m_fFontSize || rect.height < m_fFontSize) { | 393 if (rect.width < m_fFontSize || rect.height < m_fFontSize) { |
394 return; | 394 return; |
395 } | 395 } |
396 FX_FLOAT fLineWidth = rect.width; | 396 FX_FLOAT fLineWidth = rect.width; |
397 if (m_dwStyles & FDE_TTOSTYLE_VerticalLayout) { | 397 if (m_dwStyles & FDE_TTOSTYLE_VerticalLayout) { |
398 fLineWidth = rect.height; | 398 fLineWidth = rect.height; |
399 } | 399 } |
400 m_pTxtBreak->SetLineWidth(fLineWidth); | 400 m_pTxtBreak->SetLineWidth(fLineWidth); |
401 m_ttoLines.RemoveAll(TRUE); | 401 m_ttoLines.RemoveAll(TRUE); |
402 m_wsText.clear(); | 402 m_wsText.clear(); |
(...skipping 21 matching lines...) Expand all Loading... |
424 if (!m_pEllCharWidths) { | 424 if (!m_pEllCharWidths) { |
425 m_pEllCharWidths = FX_Alloc(int32_t, iSize); | 425 m_pEllCharWidths = FX_Alloc(int32_t, iSize); |
426 m_iEllChars = iSize; | 426 m_iEllChars = iSize; |
427 } else if (m_iEllChars < iSize) { | 427 } else if (m_iEllChars < iSize) { |
428 m_pEllCharWidths = FX_Realloc(int32_t, m_pEllCharWidths, iSize); | 428 m_pEllCharWidths = FX_Realloc(int32_t, m_pEllCharWidths, iSize); |
429 m_iEllChars = iSize; | 429 m_iEllChars = iSize; |
430 } | 430 } |
431 FXSYS_memset(m_pEllCharWidths, 0, iSize * sizeof(int32_t)); | 431 FXSYS_memset(m_pEllCharWidths, 0, iSize * sizeof(int32_t)); |
432 break; | 432 break; |
433 case 2: | 433 case 2: |
434 if (m_pCharPos == NULL) { | 434 if (!m_pCharPos) { |
435 m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, iSize); | 435 m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, iSize); |
436 m_iCharPosSize = iSize; | 436 m_iCharPosSize = iSize; |
437 } else if (m_iCharPosSize < iSize) { | 437 } else if (m_iCharPosSize < iSize) { |
438 m_pCharPos = FX_Realloc(FXTEXT_CHARPOS, m_pCharPos, iSize); | 438 m_pCharPos = FX_Realloc(FXTEXT_CHARPOS, m_pCharPos, iSize); |
439 m_iCharPosSize = iSize; | 439 m_iCharPosSize = iSize; |
440 } | 440 } |
441 break; | 441 break; |
442 } | 442 } |
443 } | 443 } |
444 void CFDE_TextOut::LoadEllipsis() { | 444 void CFDE_TextOut::LoadEllipsis() { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 } | 506 } |
507 m_hotKeys.RemoveAll(); | 507 m_hotKeys.RemoveAll(); |
508 int32_t iStartChar = 0; | 508 int32_t iStartChar = 0; |
509 int32_t iChars = 0; | 509 int32_t iChars = 0; |
510 int32_t iPieceWidths = 0; | 510 int32_t iPieceWidths = 0; |
511 uint32_t dwBreakStatus; | 511 uint32_t dwBreakStatus; |
512 FX_WCHAR wch; | 512 FX_WCHAR wch; |
513 FX_BOOL bRet = FALSE; | 513 FX_BOOL bRet = FALSE; |
514 while (iTxtLength-- > 0) { | 514 while (iTxtLength-- > 0) { |
515 wch = *pwsStr++; | 515 wch = *pwsStr++; |
516 if (wch == L'&' && bHotKey && (pStr - 1) != NULL && *(pStr - 1) != L'&') { | 516 if (wch == L'&' && bHotKey && pStr - 1 && *(pStr - 1) != L'&') { |
517 if (iTxtLength > 0) { | 517 if (iTxtLength > 0) { |
518 m_hotKeys.Add(iChars); | 518 m_hotKeys.Add(iChars); |
519 } | 519 } |
520 continue; | 520 continue; |
521 } | 521 } |
522 *pStr++ = wch; | 522 *pStr++ = wch; |
523 iChars++; | 523 iChars++; |
524 dwBreakStatus = m_pTxtBreak->AppendChar(wch); | 524 dwBreakStatus = m_pTxtBreak->AppendChar(wch); |
525 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { | 525 if (dwBreakStatus > FX_TXTBREAK_PieceBreak) { |
526 FX_BOOL bEndofLine = | 526 FX_BOOL bEndofLine = |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 FX_BOOL bReload, | 558 FX_BOOL bReload, |
559 const CFX_RectF& rect) { | 559 const CFX_RectF& rect) { |
560 FX_BOOL bSingleLine = !!(m_dwStyles & FDE_TTOSTYLE_SingleLine); | 560 FX_BOOL bSingleLine = !!(m_dwStyles & FDE_TTOSTYLE_SingleLine); |
561 FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); | 561 FX_BOOL bLineWrap = !!(m_dwStyles & FDE_TTOSTYLE_LineWrap); |
562 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); | 562 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); |
563 FX_FLOAT fLineStep = | 563 FX_FLOAT fLineStep = |
564 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; | 564 (m_fLineSpace > m_fFontSize) ? m_fLineSpace : m_fFontSize; |
565 if (bVertical) { | 565 if (bVertical) { |
566 fLineStep = -fLineStep; | 566 fLineStep = -fLineStep; |
567 } | 567 } |
568 CFX_Char* pTC = NULL; | 568 CFX_Char* pTC = nullptr; |
569 FX_BOOL bNeedReload = FALSE; | 569 FX_BOOL bNeedReload = FALSE; |
570 FX_FLOAT fLineWidth = bVertical ? rect.Height() : rect.Width(); | 570 FX_FLOAT fLineWidth = bVertical ? rect.Height() : rect.Width(); |
571 int32_t iLineWidth = FXSYS_round(fLineWidth * 20000.0f); | 571 int32_t iLineWidth = FXSYS_round(fLineWidth * 20000.0f); |
572 int32_t iCount = m_pTxtBreak->CountBreakPieces(); | 572 int32_t iCount = m_pTxtBreak->CountBreakPieces(); |
573 for (int32_t i = 0; i < iCount; i++) { | 573 for (int32_t i = 0; i < iCount; i++) { |
574 const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); | 574 const CFX_TxtPiece* pPiece = m_pTxtBreak->GetBreakPiece(i); |
575 int32_t iPieceChars = pPiece->GetLength(); | 575 int32_t iPieceChars = pPiece->GetLength(); |
576 int32_t iChar = iStartChar; | 576 int32_t iChar = iStartChar; |
577 int32_t iWidth = 0; | 577 int32_t iWidth = 0; |
578 int32_t j = 0; | 578 int32_t j = 0; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); | 656 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); |
657 if (!pLine->m_bNewReload) { | 657 if (!pLine->m_bNewReload) { |
658 continue; | 658 continue; |
659 } | 659 } |
660 int32_t iEllipsisCharIndex = iLength - 1; | 660 int32_t iEllipsisCharIndex = iLength - 1; |
661 int32_t iCharWidth = 0; | 661 int32_t iCharWidth = 0; |
662 int32_t iCharCount = 0; | 662 int32_t iCharCount = 0; |
663 int32_t iPiece = pLine->GetSize(); | 663 int32_t iPiece = pLine->GetSize(); |
664 while (iPiece-- > 0) { | 664 while (iPiece-- > 0) { |
665 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(iPiece); | 665 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(iPiece); |
666 if (pPiece == NULL) { | 666 if (!pPiece) |
667 break; | 667 break; |
668 } | 668 |
669 for (int32_t j = pPiece->iChars - 1; j >= 0; j--) { | 669 for (int32_t j = pPiece->iChars - 1; j >= 0; j--) { |
670 if (iEllipsisCharIndex < 0) { | 670 if (iEllipsisCharIndex < 0) { |
671 break; | 671 break; |
672 } | 672 } |
673 int32_t index = pPiece->iStartChar + j; | 673 int32_t index = pPiece->iStartChar + j; |
674 iCharWidth += m_pCharWidths[index]; | 674 iCharWidth += m_pCharWidths[index]; |
675 iCharCount++; | 675 iCharCount++; |
676 if (iCharCount <= iLength) { | 676 if (iCharCount <= iLength) { |
677 m_wsText.SetAt(index, m_wsEllipsis.GetAt(iEllipsisCharIndex)); | 677 m_wsText.SetAt(index, m_wsEllipsis.GetAt(iEllipsisCharIndex)); |
678 m_pCharWidths[index] = m_pEllCharWidths[iEllipsisCharIndex]; | 678 m_pCharWidths[index] = m_pEllCharWidths[iEllipsisCharIndex]; |
679 } else if (iCharWidth <= m_iEllipsisWidth) { | 679 } else if (iCharWidth <= m_iEllipsisWidth) { |
680 m_wsText.SetAt(index, 0); | 680 m_wsText.SetAt(index, 0); |
681 m_pCharWidths[index] = 0; | 681 m_pCharWidths[index] = 0; |
682 } | 682 } |
683 iEllipsisCharIndex--; | 683 iEllipsisCharIndex--; |
684 } | 684 } |
685 if (iEllipsisCharIndex < 0) { | 685 if (iEllipsisCharIndex < 0) { |
686 break; | 686 break; |
687 } | 687 } |
688 } | 688 } |
689 } | 689 } |
690 } | 690 } |
691 void CFDE_TextOut::Reload(const CFX_RectF& rect) { | 691 void CFDE_TextOut::Reload(const CFX_RectF& rect) { |
692 int32_t iCount = m_ttoLines.GetSize(); | 692 int32_t iCount = m_ttoLines.GetSize(); |
693 for (int32_t i = 0; i < iCount; i++) { | 693 for (int32_t i = 0; i < iCount; i++) { |
694 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); | 694 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); |
695 if (pLine == NULL || !pLine->m_bNewReload) { | 695 if (!pLine || !pLine->m_bNewReload) |
696 continue; | 696 continue; |
697 } | 697 |
698 m_iCurLine = i; | 698 m_iCurLine = i; |
699 m_iCurPiece = 0; | 699 m_iCurPiece = 0; |
700 ReloadLinePiece(pLine, rect); | 700 ReloadLinePiece(pLine, rect); |
701 } | 701 } |
702 } | 702 } |
703 void CFDE_TextOut::ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect) { | 703 void CFDE_TextOut::ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect) { |
704 const FX_WCHAR* pwsStr = m_wsText.c_str(); | 704 const FX_WCHAR* pwsStr = m_wsText.c_str(); |
705 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); | 705 FX_BOOL bVertical = !!(m_dwStyles & FDE_TTOSTYLE_VerticalLayout); |
706 int32_t iPieceWidths = 0; | 706 int32_t iPieceWidths = 0; |
707 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(0); | 707 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(0); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
767 void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { | 767 void CFDE_TextOut::OnDraw(const CFX_RectF& rtClip) { |
768 if (!m_pRenderDevice) | 768 if (!m_pRenderDevice) |
769 return; | 769 return; |
770 | 770 |
771 int32_t iLines = m_ttoLines.GetSize(); | 771 int32_t iLines = m_ttoLines.GetSize(); |
772 if (iLines < 1) | 772 if (iLines < 1) |
773 return; | 773 return; |
774 | 774 |
775 CFDE_Brush* pBrush = new CFDE_Brush; | 775 CFDE_Brush* pBrush = new CFDE_Brush; |
776 pBrush->SetColor(m_TxtColor); | 776 pBrush->SetColor(m_TxtColor); |
777 CFDE_Pen* pPen = NULL; | 777 CFDE_Pen* pPen = nullptr; |
778 m_pRenderDevice->SaveState(); | 778 m_pRenderDevice->SaveState(); |
779 if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) { | 779 if (rtClip.Width() > 0.0f && rtClip.Height() > 0.0f) { |
780 m_pRenderDevice->SetClipRect(rtClip); | 780 m_pRenderDevice->SetClipRect(rtClip); |
781 } | 781 } |
782 for (int32_t i = 0; i < iLines; i++) { | 782 for (int32_t i = 0; i < iLines; i++) { |
783 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); | 783 CFDE_TTOLine* pLine = m_ttoLines.GetPtrAt(i); |
784 int32_t iPieces = pLine->GetSize(); | 784 int32_t iPieces = pLine->GetSize(); |
785 for (int32_t j = 0; j < iPieces; j++) { | 785 for (int32_t j = 0; j < iPieces; j++) { |
786 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(j); | 786 FDE_TTOPIECE* pPiece = pLine->GetPtrAt(j); |
787 if (pPiece == NULL) { | 787 if (!pPiece) |
788 continue; | 788 continue; |
789 } | 789 |
790 int32_t iCount = GetDisplayPos(pPiece); | 790 int32_t iCount = GetDisplayPos(pPiece); |
791 if (iCount > 0) { | 791 if (iCount > 0) { |
792 m_pRenderDevice->DrawString(pBrush, m_pFont, m_pCharPos, iCount, | 792 m_pRenderDevice->DrawString(pBrush, m_pFont, m_pCharPos, iCount, |
793 m_fFontSize, &m_Matrix); | 793 m_fFontSize, &m_Matrix); |
794 } | 794 } |
795 DrawLine(pPiece, pPen); | 795 DrawLine(pPiece, pPen); |
796 } | 796 } |
797 } | 797 } |
798 m_pRenderDevice->RestoreState(); | 798 m_pRenderDevice->RestoreState(); |
799 delete pBrush; | 799 delete pBrush; |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
921 FDE_TTOPIECE& piece = m_pieces.GetAt(index); | 921 FDE_TTOPIECE& piece = m_pieces.GetAt(index); |
922 piece = ttoPiece; | 922 piece = ttoPiece; |
923 } | 923 } |
924 return index; | 924 return index; |
925 } | 925 } |
926 int32_t CFDE_TTOLine::GetSize() const { | 926 int32_t CFDE_TTOLine::GetSize() const { |
927 return m_iPieceCount; | 927 return m_iPieceCount; |
928 } | 928 } |
929 FDE_TTOPIECE* CFDE_TTOLine::GetPtrAt(int32_t index) { | 929 FDE_TTOPIECE* CFDE_TTOLine::GetPtrAt(int32_t index) { |
930 if (index >= m_iPieceCount) { | 930 if (index >= m_iPieceCount) { |
931 return NULL; | 931 return nullptr; |
932 } | 932 } |
933 return m_pieces.GetPtrAt(index); | 933 return m_pieces.GetPtrAt(index); |
934 } | 934 } |
935 void CFDE_TTOLine::RemoveLast(int32_t iCount) { | 935 void CFDE_TTOLine::RemoveLast(int32_t iCount) { |
936 m_pieces.RemoveLast(iCount); | 936 m_pieces.RemoveLast(iCount); |
937 } | 937 } |
938 void CFDE_TTOLine::RemoveAll(FX_BOOL bLeaveMemory) { | 938 void CFDE_TTOLine::RemoveAll(FX_BOOL bLeaveMemory) { |
939 m_pieces.RemoveAll(bLeaveMemory); | 939 m_pieces.RemoveAll(bLeaveMemory); |
940 } | 940 } |
OLD | NEW |