| 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 "fpdfsdk/pdfwindow/PWL_Edit.h" | 7 #include "fpdfsdk/pdfwindow/PWL_Edit.h" |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 break; | 234 break; |
| 235 } | 235 } |
| 236 default: | 236 default: |
| 237 break; | 237 break; |
| 238 } | 238 } |
| 239 } | 239 } |
| 240 | 240 |
| 241 sAppStream << sLine; | 241 sAppStream << sLine; |
| 242 | 242 |
| 243 CFX_ByteTextBuf sText; | 243 CFX_ByteTextBuf sText; |
| 244 | 244 CFX_FloatPoint ptOffset = CFX_FloatPoint(); |
| 245 CFX_FloatPoint ptOffset = CFX_FloatPoint(0.0f, 0.0f); | |
| 246 | |
| 247 CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange(); | 245 CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange(); |
| 248 CPVT_WordRange wrSelect = GetSelectWordRange(); | 246 CPVT_WordRange wrSelect = GetSelectWordRange(); |
| 249 CPVT_WordRange wrVisible = | 247 CPVT_WordRange wrVisible = |
| 250 (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange()); | 248 HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange(); |
| 249 |
| 251 CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos); | 250 CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos); |
| 252 CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos); | 251 CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos); |
| 253 | |
| 254 CPVT_WordRange wrTemp = | 252 CPVT_WordRange wrTemp = |
| 255 CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible); | 253 CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible); |
| 256 CFX_ByteString sEditSel = | 254 CFX_ByteString sEditSel = |
| 257 CPWL_Utils::GetEditSelAppStream(m_pEdit.get(), ptOffset, &wrTemp); | 255 CPWL_Utils::GetEditSelAppStream(m_pEdit.get(), ptOffset, &wrTemp); |
| 258 | 256 |
| 259 if (sEditSel.GetLength() > 0) | 257 if (sEditSel.GetLength() > 0) |
| 260 sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR).AsStringC() | 258 sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR).AsStringC() |
| 261 << sEditSel.AsStringC(); | 259 << sEditSel.AsStringC(); |
| 262 | 260 |
| 263 wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelBefore); | 261 wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelBefore); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 break; | 376 break; |
| 379 } | 377 } |
| 380 default: | 378 default: |
| 381 break; | 379 break; |
| 382 } | 380 } |
| 383 } | 381 } |
| 384 | 382 |
| 385 CFX_FloatRect rcClip; | 383 CFX_FloatRect rcClip; |
| 386 CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); | 384 CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); |
| 387 CPVT_WordRange* pRange = nullptr; | 385 CPVT_WordRange* pRange = nullptr; |
| 388 | |
| 389 if (!HasFlag(PES_TEXTOVERFLOW)) { | 386 if (!HasFlag(PES_TEXTOVERFLOW)) { |
| 390 rcClip = GetClientRect(); | 387 rcClip = GetClientRect(); |
| 391 pRange = &wrRange; | 388 pRange = &wrRange; |
| 392 } | 389 } |
| 390 |
| 393 CFX_SystemHandler* pSysHandler = GetSystemHandler(); | 391 CFX_SystemHandler* pSysHandler = GetSystemHandler(); |
| 394 CFX_Edit::DrawEdit( | 392 CFX_Edit::DrawEdit( |
| 395 pDevice, pUser2Device, m_pEdit.get(), | 393 pDevice, pUser2Device, m_pEdit.get(), |
| 396 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), | 394 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), |
| 397 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), | 395 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), |
| 398 rcClip, CFX_FloatPoint(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller); | 396 rcClip, CFX_FloatPoint(), pRange, pSysHandler, m_pFormFiller); |
| 399 } | 397 } |
| 400 | 398 |
| 401 FX_BOOL CPWL_Edit::OnLButtonDown(const CFX_FloatPoint& point, uint32_t nFlag) { | 399 FX_BOOL CPWL_Edit::OnLButtonDown(const CFX_FloatPoint& point, uint32_t nFlag) { |
| 402 CPWL_Wnd::OnLButtonDown(point, nFlag); | 400 CPWL_Wnd::OnLButtonDown(point, nFlag); |
| 403 | 401 |
| 404 if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { | 402 if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { |
| 405 if (m_bMouseDown) | 403 if (m_bMouseDown) |
| 406 InvalidateRect(); | 404 InvalidateRect(); |
| 407 | 405 |
| 408 m_bMouseDown = TRUE; | 406 m_bMouseDown = TRUE; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 438 if (!pSH) | 436 if (!pSH) |
| 439 return FALSE; | 437 return FALSE; |
| 440 | 438 |
| 441 SetFocus(); | 439 SetFocus(); |
| 442 | 440 |
| 443 return FALSE; | 441 return FALSE; |
| 444 } | 442 } |
| 445 | 443 |
| 446 void CPWL_Edit::OnSetFocus() { | 444 void CPWL_Edit::OnSetFocus() { |
| 447 SetEditCaret(TRUE); | 445 SetEditCaret(TRUE); |
| 448 | |
| 449 if (!IsReadOnly()) { | 446 if (!IsReadOnly()) { |
| 450 if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) | 447 if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) |
| 451 pFocusHandler->OnSetFocus(this); | 448 pFocusHandler->OnSetFocus(this); |
| 452 } | 449 } |
| 453 | |
| 454 m_bFocus = TRUE; | 450 m_bFocus = TRUE; |
| 455 } | 451 } |
| 456 | 452 |
| 457 void CPWL_Edit::OnKillFocus() { | 453 void CPWL_Edit::OnKillFocus() { |
| 458 ShowVScrollBar(FALSE); | 454 ShowVScrollBar(FALSE); |
| 459 | |
| 460 m_pEdit->SelectNone(); | 455 m_pEdit->SelectNone(); |
| 461 SetCaret(FALSE, CFX_FloatPoint(0.0f, 0.0f), CFX_FloatPoint(0.0f, 0.0f)); | 456 SetCaret(FALSE, CFX_FloatPoint(), CFX_FloatPoint()); |
| 462 SetCharSet(FXFONT_ANSI_CHARSET); | 457 SetCharSet(FXFONT_ANSI_CHARSET); |
| 463 m_bFocus = FALSE; | 458 m_bFocus = FALSE; |
| 464 } | 459 } |
| 465 | 460 |
| 466 void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace) { | 461 void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace) { |
| 467 m_pEdit->SetCharSpace(fCharSpace); | 462 m_pEdit->SetCharSpace(fCharSpace); |
| 468 } | 463 } |
| 469 | 464 |
| 470 CFX_ByteString CPWL_Edit::GetSelectAppearanceStream( | 465 CFX_ByteString CPWL_Edit::GetSelectAppearanceStream( |
| 471 const CFX_FloatPoint& ptOffset) const { | 466 const CFX_FloatPoint& ptOffset) const { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 CFX_ByteString CPWL_Edit::GetCaretAppearanceStream( | 498 CFX_ByteString CPWL_Edit::GetCaretAppearanceStream( |
| 504 const CFX_FloatPoint& ptOffset) const { | 499 const CFX_FloatPoint& ptOffset) const { |
| 505 if (m_pEditCaret) | 500 if (m_pEditCaret) |
| 506 return m_pEditCaret->GetCaretAppearanceStream(ptOffset); | 501 return m_pEditCaret->GetCaretAppearanceStream(ptOffset); |
| 507 | 502 |
| 508 return CFX_ByteString(); | 503 return CFX_ByteString(); |
| 509 } | 504 } |
| 510 | 505 |
| 511 CFX_FloatPoint CPWL_Edit::GetWordRightBottomPoint( | 506 CFX_FloatPoint CPWL_Edit::GetWordRightBottomPoint( |
| 512 const CPVT_WordPlace& wpWord) { | 507 const CPVT_WordPlace& wpWord) { |
| 513 CFX_FloatPoint pt(0.0f, 0.0f); | |
| 514 | |
| 515 CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); | 508 CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); |
| 516 CPVT_WordPlace wpOld = pIterator->GetAt(); | 509 CPVT_WordPlace wpOld = pIterator->GetAt(); |
| 517 pIterator->SetAt(wpWord); | 510 pIterator->SetAt(wpWord); |
| 511 |
| 512 CFX_FloatPoint pt; |
| 518 CPVT_Word word; | 513 CPVT_Word word; |
| 519 if (pIterator->GetWord(word)) { | 514 if (pIterator->GetWord(word)) { |
| 520 pt = CFX_FloatPoint(word.ptWord.x + word.fWidth, | 515 pt = CFX_FloatPoint(word.ptWord.x + word.fWidth, |
| 521 word.ptWord.y + word.fDescent); | 516 word.ptWord.y + word.fDescent); |
| 522 } | 517 } |
| 523 | |
| 524 pIterator->SetAt(wpOld); | 518 pIterator->SetAt(wpOld); |
| 525 | |
| 526 return pt; | 519 return pt; |
| 527 } | 520 } |
| 528 | 521 |
| 529 FX_BOOL CPWL_Edit::IsTextFull() const { | 522 FX_BOOL CPWL_Edit::IsTextFull() const { |
| 530 return m_pEdit->IsTextFull(); | 523 return m_pEdit->IsTextFull(); |
| 531 } | 524 } |
| 532 | 525 |
| 533 FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, | 526 FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, |
| 534 const CFX_FloatRect& rcPlate, | 527 const CFX_FloatRect& rcPlate, |
| 535 int32_t nCharArray) { | 528 int32_t nCharArray) { |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 891 } | 884 } |
| 892 | 885 |
| 893 void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder, | 886 void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder, |
| 894 const CFX_FloatPoint& ptOffset) { | 887 const CFX_FloatPoint& ptOffset) { |
| 895 CFX_ArrayTemplate<CPDF_TextObject*> ObjArray; | 888 CFX_ArrayTemplate<CPDF_TextObject*> ObjArray; |
| 896 CFX_Edit::GeneratePageObjects( | 889 CFX_Edit::GeneratePageObjects( |
| 897 pObjectHolder, m_pEdit.get(), ptOffset, nullptr, | 890 pObjectHolder, m_pEdit.get(), ptOffset, nullptr, |
| 898 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), | 891 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), |
| 899 ObjArray); | 892 ObjArray); |
| 900 } | 893 } |
| OLD | NEW |