| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fgas/layout/fgas_rtfbreak.h" | 7 #include "xfa/fgas/layout/fgas_rtfbreak.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 #include "core/fxcrt/include/fx_arabic.h" | 11 #include "core/fxcrt/include/fx_arabic.h" |
| 12 #include "core/fxcrt/include/fx_arb.h" | 12 #include "core/fxcrt/include/fx_arb.h" |
| 13 #include "xfa/fgas/font/fgas_gefont.h" | 13 #include "xfa/fgas/font/fgas_gefont.h" |
| 14 #include "xfa/fgas/layout/fgas_linebreak.h" | 14 #include "xfa/fgas/layout/fgas_linebreak.h" |
| 15 #include "xfa/fgas/layout/fgas_unicode.h" | 15 #include "xfa/fgas/layout/fgas_unicode.h" |
| 16 | 16 |
| 17 CFX_RTFBreak::CFX_RTFBreak(uint32_t dwPolicies) | 17 CFX_RTFBreak::CFX_RTFBreak(uint32_t dwPolicies) |
| 18 : m_dwPolicies(dwPolicies), | 18 : m_dwPolicies(dwPolicies), |
| 19 m_iBoundaryStart(0), | 19 m_iBoundaryStart(0), |
| 20 m_iBoundaryEnd(2000000), | 20 m_iBoundaryEnd(2000000), |
| 21 m_dwLayoutStyles(0), | 21 m_dwLayoutStyles(0), |
| 22 m_bPagination(FALSE), | 22 m_bPagination(false), |
| 23 m_bVertical(FALSE), | 23 m_bVertical(false), |
| 24 m_bSingleLine(FALSE), | 24 m_bSingleLine(false), |
| 25 m_bCharCode(FALSE), | 25 m_bCharCode(false), |
| 26 m_pFont(nullptr), | 26 m_pFont(nullptr), |
| 27 m_iFontHeight(240), | 27 m_iFontHeight(240), |
| 28 m_iFontSize(240), | 28 m_iFontSize(240), |
| 29 m_iTabWidth(720000), | 29 m_iTabWidth(720000), |
| 30 m_PositionedTabs(), | 30 m_PositionedTabs(), |
| 31 m_bOrphanLine(FALSE), | 31 m_bOrphanLine(FALSE), |
| 32 m_wDefChar(0xFEFF), | 32 m_wDefChar(0xFEFF), |
| 33 m_iDefChar(0), | 33 m_iDefChar(0), |
| 34 m_wLineBreakChar(L'\n'), | 34 m_wLineBreakChar(L'\n'), |
| 35 m_iHorizontalScale(100), | 35 m_iHorizontalScale(100), |
| 36 m_iVerticalScale(100), | 36 m_iVerticalScale(100), |
| 37 m_iLineRotation(0), | 37 m_iLineRotation(0), |
| 38 m_iCharRotation(0), | 38 m_iCharRotation(0), |
| 39 m_iRotation(0), | 39 m_iRotation(0), |
| 40 m_iCharSpace(0), | 40 m_iCharSpace(0), |
| 41 m_bWordSpace(FALSE), | 41 m_bWordSpace(FALSE), |
| 42 m_iWordSpace(0), | 42 m_iWordSpace(0), |
| 43 m_bRTL(FALSE), | 43 m_bRTL(FALSE), |
| 44 m_iAlignment(FX_RTFLINEALIGNMENT_Left), | 44 m_iAlignment(FX_RTFLINEALIGNMENT_Left), |
| 45 m_pUserData(nullptr), | 45 m_pUserData(nullptr), |
| 46 m_eCharType(FX_CHARTYPE_Unknown), | 46 m_eCharType(FX_CHARTYPE_Unknown), |
| 47 m_dwIdentity(0), | 47 m_dwIdentity(0), |
| 48 m_RTFLine1(), | 48 m_RTFLine1(), |
| 49 m_RTFLine2(), | 49 m_RTFLine2(), |
| 50 m_pCurLine(nullptr), | 50 m_pCurLine(nullptr), |
| 51 m_iReady(0), | 51 m_iReady(0), |
| 52 m_iTolerance(0) { | 52 m_iTolerance(0) { |
| 53 m_pCurLine = &m_RTFLine1; | 53 m_pCurLine = &m_RTFLine1; |
| 54 } | 54 } |
| 55 |
| 55 CFX_RTFBreak::~CFX_RTFBreak() { | 56 CFX_RTFBreak::~CFX_RTFBreak() { |
| 56 Reset(); | 57 Reset(); |
| 57 m_PositionedTabs.RemoveAll(); | 58 m_PositionedTabs.RemoveAll(); |
| 58 if (m_pUserData) { | 59 if (m_pUserData) |
| 59 m_pUserData->Release(); | 60 m_pUserData->Release(); |
| 60 } | |
| 61 } | 61 } |
| 62 |
| 62 void CFX_RTFBreak::SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) { | 63 void CFX_RTFBreak::SetLineBoundary(FX_FLOAT fLineStart, FX_FLOAT fLineEnd) { |
| 63 if (fLineStart > fLineEnd) | 64 if (fLineStart > fLineEnd) |
| 64 return; | 65 return; |
| 66 |
| 65 m_iBoundaryStart = FXSYS_round(fLineStart * 20000.0f); | 67 m_iBoundaryStart = FXSYS_round(fLineStart * 20000.0f); |
| 66 m_iBoundaryEnd = FXSYS_round(fLineEnd * 20000.0f); | 68 m_iBoundaryEnd = FXSYS_round(fLineEnd * 20000.0f); |
| 67 m_pCurLine->m_iStart = std::min(m_pCurLine->m_iStart, m_iBoundaryEnd); | 69 m_pCurLine->m_iStart = std::min(m_pCurLine->m_iStart, m_iBoundaryEnd); |
| 68 m_pCurLine->m_iStart = std::max(m_pCurLine->m_iStart, m_iBoundaryStart); | 70 m_pCurLine->m_iStart = std::max(m_pCurLine->m_iStart, m_iBoundaryStart); |
| 69 } | 71 } |
| 72 |
| 70 void CFX_RTFBreak::SetLineStartPos(FX_FLOAT fLinePos) { | 73 void CFX_RTFBreak::SetLineStartPos(FX_FLOAT fLinePos) { |
| 71 int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); | 74 int32_t iLinePos = FXSYS_round(fLinePos * 20000.0f); |
| 72 iLinePos = std::min(iLinePos, m_iBoundaryEnd); | 75 iLinePos = std::min(iLinePos, m_iBoundaryEnd); |
| 73 iLinePos = std::max(iLinePos, m_iBoundaryStart); | 76 iLinePos = std::max(iLinePos, m_iBoundaryStart); |
| 74 m_pCurLine->m_iStart = iLinePos; | 77 m_pCurLine->m_iStart = iLinePos; |
| 75 } | 78 } |
| 79 |
| 76 void CFX_RTFBreak::SetLayoutStyles(uint32_t dwLayoutStyles) { | 80 void CFX_RTFBreak::SetLayoutStyles(uint32_t dwLayoutStyles) { |
| 77 if (m_dwLayoutStyles == dwLayoutStyles) { | 81 if (m_dwLayoutStyles == dwLayoutStyles) |
| 78 return; | 82 return; |
| 79 } | 83 |
| 80 SetBreakStatus(); | 84 SetBreakStatus(); |
| 81 m_dwLayoutStyles = dwLayoutStyles; | 85 m_dwLayoutStyles = dwLayoutStyles; |
| 82 m_bPagination = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_Pagination) != 0; | 86 m_bPagination = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_Pagination) != 0; |
| 83 m_bVertical = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_VerticalChars) != 0; | 87 m_bVertical = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_VerticalChars) != 0; |
| 84 m_bSingleLine = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_SingleLine) != 0; | 88 m_bSingleLine = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_SingleLine) != 0; |
| 85 m_bCharCode = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) != 0; | 89 m_bCharCode = (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) != 0; |
| 86 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); | 90 m_iLineRotation = GetLineRotation(m_dwLayoutStyles); |
| 87 m_iRotation = m_iLineRotation + m_iCharRotation; | 91 m_iRotation = m_iLineRotation + m_iCharRotation; |
| 88 m_iRotation %= 4; | 92 m_iRotation %= 4; |
| 89 } | 93 } |
| 94 |
| 90 void CFX_RTFBreak::SetFont(CFGAS_GEFont* pFont) { | 95 void CFX_RTFBreak::SetFont(CFGAS_GEFont* pFont) { |
| 91 if (!pFont) { | 96 if (!pFont) { |
| 92 return; | 97 return; |
| 93 } | 98 } |
| 94 if (m_pFont == pFont) { | 99 if (m_pFont == pFont) { |
| 95 return; | 100 return; |
| 96 } | 101 } |
| 97 SetBreakStatus(); | 102 SetBreakStatus(); |
| 98 m_pFont = pFont; | 103 m_pFont = pFont; |
| 99 m_iDefChar = 0; | 104 m_iDefChar = 0; |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Control, | 338 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Control, |
| 334 &CFX_RTFBreak::AppendChar_Combination, &CFX_RTFBreak::AppendChar_Others, | 339 &CFX_RTFBreak::AppendChar_Combination, &CFX_RTFBreak::AppendChar_Others, |
| 335 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Arabic, | 340 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Arabic, |
| 336 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, | 341 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, |
| 337 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, | 342 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Arabic, |
| 338 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Others, | 343 &CFX_RTFBreak::AppendChar_Arabic, &CFX_RTFBreak::AppendChar_Others, |
| 339 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Others, | 344 &CFX_RTFBreak::AppendChar_Others, &CFX_RTFBreak::AppendChar_Others, |
| 340 }; | 345 }; |
| 341 uint32_t CFX_RTFBreak::AppendChar(FX_WCHAR wch) { | 346 uint32_t CFX_RTFBreak::AppendChar(FX_WCHAR wch) { |
| 342 ASSERT(m_pFont && m_pCurLine); | 347 ASSERT(m_pFont && m_pCurLine); |
| 343 if (m_bCharCode) { | 348 if (m_bCharCode) |
| 344 return AppendChar_CharCode(wch); | 349 return AppendChar_CharCode(wch); |
| 345 } | 350 |
| 346 uint32_t dwProps = kTextLayoutCodeProperties[(uint16_t)wch]; | 351 uint32_t dwProps = kTextLayoutCodeProperties[(uint16_t)wch]; |
| 347 FX_CHARTYPE chartype = GetCharTypeFromProp(dwProps); | 352 FX_CHARTYPE chartype = GetCharTypeFromProp(dwProps); |
| 348 CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; | 353 CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; |
| 349 CFX_RTFChar* pCurChar = tca.AddSpace(); | 354 CFX_RTFChar* pCurChar = tca.AddSpace(); |
| 350 pCurChar->m_dwStatus = 0; | 355 pCurChar->m_dwStatus = 0; |
| 351 pCurChar->m_wCharCode = wch; | 356 pCurChar->m_wCharCode = wch; |
| 352 pCurChar->m_dwCharProps = dwProps; | 357 pCurChar->m_dwCharProps = dwProps; |
| 353 pCurChar->m_dwCharStyles = 0; | 358 pCurChar->m_dwCharStyles = 0; |
| 354 pCurChar->m_dwLayoutStyles = 0; | 359 pCurChar->m_dwLayoutStyles = 0; |
| 355 pCurChar->m_iFontSize = m_iFontSize; | 360 pCurChar->m_iFontSize = m_iFontSize; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 381 int32_t iRotation = m_iRotation; | 386 int32_t iRotation = m_iRotation; |
| 382 if (m_bVertical && (dwProps & 0x8000) != 0) { | 387 if (m_bVertical && (dwProps & 0x8000) != 0) { |
| 383 iRotation = (iRotation + 1) % 4; | 388 iRotation = (iRotation + 1) % 4; |
| 384 } | 389 } |
| 385 uint32_t dwRet2 = | 390 uint32_t dwRet2 = |
| 386 (this->*g_FX_RTFBreak_lpfAppendChar[chartype >> FX_CHARTYPEBITS])( | 391 (this->*g_FX_RTFBreak_lpfAppendChar[chartype >> FX_CHARTYPEBITS])( |
| 387 pCurChar, iRotation); | 392 pCurChar, iRotation); |
| 388 m_eCharType = chartype; | 393 m_eCharType = chartype; |
| 389 return std::max(dwRet1, dwRet2); | 394 return std::max(dwRet1, dwRet2); |
| 390 } | 395 } |
| 396 |
| 391 uint32_t CFX_RTFBreak::AppendChar_CharCode(FX_WCHAR wch) { | 397 uint32_t CFX_RTFBreak::AppendChar_CharCode(FX_WCHAR wch) { |
| 392 ASSERT(m_pFont && m_pCurLine); | 398 ASSERT(m_pFont && m_pCurLine); |
| 393 ASSERT(m_bCharCode); | 399 ASSERT(m_bCharCode); |
| 394 m_pCurLine->m_iMBCSChars++; | 400 m_pCurLine->m_iMBCSChars++; |
| 395 CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; | 401 CFX_RTFCharArray& tca = m_pCurLine->m_LineChars; |
| 396 CFX_RTFChar* pCurChar = tca.AddSpace(); | 402 CFX_RTFChar* pCurChar = tca.AddSpace(); |
| 397 pCurChar->m_dwStatus = 0; | 403 pCurChar->m_dwStatus = 0; |
| 398 pCurChar->m_wCharCode = wch; | 404 pCurChar->m_wCharCode = wch; |
| 399 pCurChar->m_dwCharProps = 0; | 405 pCurChar->m_dwCharProps = 0; |
| 400 pCurChar->m_dwCharStyles = 0; | 406 pCurChar->m_dwCharStyles = 0; |
| 401 pCurChar->m_dwLayoutStyles = m_dwLayoutStyles; | 407 pCurChar->m_dwLayoutStyles = m_dwLayoutStyles; |
| 402 pCurChar->m_iFontSize = m_iFontSize; | 408 pCurChar->m_iFontSize = m_iFontSize; |
| 403 pCurChar->m_iFontHeight = m_iFontHeight; | 409 pCurChar->m_iFontHeight = m_iFontHeight; |
| 404 pCurChar->m_iHorizontalScale = m_iHorizontalScale; | 410 pCurChar->m_iHorizontalScale = m_iHorizontalScale; |
| 405 pCurChar->m_iVertialScale = m_iVerticalScale; | 411 pCurChar->m_iVertialScale = m_iVerticalScale; |
| 406 pCurChar->m_nRotation = m_iCharRotation; | 412 pCurChar->m_nRotation = m_iCharRotation; |
| 407 pCurChar->m_iCharWidth = 0; | 413 pCurChar->m_iCharWidth = 0; |
| 408 pCurChar->m_dwIdentity = m_dwIdentity; | 414 pCurChar->m_dwIdentity = m_dwIdentity; |
| 409 if (m_pUserData) { | 415 if (m_pUserData) |
| 410 m_pUserData->Retain(); | 416 m_pUserData->Retain(); |
| 411 } | 417 |
| 412 pCurChar->m_pUserData = m_pUserData; | 418 pCurChar->m_pUserData = m_pUserData; |
| 413 int32_t iCharWidth = 0; | 419 int32_t iCharWidth = 0; |
| 414 if (m_bVertical != FX_IsOdd(m_iRotation)) { | 420 if (m_bVertical != FX_IsOdd(m_iRotation)) { |
| 415 iCharWidth = 1000; | 421 iCharWidth = 1000; |
| 416 } else { | 422 } else { |
| 417 if (!m_pFont->GetCharWidth(wch, iCharWidth, TRUE)) { | 423 if (!m_pFont->GetCharWidth(wch, iCharWidth, TRUE)) { |
| 418 iCharWidth = m_iDefChar; | 424 iCharWidth = m_iDefChar; |
| 419 } | 425 } |
| 420 } | 426 } |
| 421 iCharWidth *= m_iFontSize; | 427 iCharWidth *= m_iFontSize; |
| 422 iCharWidth = iCharWidth * m_iHorizontalScale / 100; | 428 iCharWidth = iCharWidth * m_iHorizontalScale / 100; |
| 423 iCharWidth += m_iCharSpace; | 429 iCharWidth += m_iCharSpace; |
| 424 pCurChar->m_iCharWidth = iCharWidth; | 430 pCurChar->m_iCharWidth = iCharWidth; |
| 425 m_pCurLine->m_iWidth += iCharWidth; | 431 m_pCurLine->m_iWidth += iCharWidth; |
| 426 m_eCharType = FX_CHARTYPE_Unknown; | 432 m_eCharType = FX_CHARTYPE_Unknown; |
| 427 if (!m_bSingleLine && | 433 if (!m_bSingleLine && |
| 428 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { | 434 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
| 429 return EndBreak(FX_RTFBREAK_LineBreak); | 435 return EndBreak(FX_RTFBREAK_LineBreak); |
| 430 } | 436 } |
| 431 return FX_RTFBREAK_None; | 437 return FX_RTFBREAK_None; |
| 432 } | 438 } |
| 439 |
| 433 uint32_t CFX_RTFBreak::AppendChar_Combination(CFX_RTFChar* pCurChar, | 440 uint32_t CFX_RTFBreak::AppendChar_Combination(CFX_RTFChar* pCurChar, |
| 434 int32_t iRotation) { | 441 int32_t iRotation) { |
| 435 int32_t iCharWidth = 0; | 442 int32_t iCharWidth = 0; |
| 436 if (m_bVertical != FX_IsOdd(iRotation)) { | 443 if (m_bVertical != FX_IsOdd(iRotation)) { |
| 437 iCharWidth = 1000; | 444 iCharWidth = 1000; |
| 438 } else { | 445 } else { |
| 439 if (!m_pFont->GetCharWidth(pCurChar->m_wCharCode, iCharWidth, | 446 if (!m_pFont->GetCharWidth(pCurChar->m_wCharCode, iCharWidth, |
| 440 m_bCharCode)) { | 447 m_bCharCode)) { |
| 441 iCharWidth = 0; | 448 iCharWidth = 0; |
| 442 } | 449 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 dwRet2 = FX_RTFBREAK_ParagraphBreak; | 504 dwRet2 = FX_RTFBREAK_ParagraphBreak; |
| 498 } | 505 } |
| 499 break; | 506 break; |
| 500 } | 507 } |
| 501 if (dwRet2 != FX_RTFBREAK_None) { | 508 if (dwRet2 != FX_RTFBREAK_None) { |
| 502 dwRet2 = EndBreak(dwRet2); | 509 dwRet2 = EndBreak(dwRet2); |
| 503 } | 510 } |
| 504 } | 511 } |
| 505 return dwRet2; | 512 return dwRet2; |
| 506 } | 513 } |
| 514 |
| 507 uint32_t CFX_RTFBreak::AppendChar_Arabic(CFX_RTFChar* pCurChar, | 515 uint32_t CFX_RTFBreak::AppendChar_Arabic(CFX_RTFChar* pCurChar, |
| 508 int32_t iRotation) { | 516 int32_t iRotation) { |
| 509 CFX_RTFChar* pLastChar = nullptr; | 517 CFX_RTFChar* pLastChar = nullptr; |
| 510 int32_t& iLineWidth = m_pCurLine->m_iWidth; | 518 int32_t& iLineWidth = m_pCurLine->m_iWidth; |
| 511 int32_t iCharWidth = 0; | 519 int32_t iCharWidth = 0; |
| 512 FX_WCHAR wForm; | 520 FX_WCHAR wForm; |
| 513 FX_BOOL bAlef = FALSE; | 521 FX_BOOL bAlef = FALSE; |
| 514 if (m_eCharType >= FX_CHARTYPE_ArabicAlef && | 522 if (m_eCharType >= FX_CHARTYPE_ArabicAlef && |
| 515 m_eCharType <= FX_CHARTYPE_ArabicDistortion) { | 523 m_eCharType <= FX_CHARTYPE_ArabicDistortion) { |
| 516 pLastChar = GetLastChar(1); | 524 pLastChar = GetLastChar(1); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 iCharWidth = iCharWidth * m_iHorizontalScale / 100; | 563 iCharWidth = iCharWidth * m_iHorizontalScale / 100; |
| 556 pCurChar->m_iCharWidth = iCharWidth; | 564 pCurChar->m_iCharWidth = iCharWidth; |
| 557 iLineWidth += iCharWidth; | 565 iLineWidth += iCharWidth; |
| 558 m_pCurLine->m_iArabicChars++; | 566 m_pCurLine->m_iArabicChars++; |
| 559 if (!m_bSingleLine && !m_bOrphanLine && | 567 if (!m_bSingleLine && !m_bOrphanLine && |
| 560 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { | 568 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
| 561 return EndBreak(FX_RTFBREAK_LineBreak); | 569 return EndBreak(FX_RTFBREAK_LineBreak); |
| 562 } | 570 } |
| 563 return FX_RTFBREAK_None; | 571 return FX_RTFBREAK_None; |
| 564 } | 572 } |
| 573 |
| 565 uint32_t CFX_RTFBreak::AppendChar_Others(CFX_RTFChar* pCurChar, | 574 uint32_t CFX_RTFBreak::AppendChar_Others(CFX_RTFChar* pCurChar, |
| 566 int32_t iRotation) { | 575 int32_t iRotation) { |
| 567 FX_CHARTYPE chartype = pCurChar->GetCharType(); | 576 FX_CHARTYPE chartype = pCurChar->GetCharType(); |
| 568 FX_WCHAR wForm; | 577 FX_WCHAR wForm; |
| 569 if (chartype == FX_CHARTYPE_Numeric) { | 578 if (chartype == FX_CHARTYPE_Numeric) { |
| 570 if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ArabicNumber) { | 579 if (m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_ArabicNumber) |
| 571 wForm = pCurChar->m_wCharCode + 0x0630; | 580 wForm = pCurChar->m_wCharCode + 0x0630; |
| 572 } else { | 581 else |
| 573 wForm = pCurChar->m_wCharCode; | 582 wForm = pCurChar->m_wCharCode; |
| 574 } | |
| 575 } else if (m_bRTL || m_bVertical) { | 583 } else if (m_bRTL || m_bVertical) { |
| 576 wForm = FX_GetMirrorChar(pCurChar->m_wCharCode, pCurChar->m_dwCharProps, | 584 wForm = FX_GetMirrorChar(pCurChar->m_wCharCode, pCurChar->m_dwCharProps, |
| 577 m_bRTL, m_bVertical); | 585 m_bRTL, m_bVertical); |
| 578 } else { | 586 } else { |
| 579 wForm = pCurChar->m_wCharCode; | 587 wForm = pCurChar->m_wCharCode; |
| 580 } | 588 } |
| 581 int32_t iCharWidth = 0; | 589 int32_t iCharWidth = 0; |
| 582 if (m_bVertical != FX_IsOdd(iRotation)) { | 590 if (m_bVertical == FX_IsOdd(iRotation)) { |
| 591 if (!m_pFont->GetCharWidth(wForm, iCharWidth, m_bCharCode)) |
| 592 iCharWidth = m_iDefChar; |
| 593 } else { |
| 583 iCharWidth = 1000; | 594 iCharWidth = 1000; |
| 584 } else { | |
| 585 if (!m_pFont->GetCharWidth(wForm, iCharWidth, m_bCharCode)) { | |
| 586 iCharWidth = m_iDefChar; | |
| 587 } | |
| 588 } | 595 } |
| 589 iCharWidth *= m_iFontSize; | 596 iCharWidth *= m_iFontSize; |
| 590 iCharWidth = iCharWidth * m_iHorizontalScale / 100; | 597 iCharWidth *= m_iHorizontalScale / 100; |
| 591 iCharWidth += m_iCharSpace; | 598 iCharWidth += m_iCharSpace; |
| 592 if (chartype == FX_CHARTYPE_Space && m_bWordSpace) { | 599 if (chartype == FX_CHARTYPE_Space && m_bWordSpace) |
| 593 iCharWidth += m_iWordSpace; | 600 iCharWidth += m_iWordSpace; |
| 594 } | 601 |
| 595 pCurChar->m_iCharWidth = iCharWidth; | 602 pCurChar->m_iCharWidth = iCharWidth; |
| 596 m_pCurLine->m_iWidth += iCharWidth; | 603 m_pCurLine->m_iWidth += iCharWidth; |
| 597 FX_BOOL bBreak = (chartype != FX_CHARTYPE_Space || | 604 bool bBreak = (chartype != FX_CHARTYPE_Space || |
| 598 (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0); | 605 (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0); |
| 599 if (!m_bSingleLine && !m_bOrphanLine && bBreak && | 606 if (!m_bSingleLine && !m_bOrphanLine && bBreak && |
| 600 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { | 607 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
| 601 return EndBreak(FX_RTFBREAK_LineBreak); | 608 return EndBreak(FX_RTFBREAK_LineBreak); |
| 602 } | 609 } |
| 603 return FX_RTFBREAK_None; | 610 return FX_RTFBREAK_None; |
| 604 } | 611 } |
| 612 |
| 605 uint32_t CFX_RTFBreak::EndBreak(uint32_t dwStatus) { | 613 uint32_t CFX_RTFBreak::EndBreak(uint32_t dwStatus) { |
| 606 ASSERT(dwStatus >= FX_RTFBREAK_PieceBreak && | 614 ASSERT(dwStatus >= FX_RTFBREAK_PieceBreak && |
| 607 dwStatus <= FX_RTFBREAK_PageBreak); | 615 dwStatus <= FX_RTFBREAK_PageBreak); |
| 608 m_dwIdentity++; | 616 m_dwIdentity++; |
| 609 CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; | 617 CFX_RTFPieceArray* pCurPieces = &m_pCurLine->m_LinePieces; |
| 610 int32_t iCount = pCurPieces->GetSize(); | 618 int32_t iCount = pCurPieces->GetSize(); |
| 611 if (iCount > 0) { | 619 if (iCount > 0) { |
| 612 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); | 620 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(--iCount); |
| 613 if (dwStatus > FX_RTFBREAK_PieceBreak) { | 621 if (dwStatus > FX_RTFBREAK_PieceBreak) |
| 614 pLastPiece->m_dwStatus = dwStatus; | 622 pLastPiece->m_dwStatus = dwStatus; |
| 615 } else { | 623 else |
| 616 dwStatus = pLastPiece->m_dwStatus; | 624 dwStatus = pLastPiece->m_dwStatus; |
| 617 } | |
| 618 return dwStatus; | 625 return dwStatus; |
| 619 } else { | 626 } |
| 620 CFX_RTFLine* pLastLine = GetRTFLine(TRUE); | 627 |
| 621 if (pLastLine) { | 628 CFX_RTFLine* pLastLine = GetRTFLine(TRUE); |
| 622 pCurPieces = &pLastLine->m_LinePieces; | 629 if (pLastLine) { |
| 623 iCount = pCurPieces->GetSize(); | 630 pCurPieces = &pLastLine->m_LinePieces; |
| 624 if (iCount-- > 0) { | 631 iCount = pCurPieces->GetSize(); |
| 625 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); | 632 if (iCount-- > 0) { |
| 626 if (dwStatus > FX_RTFBREAK_PieceBreak) { | 633 CFX_RTFPiece* pLastPiece = pCurPieces->GetPtrAt(iCount); |
| 627 pLastPiece->m_dwStatus = dwStatus; | 634 if (dwStatus > FX_RTFBREAK_PieceBreak) |
| 628 } else { | 635 pLastPiece->m_dwStatus = dwStatus; |
| 629 dwStatus = pLastPiece->m_dwStatus; | 636 else |
| 630 } | 637 dwStatus = pLastPiece->m_dwStatus; |
| 631 return dwStatus; | |
| 632 } | |
| 633 return FX_RTFBREAK_None; | |
| 634 } | |
| 635 iCount = m_pCurLine->CountChars(); | |
| 636 if (iCount < 1) { | |
| 637 return FX_RTFBREAK_None; | |
| 638 } | |
| 639 CFX_RTFChar& tc = m_pCurLine->GetChar(iCount - 1); | |
| 640 tc.m_dwStatus = dwStatus; | |
| 641 if (dwStatus <= FX_RTFBREAK_PieceBreak) { | |
| 642 return dwStatus; | 638 return dwStatus; |
| 643 } | 639 } |
| 640 return FX_RTFBREAK_None; |
| 644 } | 641 } |
| 642 iCount = m_pCurLine->CountChars(); |
| 643 if (iCount < 1) |
| 644 return FX_RTFBREAK_None; |
| 645 |
| 646 CFX_RTFChar& tc = m_pCurLine->GetChar(iCount - 1); |
| 647 tc.m_dwStatus = dwStatus; |
| 648 if (dwStatus <= FX_RTFBREAK_PieceBreak) |
| 649 return dwStatus; |
| 650 |
| 645 m_iReady = (m_pCurLine == &m_RTFLine1) ? 1 : 2; | 651 m_iReady = (m_pCurLine == &m_RTFLine1) ? 1 : 2; |
| 646 CFX_RTFLine* pNextLine = | 652 CFX_RTFLine* pNextLine = |
| 647 (m_pCurLine == &m_RTFLine1) ? &m_RTFLine2 : &m_RTFLine1; | 653 (m_pCurLine == &m_RTFLine1) ? &m_RTFLine2 : &m_RTFLine1; |
| 648 FX_BOOL bAllChars = (m_iAlignment > FX_RTFLINEALIGNMENT_Right); | 654 FX_BOOL bAllChars = (m_iAlignment > FX_RTFLINEALIGNMENT_Right); |
| 649 CFX_TPOArray tpos(100); | 655 CFX_TPOArray tpos(100); |
| 650 if (EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { | 656 if (!EndBreak_SplitLine(pNextLine, bAllChars, dwStatus)) { |
| 651 goto EndBreak_Ret; | 657 if (!m_bCharCode) |
| 658 EndBreak_BidiLine(tpos, dwStatus); |
| 659 |
| 660 if (!m_bPagination && m_iAlignment > FX_RTFLINEALIGNMENT_Left) |
| 661 EndBreak_Alignment(tpos, bAllChars, dwStatus); |
| 652 } | 662 } |
| 653 if (!m_bCharCode) { | 663 |
| 654 EndBreak_BidiLine(tpos, dwStatus); | |
| 655 } | |
| 656 if (!m_bPagination && m_iAlignment > FX_RTFLINEALIGNMENT_Left) { | |
| 657 EndBreak_Alignment(tpos, bAllChars, dwStatus); | |
| 658 } | |
| 659 EndBreak_Ret: | |
| 660 m_pCurLine = pNextLine; | 664 m_pCurLine = pNextLine; |
| 661 m_pCurLine->m_iStart = m_iBoundaryStart; | 665 m_pCurLine->m_iStart = m_iBoundaryStart; |
| 662 CFX_RTFChar* pTC = GetLastChar(0); | 666 CFX_RTFChar* pTC = GetLastChar(0); |
| 663 m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown; | 667 m_eCharType = pTC ? pTC->GetCharType() : FX_CHARTYPE_Unknown; |
| 664 return dwStatus; | 668 return dwStatus; |
| 665 } | 669 } |
| 670 |
| 666 FX_BOOL CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine, | 671 FX_BOOL CFX_RTFBreak::EndBreak_SplitLine(CFX_RTFLine* pNextLine, |
| 667 FX_BOOL bAllChars, | 672 FX_BOOL bAllChars, |
| 668 uint32_t dwStatus) { | 673 uint32_t dwStatus) { |
| 669 FX_BOOL bDone = FALSE; | 674 FX_BOOL bDone = FALSE; |
| 670 if (!m_bSingleLine && !m_bOrphanLine && | 675 if (!m_bSingleLine && !m_bOrphanLine && |
| 671 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { | 676 m_pCurLine->GetLineEnd() > m_iBoundaryEnd + m_iTolerance) { |
| 672 CFX_RTFChar& tc = m_pCurLine->GetChar(m_pCurLine->CountChars() - 1); | 677 CFX_RTFChar& tc = m_pCurLine->GetChar(m_pCurLine->CountChars() - 1); |
| 673 switch (tc.GetCharType()) { | 678 switch (tc.GetCharType()) { |
| 674 case FX_CHARTYPE_Tab: | 679 case FX_CHARTYPE_Tab: |
| 675 if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { | 680 if ((m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0) { |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 921 iOffset /= 2; | 926 iOffset /= 2; |
| 922 } | 927 } |
| 923 if (iOffset > 0) { | 928 if (iOffset > 0) { |
| 924 for (i = 0; i < iCount; i++) { | 929 for (i = 0; i < iCount; i++) { |
| 925 CFX_RTFPiece& ttp = pCurPieces->GetAt(i); | 930 CFX_RTFPiece& ttp = pCurPieces->GetAt(i); |
| 926 ttp.m_iStartPos += iOffset; | 931 ttp.m_iStartPos += iOffset; |
| 927 } | 932 } |
| 928 } | 933 } |
| 929 } | 934 } |
| 930 } | 935 } |
| 936 |
| 931 int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, | 937 int32_t CFX_RTFBreak::GetBreakPos(CFX_RTFCharArray& tca, |
| 932 int32_t& iEndPos, | 938 int32_t& iEndPos, |
| 933 FX_BOOL bAllChars, | 939 FX_BOOL bAllChars, |
| 934 FX_BOOL bOnlyBrk) { | 940 FX_BOOL bOnlyBrk) { |
| 935 int32_t iLength = tca.GetSize() - 1; | 941 int32_t iLength = tca.GetSize() - 1; |
| 936 if (iLength < 1) { | 942 if (iLength < 1) |
| 937 return iLength; | 943 return iLength; |
| 938 } | 944 |
| 939 int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, | 945 int32_t iBreak = -1, iBreakPos = -1, iIndirect = -1, iIndirectPos = -1, |
| 940 iLast = -1, iLastPos = -1; | 946 iLast = -1, iLastPos = -1; |
| 941 if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iBoundaryEnd) { | 947 if (m_bSingleLine || m_bOrphanLine || iEndPos <= m_iBoundaryEnd) { |
| 942 if (!bAllChars || m_bCharCode) { | 948 if (!bAllChars || m_bCharCode) |
| 943 return iLength; | 949 return iLength; |
| 944 } | 950 |
| 945 iBreak = iLength; | 951 iBreak = iLength; |
| 946 iBreakPos = iEndPos; | 952 iBreakPos = iEndPos; |
| 947 } | 953 } |
| 948 CFX_RTFChar* pCharArray = tca.GetData(); | 954 CFX_RTFChar* pCharArray = tca.GetData(); |
| 949 if (m_bCharCode) { | 955 if (m_bCharCode) { |
| 950 const CFX_RTFChar* pChar; | 956 const CFX_RTFChar* pChar; |
| 951 int32_t iCharWidth; | 957 int32_t iCharWidth; |
| 952 while (iLength > 0) { | 958 while (iLength > 0) { |
| 953 if (iEndPos <= m_iBoundaryEnd) { | 959 if (iEndPos <= m_iBoundaryEnd) |
| 954 break; | 960 break; |
| 955 } | 961 |
| 956 pChar = pCharArray + iLength--; | 962 pChar = pCharArray + iLength--; |
| 957 iCharWidth = pChar->m_iCharWidth; | 963 iCharWidth = pChar->m_iCharWidth; |
| 958 if (iCharWidth > 0) { | 964 if (iCharWidth > 0) |
| 959 iEndPos -= iCharWidth; | 965 iEndPos -= iCharWidth; |
| 960 } | |
| 961 } | 966 } |
| 962 return iLength; | 967 return iLength; |
| 963 } | 968 } |
| 964 FX_BOOL bSpaceBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0; | 969 FX_BOOL bSpaceBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_SpaceBreak) != 0; |
| 965 FX_BOOL bTabBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0; | 970 FX_BOOL bTabBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_TabBreak) != 0; |
| 966 FX_BOOL bNumberBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_NumberBreak) != 0; | 971 FX_BOOL bNumberBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_NumberBreak) != 0; |
| 967 FX_BOOL bInfixBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_InfixBreak) != 0; | 972 FX_BOOL bInfixBreak = (m_dwPolicies & FX_RTFBREAKPOLICY_InfixBreak) != 0; |
| 968 FX_LINEBREAKTYPE eType; | 973 FX_LINEBREAKTYPE eType; |
| 969 uint32_t nCodeProp, nCur, nNext; | 974 uint32_t nCodeProp, nCur, nNext; |
| 970 CFX_RTFChar* pCur = pCharArray + iLength--; | 975 CFX_RTFChar* pCur = pCharArray + iLength--; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1033 iLastPos = iEndPos; | 1038 iLastPos = iEndPos; |
| 1034 } | 1039 } |
| 1035 } | 1040 } |
| 1036 if (iCharWidth > 0) { | 1041 if (iCharWidth > 0) { |
| 1037 iEndPos -= iCharWidth; | 1042 iEndPos -= iCharWidth; |
| 1038 } | 1043 } |
| 1039 } | 1044 } |
| 1040 nNext = nCodeProp & 0x003F; | 1045 nNext = nCodeProp & 0x003F; |
| 1041 iLength--; | 1046 iLength--; |
| 1042 } | 1047 } |
| 1043 if (bOnlyBrk) { | 1048 if (bOnlyBrk) |
| 1044 return 0; | 1049 return 0; |
| 1045 } | 1050 |
| 1046 if (iBreak > -1) { | 1051 if (iBreak > -1) { |
| 1047 iEndPos = iBreakPos; | 1052 iEndPos = iBreakPos; |
| 1048 return iBreak; | 1053 return iBreak; |
| 1049 } | 1054 } |
| 1050 if (iIndirect > -1) { | 1055 if (iIndirect > -1) { |
| 1051 iEndPos = iIndirectPos; | 1056 iEndPos = iIndirectPos; |
| 1052 return iIndirect; | 1057 return iIndirect; |
| 1053 } | 1058 } |
| 1054 if (iLast > -1) { | 1059 if (iLast > -1) { |
| 1055 iEndPos = iLastPos; | 1060 iEndPos = iLastPos; |
| 1056 return iLast; | 1061 return iLast; |
| 1057 } | 1062 } |
| 1058 return 0; | 1063 return 0; |
| 1059 } | 1064 } |
| 1065 |
| 1060 void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine, | 1066 void CFX_RTFBreak::SplitTextLine(CFX_RTFLine* pCurLine, |
| 1061 CFX_RTFLine* pNextLine, | 1067 CFX_RTFLine* pNextLine, |
| 1062 FX_BOOL bAllChars) { | 1068 FX_BOOL bAllChars) { |
| 1063 ASSERT(pCurLine && pNextLine); | 1069 ASSERT(pCurLine && pNextLine); |
| 1064 int32_t iCount = pCurLine->CountChars(); | 1070 int32_t iCount = pCurLine->CountChars(); |
| 1065 if (iCount < 2) { | 1071 if (iCount < 2) { |
| 1066 return; | 1072 return; |
| 1067 } | 1073 } |
| 1068 int32_t iEndPos = pCurLine->GetLineEnd(); | 1074 int32_t iEndPos = pCurLine->GetLineEnd(); |
| 1069 CFX_RTFCharArray& curChars = pCurLine->m_LineChars; | 1075 CFX_RTFCharArray& curChars = pCurLine->m_LineChars; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1098 pCurLine->m_iArabicChars--; | 1104 pCurLine->m_iArabicChars--; |
| 1099 pNextLine->m_iArabicChars++; | 1105 pNextLine->m_iArabicChars++; |
| 1100 } | 1106 } |
| 1101 if (tc->m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) { | 1107 if (tc->m_dwLayoutStyles & FX_RTFLAYOUTSTYLE_MBCSCode) { |
| 1102 pCurLine->m_iMBCSChars--; | 1108 pCurLine->m_iMBCSChars--; |
| 1103 pNextLine->m_iMBCSChars++; | 1109 pNextLine->m_iMBCSChars++; |
| 1104 } | 1110 } |
| 1105 tc->m_dwStatus = 0; | 1111 tc->m_dwStatus = 0; |
| 1106 } | 1112 } |
| 1107 } | 1113 } |
| 1114 |
| 1108 int32_t CFX_RTFBreak::CountBreakPieces() const { | 1115 int32_t CFX_RTFBreak::CountBreakPieces() const { |
| 1109 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); | 1116 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); |
| 1110 return pRTFPieces ? pRTFPieces->GetSize() : 0; | 1117 return pRTFPieces ? pRTFPieces->GetSize() : 0; |
| 1111 } | 1118 } |
| 1119 |
| 1112 const CFX_RTFPiece* CFX_RTFBreak::GetBreakPiece(int32_t index) const { | 1120 const CFX_RTFPiece* CFX_RTFBreak::GetBreakPiece(int32_t index) const { |
| 1113 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); | 1121 CFX_RTFPieceArray* pRTFPieces = GetRTFPieces(TRUE); |
| 1114 if (!pRTFPieces) { | 1122 if (!pRTFPieces) |
| 1115 return nullptr; | 1123 return nullptr; |
| 1116 } | 1124 |
| 1117 if (index < 0 || index >= pRTFPieces->GetSize()) { | 1125 if (index < 0 || index >= pRTFPieces->GetSize()) |
| 1118 return nullptr; | 1126 return nullptr; |
| 1119 } | 1127 |
| 1120 return pRTFPieces->GetPtrAt(index); | 1128 return pRTFPieces->GetPtrAt(index); |
| 1121 } | 1129 } |
| 1130 |
| 1122 void CFX_RTFBreak::GetLineRect(CFX_RectF& rect) const { | 1131 void CFX_RTFBreak::GetLineRect(CFX_RectF& rect) const { |
| 1123 rect.top = 0; | 1132 rect.top = 0; |
| 1124 CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); | 1133 CFX_RTFLine* pRTFLine = GetRTFLine(TRUE); |
| 1125 if (!pRTFLine) { | 1134 if (!pRTFLine) { |
| 1126 rect.left = ((FX_FLOAT)m_iBoundaryStart) / 20000.0f; | 1135 rect.left = ((FX_FLOAT)m_iBoundaryStart) / 20000.0f; |
| 1127 rect.width = rect.height = 0; | 1136 rect.width = rect.height = 0; |
| 1128 return; | 1137 return; |
| 1129 } | 1138 } |
| 1130 rect.left = ((FX_FLOAT)pRTFLine->m_iStart) / 20000.0f; | 1139 rect.left = ((FX_FLOAT)pRTFLine->m_iStart) / 20000.0f; |
| 1131 rect.width = ((FX_FLOAT)pRTFLine->m_iWidth) / 20000.0f; | 1140 rect.width = ((FX_FLOAT)pRTFLine->m_iWidth) / 20000.0f; |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1473 if (bRTLPiece) { | 1482 if (bRTLPiece) { |
| 1474 rect.left -= fCharSize; | 1483 rect.left -= fCharSize; |
| 1475 fStart -= fCharSize; | 1484 fStart -= fCharSize; |
| 1476 } else { | 1485 } else { |
| 1477 fStart += fCharSize; | 1486 fStart += fCharSize; |
| 1478 } | 1487 } |
| 1479 rect.width = fCharSize; | 1488 rect.width = fCharSize; |
| 1480 } | 1489 } |
| 1481 if (bCharBBox && !bRet) { | 1490 if (bCharBBox && !bRet) { |
| 1482 int32_t iCharWidth = 1000; | 1491 int32_t iCharWidth = 1000; |
| 1483 pFont->GetCharWidth(wch, iCharWidth); | 1492 pFont->GetCharWidth(wch, iCharWidth, false); |
| 1484 FX_FLOAT fRTLeft = 0, fCharWidth = 0; | 1493 FX_FLOAT fRTLeft = 0, fCharWidth = 0; |
| 1485 if (iCharWidth > 0) { | 1494 if (iCharWidth > 0) { |
| 1486 fCharWidth = iCharWidth * fScale; | 1495 fCharWidth = iCharWidth * fScale; |
| 1487 fRTLeft = fLeft; | 1496 fRTLeft = fLeft; |
| 1488 if (bCombText) { | 1497 if (bCombText) { |
| 1489 fRTLeft = (rect.width - fCharWidth) / 2.0f; | 1498 fRTLeft = (rect.width - fCharWidth) / 2.0f; |
| 1490 } | 1499 } |
| 1491 } | 1500 } |
| 1492 CFX_RectF rtBBoxF; | 1501 CFX_RectF rtBBoxF; |
| 1493 if (bVertical) { | 1502 if (bVertical) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1549 iLength(0), | 1558 iLength(0), |
| 1550 pFont(nullptr), | 1559 pFont(nullptr), |
| 1551 fFontSize(12.0f), | 1560 fFontSize(12.0f), |
| 1552 dwLayoutStyles(0), | 1561 dwLayoutStyles(0), |
| 1553 iCharRotation(0), | 1562 iCharRotation(0), |
| 1554 iBidiLevel(0), | 1563 iBidiLevel(0), |
| 1555 pRect(nullptr), | 1564 pRect(nullptr), |
| 1556 wLineBreakChar(L'\n'), | 1565 wLineBreakChar(L'\n'), |
| 1557 iHorizontalScale(100), | 1566 iHorizontalScale(100), |
| 1558 iVerticalScale(100) {} | 1567 iVerticalScale(100) {} |
| OLD | NEW |