| 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/fee/fde_txtedtpage.h" | 7 #include "xfa/fee/fde_txtedtpage.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 #include "xfa/fee/fde_txtedtbuf.h" | 11 #include "xfa/fee/fde_txtedtbuf.h" |
| 12 #include "xfa/fee/fde_txtedtengine.h" | 12 #include "xfa/fee/fde_txtedtengine.h" |
| 13 #include "xfa/fee/fde_txtedtparag.h" | 13 #include "xfa/fee/fde_txtedtparag.h" |
| 14 #include "xfa/fee/fx_wordbreak/fx_wordbreak.h" | 14 #include "xfa/fee/fx_wordbreak/fx_wordbreak.h" |
| 15 #include "xfa/fee/ifde_txtedtbuf.h" | |
| 16 #include "xfa/fee/ifde_txtedtengine.h" | 15 #include "xfa/fee/ifde_txtedtengine.h" |
| 17 #include "xfa/fee/ifde_txtedtpage.h" | 16 #include "xfa/fee/ifde_txtedtpage.h" |
| 18 | 17 |
| 19 #define FDE_TXTEDT_TOLERANCE 0.1f | 18 #define FDE_TXTEDT_TOLERANCE 0.1f |
| 20 | 19 |
| 21 IFDE_TxtEdtPage* IFDE_TxtEdtPage::Create(IFDE_TxtEdtEngine* pEngine, | 20 IFDE_TxtEdtPage* IFDE_TxtEdtPage::Create(CFDE_TxtEdtEngine* pEngine, |
| 22 int32_t nIndex) { | 21 int32_t nIndex) { |
| 23 return (IFDE_TxtEdtPage*)new CFDE_TxtEdtPage(pEngine, nIndex); | 22 return (IFDE_TxtEdtPage*)new CFDE_TxtEdtPage(pEngine, nIndex); |
| 24 } | 23 } |
| 25 CFDE_TxtEdtTextSet::CFDE_TxtEdtTextSet(CFDE_TxtEdtPage* pPage) | 24 CFDE_TxtEdtTextSet::CFDE_TxtEdtTextSet(CFDE_TxtEdtPage* pPage) |
| 26 : m_pPage(pPage) {} | 25 : m_pPage(pPage) {} |
| 27 CFDE_TxtEdtTextSet::~CFDE_TxtEdtTextSet() {} | 26 CFDE_TxtEdtTextSet::~CFDE_TxtEdtTextSet() {} |
| 28 FDE_VISUALOBJTYPE CFDE_TxtEdtTextSet::GetType() { | 27 FDE_VISUALOBJTYPE CFDE_TxtEdtTextSet::GetType() { |
| 29 return FDE_VISUALOBJ_Text; | 28 return FDE_VISUALOBJ_Text; |
| 30 } | 29 } |
| 31 FX_BOOL CFDE_TxtEdtTextSet::GetBBox(FDE_HVISUALOBJ hVisualObj, | 30 FX_BOOL CFDE_TxtEdtTextSet::GetBBox(FDE_HVISUALOBJ hVisualObj, |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 tr.iLength = nLength; | 114 tr.iLength = nLength; |
| 116 tr.pFont = pTextParams->pFont; | 115 tr.pFont = pTextParams->pFont; |
| 117 tr.fFontSize = pTextParams->fFontSize; | 116 tr.fFontSize = pTextParams->fFontSize; |
| 118 tr.dwStyles = dwLayoutStyle; | 117 tr.dwStyles = dwLayoutStyle; |
| 119 tr.iCharRotation = pTextParams->nCharRotation; | 118 tr.iCharRotation = pTextParams->nCharRotation; |
| 120 tr.dwCharStyles = pPiece->dwCharStyles; | 119 tr.dwCharStyles = pPiece->dwCharStyles; |
| 121 tr.pRect = &(pPiece->rtPiece); | 120 tr.pRect = &(pPiece->rtPiece); |
| 122 tr.wLineBreakChar = pTextParams->wLineBreakChar; | 121 tr.wLineBreakChar = pTextParams->wLineBreakChar; |
| 123 return pEngine->GetTextBreak()->GetCharRects(&tr, rtArray, bBBox); | 122 return pEngine->GetTextBreak()->GetCharRects(&tr, rtArray, bBBox); |
| 124 } | 123 } |
| 125 CFDE_TxtEdtPage::CFDE_TxtEdtPage(IFDE_TxtEdtEngine* pEngine, int32_t nPageIndex) | 124 CFDE_TxtEdtPage::CFDE_TxtEdtPage(CFDE_TxtEdtEngine* pEngine, int32_t nPageIndex) |
| 126 : m_pIter(nullptr), | 125 : m_pIter(nullptr), |
| 127 m_pTextSet(nullptr), | 126 m_pTextSet(nullptr), |
| 128 m_pBgnParag(nullptr), | 127 m_pBgnParag(nullptr), |
| 129 m_pEndParag(nullptr), | 128 m_pEndParag(nullptr), |
| 130 m_nRefCount(0), | 129 m_nRefCount(0), |
| 131 m_nPageStart(-1), | 130 m_nPageStart(-1), |
| 132 m_nCharCount(0), | 131 m_nCharCount(0), |
| 133 m_nPageIndex(nPageIndex), | 132 m_nPageIndex(nPageIndex), |
| 134 m_bLoaded(FALSE), | 133 m_bLoaded(FALSE), |
| 135 m_pCharWidth(nullptr) { | 134 m_pCharWidth(nullptr) { |
| 136 FXSYS_memset(&m_rtPage, 0, sizeof(CFX_RectF)); | 135 FXSYS_memset(&m_rtPage, 0, sizeof(CFX_RectF)); |
| 137 FXSYS_memset(&m_rtPageMargin, 0, sizeof(CFX_RectF)); | 136 FXSYS_memset(&m_rtPageMargin, 0, sizeof(CFX_RectF)); |
| 138 FXSYS_memset(&m_rtPageContents, 0, sizeof(CFX_RectF)); | 137 FXSYS_memset(&m_rtPageContents, 0, sizeof(CFX_RectF)); |
| 139 FXSYS_memset(&m_rtPageCanvas, 0, sizeof(CFX_RectF)); | 138 FXSYS_memset(&m_rtPageCanvas, 0, sizeof(CFX_RectF)); |
| 140 m_pEditEngine = (CFDE_TxtEdtEngine*)pEngine; | 139 m_pEditEngine = (CFDE_TxtEdtEngine*)pEngine; |
| 141 } | 140 } |
| 142 | 141 |
| 143 CFDE_TxtEdtPage::~CFDE_TxtEdtPage() { | 142 CFDE_TxtEdtPage::~CFDE_TxtEdtPage() { |
| 144 m_PieceMassArr.RemoveAll(TRUE); | 143 m_PieceMassArr.RemoveAll(TRUE); |
| 145 delete m_pTextSet; | 144 delete m_pTextSet; |
| 146 delete[] m_pCharWidth; | 145 delete[] m_pCharWidth; |
| 147 if (m_pIter) | 146 if (m_pIter) |
| 148 m_pIter->Release(); | 147 m_pIter->Release(); |
| 149 } | 148 } |
| 150 | 149 |
| 151 void CFDE_TxtEdtPage::Release() { | 150 void CFDE_TxtEdtPage::Release() { |
| 152 delete this; | 151 delete this; |
| 153 } | 152 } |
| 154 IFDE_TxtEdtEngine* CFDE_TxtEdtPage::GetEngine() const { | 153 CFDE_TxtEdtEngine* CFDE_TxtEdtPage::GetEngine() const { |
| 155 return (IFDE_TxtEdtEngine*)m_pEditEngine; | 154 return m_pEditEngine; |
| 156 } | 155 } |
| 157 FDE_VISUALOBJTYPE CFDE_TxtEdtPage::GetType() { | 156 FDE_VISUALOBJTYPE CFDE_TxtEdtPage::GetType() { |
| 158 return FDE_VISUALOBJ_Text; | 157 return FDE_VISUALOBJ_Text; |
| 159 } | 158 } |
| 160 FX_BOOL CFDE_TxtEdtPage::GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox) { | 159 FX_BOOL CFDE_TxtEdtPage::GetBBox(FDE_HVISUALOBJ hVisualObj, CFX_RectF& bbox) { |
| 161 return FALSE; | 160 return FALSE; |
| 162 } | 161 } |
| 163 FX_BOOL CFDE_TxtEdtPage::GetMatrix(FDE_HVISUALOBJ hVisualObj, | 162 FX_BOOL CFDE_TxtEdtPage::GetMatrix(FDE_HVISUALOBJ hVisualObj, |
| 164 CFX_Matrix& matrix) { | 163 CFX_Matrix& matrix) { |
| 165 return FALSE; | 164 return FALSE; |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 } | 341 } |
| 343 RectFArr.Add(piece->rtPiece); | 342 RectFArr.Add(piece->rtPiece); |
| 344 } | 343 } |
| 345 } | 344 } |
| 346 } | 345 } |
| 347 | 346 |
| 348 int32_t CFDE_TxtEdtPage::SelectWord(const CFX_PointF& fPoint, int32_t& nCount) { | 347 int32_t CFDE_TxtEdtPage::SelectWord(const CFX_PointF& fPoint, int32_t& nCount) { |
| 349 if (m_nRefCount < 0) { | 348 if (m_nRefCount < 0) { |
| 350 return -1; | 349 return -1; |
| 351 } | 350 } |
| 352 IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); | 351 CFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); |
| 353 FX_BOOL bBefore; | 352 FX_BOOL bBefore; |
| 354 int32_t nIndex = GetCharIndex(fPoint, bBefore); | 353 int32_t nIndex = GetCharIndex(fPoint, bBefore); |
| 355 if (nIndex == m_pEditEngine->GetTextBufLength()) { | 354 if (nIndex == m_pEditEngine->GetTextBufLength()) { |
| 356 nIndex = m_pEditEngine->GetTextBufLength() - 1; | 355 nIndex = m_pEditEngine->GetTextBufLength() - 1; |
| 357 } | 356 } |
| 358 if (nIndex < 0) { | 357 if (nIndex < 0) { |
| 359 return -1; | 358 return -1; |
| 360 } | 359 } |
| 361 CFX_WordBreak* pIter = new CFX_WordBreak; | 360 CFX_WordBreak* pIter = new CFX_WordBreak; |
| 362 pIter->Attach(new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf)); | 361 pIter->Attach(new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf)); |
| 363 pIter->SetAt(nIndex); | 362 pIter->SetAt(nIndex); |
| 364 nCount = pIter->GetWordLength(); | 363 nCount = pIter->GetWordLength(); |
| 365 int32_t nRet = pIter->GetWordPos(); | 364 int32_t nRet = pIter->GetWordPos(); |
| 366 pIter->Release(); | 365 pIter->Release(); |
| 367 return nRet; | 366 return nRet; |
| 368 } | 367 } |
| 369 FX_BOOL CFDE_TxtEdtPage::IsLoaded(const CFX_RectF* pClipBox) { | 368 FX_BOOL CFDE_TxtEdtPage::IsLoaded(const CFX_RectF* pClipBox) { |
| 370 return m_bLoaded; | 369 return m_bLoaded; |
| 371 } | 370 } |
| 372 int32_t CFDE_TxtEdtPage::LoadPage(const CFX_RectF* pClipBox, | 371 int32_t CFDE_TxtEdtPage::LoadPage(const CFX_RectF* pClipBox, |
| 373 IFX_Pause* pPause) { | 372 IFX_Pause* pPause) { |
| 374 if (m_nRefCount > 0) { | 373 if (m_nRefCount > 0) { |
| 375 m_nRefCount++; | 374 m_nRefCount++; |
| 376 return m_nRefCount; | 375 return m_nRefCount; |
| 377 } | 376 } |
| 378 IFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); | 377 CFDE_TxtEdtBuf* pBuf = m_pEditEngine->GetTextBuf(); |
| 379 const FDE_TXTEDTPARAMS* pParams = m_pEditEngine->GetEditParams(); | 378 const FDE_TXTEDTPARAMS* pParams = m_pEditEngine->GetEditParams(); |
| 380 if (m_pIter != NULL) { | 379 if (m_pIter != NULL) { |
| 381 m_pIter->Release(); | 380 m_pIter->Release(); |
| 382 } | 381 } |
| 383 FX_WCHAR wcAlias = 0; | 382 FX_WCHAR wcAlias = 0; |
| 384 if (pParams->dwMode & FDE_TEXTEDITMODE_Password) { | 383 if (pParams->dwMode & FDE_TEXTEDITMODE_Password) { |
| 385 wcAlias = m_pEditEngine->GetAliasChar(); | 384 wcAlias = m_pEditEngine->GetAliasChar(); |
| 386 } | 385 } |
| 387 m_pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf, wcAlias); | 386 m_pIter = new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)pBuf, wcAlias); |
| 388 CFX_TxtBreak* pBreak = m_pEditEngine->GetTextBreak(); | 387 CFX_TxtBreak* pBreak = m_pEditEngine->GetTextBreak(); |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 ptF.x = rtF.left; | 626 ptF.x = rtF.left; |
| 628 } else if (ptF.x >= rtF.right()) { | 627 } else if (ptF.x >= rtF.right()) { |
| 629 ptF.x = rtF.right() - fTolerance; | 628 ptF.x = rtF.right() - fTolerance; |
| 630 } | 629 } |
| 631 if (ptF.y < rtF.top) { | 630 if (ptF.y < rtF.top) { |
| 632 ptF.y = rtF.top; | 631 ptF.y = rtF.top; |
| 633 } else if (ptF.y >= rtF.bottom()) { | 632 } else if (ptF.y >= rtF.bottom()) { |
| 634 ptF.y = rtF.bottom() - fTolerance; | 633 ptF.y = rtF.bottom() - fTolerance; |
| 635 } | 634 } |
| 636 } | 635 } |
| OLD | NEW |