| 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/include/pdfwindow/PWL_Edit.h" | 7 #include "fpdfsdk/include/pdfwindow/PWL_Edit.h" |
| 8 | 8 |
| 9 #include "core/include/fxcrt/fx_safe_types.h" | 9 #include "core/include/fxcrt/fx_safe_types.h" |
| 10 #include "core/include/fxcrt/fx_xml.h" | 10 #include "core/include/fxcrt/fx_xml.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 | 66 |
| 67 delete pXML; | 67 delete pXML; |
| 68 } | 68 } |
| 69 } | 69 } |
| 70 | 70 |
| 71 m_pEdit->SetText(swText.c_str()); | 71 m_pEdit->SetText(swText.c_str()); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void CPWL_Edit::RePosChildWnd() { | 74 void CPWL_Edit::RePosChildWnd() { |
| 75 if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { | 75 if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { |
| 76 CFX_FloatRect rcWindow = m_rcOldWindow; | 76 CPDF_Rect rcWindow = m_rcOldWindow; |
| 77 CFX_FloatRect rcVScroll = | 77 CPDF_Rect rcVScroll = |
| 78 CFX_FloatRect(rcWindow.right, rcWindow.bottom, | 78 CPDF_Rect(rcWindow.right, rcWindow.bottom, |
| 79 rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top); | 79 rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top); |
| 80 pVSB->Move(rcVScroll, TRUE, FALSE); | 80 pVSB->Move(rcVScroll, TRUE, FALSE); |
| 81 } | 81 } |
| 82 | 82 |
| 83 if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW)) | 83 if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW)) |
| 84 m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( | 84 m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( |
| 85 GetClientRect(), 1.0f)); // +1 for caret beside border | 85 GetClientRect(), 1.0f)); // +1 for caret beside border |
| 86 | 86 |
| 87 CPWL_EditCtrl::RePosChildWnd(); | 87 CPWL_EditCtrl::RePosChildWnd(); |
| 88 } | 88 } |
| 89 | 89 |
| 90 CFX_FloatRect CPWL_Edit::GetClientRect() const { | 90 CPDF_Rect CPWL_Edit::GetClientRect() const { |
| 91 CFX_FloatRect rcClient = CPWL_Utils::DeflateRect( | 91 CPDF_Rect rcClient = CPWL_Utils::DeflateRect( |
| 92 GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); | 92 GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); |
| 93 | 93 |
| 94 if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { | 94 if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { |
| 95 if (pVSB->IsVisible()) { | 95 if (pVSB->IsVisible()) { |
| 96 rcClient.right -= PWL_SCROLLBAR_WIDTH; | 96 rcClient.right -= PWL_SCROLLBAR_WIDTH; |
| 97 } | 97 } |
| 98 } | 98 } |
| 99 | 99 |
| 100 return rcClient; | 100 return rcClient; |
| 101 } | 101 } |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 m_pEdit->SetPasswordChar('*', FALSE); | 227 m_pEdit->SetPasswordChar('*', FALSE); |
| 228 } | 228 } |
| 229 | 229 |
| 230 m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE); | 230 m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE); |
| 231 m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE); | 231 m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE); |
| 232 m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE); | 232 m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE); |
| 233 m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE); | 233 m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE); |
| 234 m_pEdit->EnableUndo(HasFlag(PES_UNDO)); | 234 m_pEdit->EnableUndo(HasFlag(PES_UNDO)); |
| 235 | 235 |
| 236 if (HasFlag(PES_TEXTOVERFLOW)) { | 236 if (HasFlag(PES_TEXTOVERFLOW)) { |
| 237 SetClipRect(CFX_FloatRect(0.0f, 0.0f, 0.0f, 0.0f)); | 237 SetClipRect(CPDF_Rect(0.0f, 0.0f, 0.0f, 0.0f)); |
| 238 m_pEdit->SetTextOverflow(TRUE, FALSE); | 238 m_pEdit->SetTextOverflow(TRUE, FALSE); |
| 239 } else { | 239 } else { |
| 240 if (m_pEditCaret) { | 240 if (m_pEditCaret) { |
| 241 m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( | 241 m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( |
| 242 GetClientRect(), 1.0f)); // +1 for caret beside border | 242 GetClientRect(), 1.0f)); // +1 for caret beside border |
| 243 } | 243 } |
| 244 } | 244 } |
| 245 | 245 |
| 246 if (HasFlag(PES_SPELLCHECK)) { | 246 if (HasFlag(PES_SPELLCHECK)) { |
| 247 m_pSpellCheck = GetCreationParam().pSpellCheck; | 247 m_pSpellCheck = GetCreationParam().pSpellCheck; |
| 248 } | 248 } |
| 249 } | 249 } |
| 250 | 250 |
| 251 void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { | 251 void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { |
| 252 CPWL_Wnd::GetThisAppearanceStream(sAppStream); | 252 CPWL_Wnd::GetThisAppearanceStream(sAppStream); |
| 253 | 253 |
| 254 CFX_FloatRect rcClient = GetClientRect(); | 254 CPDF_Rect rcClient = GetClientRect(); |
| 255 CFX_ByteTextBuf sLine; | 255 CFX_ByteTextBuf sLine; |
| 256 | 256 |
| 257 int32_t nCharArray = m_pEdit->GetCharArray(); | 257 int32_t nCharArray = m_pEdit->GetCharArray(); |
| 258 | 258 |
| 259 if (nCharArray > 0) { | 259 if (nCharArray > 0) { |
| 260 switch (GetBorderStyle()) { | 260 switch (GetBorderStyle()) { |
| 261 case PBS_SOLID: { | 261 case PBS_SOLID: { |
| 262 sLine << "q\n" << GetBorderWidth() << " w\n" | 262 sLine << "q\n" << GetBorderWidth() << " w\n" |
| 263 << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE) | 263 << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE) |
| 264 << " 2 J 0 j\n"; | 264 << " 2 J 0 j\n"; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 292 | 292 |
| 293 sLine << "Q\n"; | 293 sLine << "Q\n"; |
| 294 } break; | 294 } break; |
| 295 } | 295 } |
| 296 } | 296 } |
| 297 | 297 |
| 298 sAppStream << sLine; | 298 sAppStream << sLine; |
| 299 | 299 |
| 300 CFX_ByteTextBuf sText; | 300 CFX_ByteTextBuf sText; |
| 301 | 301 |
| 302 CFX_FloatPoint ptOffset = CFX_FloatPoint(0.0f, 0.0f); | 302 CPDF_Point ptOffset = CPDF_Point(0.0f, 0.0f); |
| 303 | 303 |
| 304 CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange(); | 304 CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange(); |
| 305 CPVT_WordRange wrSelect = GetSelectWordRange(); | 305 CPVT_WordRange wrSelect = GetSelectWordRange(); |
| 306 CPVT_WordRange wrVisible = | 306 CPVT_WordRange wrVisible = |
| 307 (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange()); | 307 (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange()); |
| 308 CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos); | 308 CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos); |
| 309 CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos); | 309 CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos); |
| 310 | 310 |
| 311 CPVT_WordRange wrTemp = | 311 CPVT_WordRange wrTemp = |
| 312 CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible); | 312 CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 if (HasFlag(PES_SPELLCHECK)) { | 348 if (HasFlag(PES_SPELLCHECK)) { |
| 349 CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream( | 349 CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream( |
| 350 m_pEdit, m_pSpellCheck, ptOffset, &wrVisible); | 350 m_pEdit, m_pSpellCheck, ptOffset, &wrVisible); |
| 351 if (sSpellCheck.GetLength() > 0) | 351 if (sSpellCheck.GetLength() > 0) |
| 352 sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB, 1, 0, 0), | 352 sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB, 1, 0, 0), |
| 353 FALSE) | 353 FALSE) |
| 354 << sSpellCheck; | 354 << sSpellCheck; |
| 355 } | 355 } |
| 356 | 356 |
| 357 if (sText.GetLength() > 0) { | 357 if (sText.GetLength() > 0) { |
| 358 CFX_FloatRect rcClient = GetClientRect(); | 358 CPDF_Rect rcClient = GetClientRect(); |
| 359 sAppStream << "q\n/Tx BMC\n"; | 359 sAppStream << "q\n/Tx BMC\n"; |
| 360 | 360 |
| 361 if (!HasFlag(PES_TEXTOVERFLOW)) | 361 if (!HasFlag(PES_TEXTOVERFLOW)) |
| 362 sAppStream << rcClient.left << " " << rcClient.bottom << " " | 362 sAppStream << rcClient.left << " " << rcClient.bottom << " " |
| 363 << rcClient.right - rcClient.left << " " | 363 << rcClient.right - rcClient.left << " " |
| 364 << rcClient.top - rcClient.bottom << " re W n\n"; | 364 << rcClient.top - rcClient.bottom << " re W n\n"; |
| 365 | 365 |
| 366 sAppStream << sText; | 366 sAppStream << sText; |
| 367 | 367 |
| 368 sAppStream << "EMC\nQ\n"; | 368 sAppStream << "EMC\nQ\n"; |
| 369 } | 369 } |
| 370 } | 370 } |
| 371 | 371 |
| 372 void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, | 372 void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, |
| 373 CFX_Matrix* pUser2Device) { | 373 CFX_Matrix* pUser2Device) { |
| 374 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); | 374 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); |
| 375 | 375 |
| 376 CFX_FloatRect rcClient = GetClientRect(); | 376 CPDF_Rect rcClient = GetClientRect(); |
| 377 CFX_ByteTextBuf sLine; | 377 CFX_ByteTextBuf sLine; |
| 378 | 378 |
| 379 int32_t nCharArray = m_pEdit->GetCharArray(); | 379 int32_t nCharArray = m_pEdit->GetCharArray(); |
| 380 FX_SAFE_INT32 nCharArraySafe = nCharArray; | 380 FX_SAFE_INT32 nCharArraySafe = nCharArray; |
| 381 nCharArraySafe -= 1; | 381 nCharArraySafe -= 1; |
| 382 nCharArraySafe *= 2; | 382 nCharArraySafe *= 2; |
| 383 | 383 |
| 384 if (nCharArray > 0 && nCharArraySafe.IsValid()) { | 384 if (nCharArray > 0 && nCharArraySafe.IsValid()) { |
| 385 switch (GetBorderStyle()) { | 385 switch (GetBorderStyle()) { |
| 386 case PBS_SOLID: { | 386 case PBS_SOLID: { |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 } | 434 } |
| 435 if (path.GetPointCount() > 0) | 435 if (path.GetPointCount() > 0) |
| 436 pDevice->DrawPath( | 436 pDevice->DrawPath( |
| 437 &path, pUser2Device, &gsd, 0, | 437 &path, pUser2Device, &gsd, 0, |
| 438 CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255), | 438 CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255), |
| 439 FXFILL_ALTERNATE); | 439 FXFILL_ALTERNATE); |
| 440 } break; | 440 } break; |
| 441 } | 441 } |
| 442 } | 442 } |
| 443 | 443 |
| 444 CFX_FloatRect rcClip; | 444 CPDF_Rect rcClip; |
| 445 CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); | 445 CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange(); |
| 446 CPVT_WordRange* pRange = NULL; | 446 CPVT_WordRange* pRange = NULL; |
| 447 | 447 |
| 448 if (!HasFlag(PES_TEXTOVERFLOW)) { | 448 if (!HasFlag(PES_TEXTOVERFLOW)) { |
| 449 rcClip = GetClientRect(); | 449 rcClip = GetClientRect(); |
| 450 pRange = &wrRange; | 450 pRange = &wrRange; |
| 451 } | 451 } |
| 452 IFX_SystemHandler* pSysHandler = GetSystemHandler(); | 452 IFX_SystemHandler* pSysHandler = GetSystemHandler(); |
| 453 IFX_Edit::DrawEdit( | 453 IFX_Edit::DrawEdit( |
| 454 pDevice, pUser2Device, m_pEdit, | 454 pDevice, pUser2Device, m_pEdit, |
| 455 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), | 455 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), |
| 456 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), | 456 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()), |
| 457 rcClip, CFX_FloatPoint(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller); | 457 rcClip, CPDF_Point(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller); |
| 458 | 458 |
| 459 if (HasFlag(PES_SPELLCHECK)) { | 459 if (HasFlag(PES_SPELLCHECK)) { |
| 460 CPWL_Utils::DrawEditSpellCheck(pDevice, pUser2Device, m_pEdit, rcClip, | 460 CPWL_Utils::DrawEditSpellCheck(pDevice, pUser2Device, m_pEdit, rcClip, |
| 461 CFX_FloatPoint(0.0f, 0.0f), pRange, | 461 CPDF_Point(0.0f, 0.0f), pRange, |
| 462 GetCreationParam().pSpellCheck); | 462 GetCreationParam().pSpellCheck); |
| 463 } | 463 } |
| 464 } | 464 } |
| 465 | 465 |
| 466 FX_BOOL CPWL_Edit::OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) { | 466 FX_BOOL CPWL_Edit::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { |
| 467 CPWL_Wnd::OnLButtonDown(point, nFlag); | 467 CPWL_Wnd::OnLButtonDown(point, nFlag); |
| 468 | 468 |
| 469 if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { | 469 if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { |
| 470 if (m_bMouseDown) | 470 if (m_bMouseDown) |
| 471 InvalidateRect(); | 471 InvalidateRect(); |
| 472 | 472 |
| 473 m_bMouseDown = TRUE; | 473 m_bMouseDown = TRUE; |
| 474 SetCapture(); | 474 SetCapture(); |
| 475 | 475 |
| 476 m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 476 m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 477 } | 477 } |
| 478 | 478 |
| 479 return TRUE; | 479 return TRUE; |
| 480 } | 480 } |
| 481 | 481 |
| 482 FX_BOOL CPWL_Edit::OnLButtonDblClk(const CFX_FloatPoint& point, | 482 FX_BOOL CPWL_Edit::OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag) { |
| 483 FX_DWORD nFlag) { | |
| 484 CPWL_Wnd::OnLButtonDblClk(point, nFlag); | 483 CPWL_Wnd::OnLButtonDblClk(point, nFlag); |
| 485 | 484 |
| 486 if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { | 485 if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) { |
| 487 m_pEdit->SelectAll(); | 486 m_pEdit->SelectAll(); |
| 488 } | 487 } |
| 489 | 488 |
| 490 return TRUE; | 489 return TRUE; |
| 491 } | 490 } |
| 492 | 491 |
| 493 #define WM_PWLEDIT_UNDO 0x01 | 492 #define WM_PWLEDIT_UNDO 0x01 |
| 494 #define WM_PWLEDIT_REDO 0x02 | 493 #define WM_PWLEDIT_REDO 0x02 |
| 495 #define WM_PWLEDIT_CUT 0x03 | 494 #define WM_PWLEDIT_CUT 0x03 |
| 496 #define WM_PWLEDIT_COPY 0x04 | 495 #define WM_PWLEDIT_COPY 0x04 |
| 497 #define WM_PWLEDIT_PASTE 0x05 | 496 #define WM_PWLEDIT_PASTE 0x05 |
| 498 #define WM_PWLEDIT_DELETE 0x06 | 497 #define WM_PWLEDIT_DELETE 0x06 |
| 499 #define WM_PWLEDIT_SELECTALL 0x07 | 498 #define WM_PWLEDIT_SELECTALL 0x07 |
| 500 #define WM_PWLEDIT_SUGGEST 0x08 | 499 #define WM_PWLEDIT_SUGGEST 0x08 |
| 501 | 500 |
| 502 FX_BOOL CPWL_Edit::OnRButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) { | 501 FX_BOOL CPWL_Edit::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { |
| 503 if (m_bMouseDown) | 502 if (m_bMouseDown) |
| 504 return FALSE; | 503 return FALSE; |
| 505 | 504 |
| 506 CPWL_Wnd::OnRButtonUp(point, nFlag); | 505 CPWL_Wnd::OnRButtonUp(point, nFlag); |
| 507 | 506 |
| 508 if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point)) | 507 if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point)) |
| 509 return TRUE; | 508 return TRUE; |
| 510 | 509 |
| 511 IFX_SystemHandler* pSH = GetSystemHandler(); | 510 IFX_SystemHandler* pSH = GetSystemHandler(); |
| 512 if (!pSH) | 511 if (!pSH) |
| 513 return FALSE; | 512 return FALSE; |
| 514 | 513 |
| 515 SetFocus(); | 514 SetFocus(); |
| 516 | 515 |
| 517 CPVT_WordRange wrLatin = GetLatinWordsRange(point); | 516 CPVT_WordRange wrLatin = GetLatinWordsRange(point); |
| 518 CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin); | 517 CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin); |
| 519 | 518 |
| 520 FX_HMENU hPopup = pSH->CreatePopupMenu(); | 519 FX_HMENU hPopup = pSH->CreatePopupMenu(); |
| 521 if (!hPopup) | 520 if (!hPopup) |
| 522 return FALSE; | 521 return FALSE; |
| 523 | 522 |
| 524 std::vector<CFX_ByteString> sSuggestWords; | 523 std::vector<CFX_ByteString> sSuggestWords; |
| 525 CFX_FloatPoint ptPopup = point; | 524 CPDF_Point ptPopup = point; |
| 526 | 525 |
| 527 if (!IsReadOnly()) { | 526 if (!IsReadOnly()) { |
| 528 if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty()) { | 527 if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty()) { |
| 529 if (m_pSpellCheck) { | 528 if (m_pSpellCheck) { |
| 530 CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin); | 529 CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin); |
| 531 if (!m_pSpellCheck->CheckWord(sLatin)) { | 530 if (!m_pSpellCheck->CheckWord(sLatin)) { |
| 532 m_pSpellCheck->SuggestWords(sLatin, sSuggestWords); | 531 m_pSpellCheck->SuggestWords(sLatin, sSuggestWords); |
| 533 | 532 |
| 534 int32_t nSuggest = pdfium::CollectionSize<int32_t>(sSuggestWords); | 533 int32_t nSuggest = pdfium::CollectionSize<int32_t>(sSuggestWords); |
| 535 for (int32_t nWord = 0; nWord < nSuggest; nWord++) { | 534 for (int32_t nWord = 0; nWord < nSuggest; nWord++) { |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 pFocusHandler->OnSetFocus(this); | 677 pFocusHandler->OnSetFocus(this); |
| 679 } | 678 } |
| 680 | 679 |
| 681 m_bFocus = TRUE; | 680 m_bFocus = TRUE; |
| 682 } | 681 } |
| 683 | 682 |
| 684 void CPWL_Edit::OnKillFocus() { | 683 void CPWL_Edit::OnKillFocus() { |
| 685 ShowVScrollBar(FALSE); | 684 ShowVScrollBar(FALSE); |
| 686 | 685 |
| 687 m_pEdit->SelectNone(); | 686 m_pEdit->SelectNone(); |
| 688 SetCaret(FALSE, CFX_FloatPoint(0.0f, 0.0f), CFX_FloatPoint(0.0f, 0.0f)); | 687 SetCaret(FALSE, CPDF_Point(0.0f, 0.0f), CPDF_Point(0.0f, 0.0f)); |
| 689 | 688 |
| 690 SetCharSet(0); | 689 SetCharSet(0); |
| 691 | 690 |
| 692 if (!IsReadOnly()) { | 691 if (!IsReadOnly()) { |
| 693 if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) | 692 if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler()) |
| 694 pFocusHandler->OnKillFocus(this); | 693 pFocusHandler->OnKillFocus(this); |
| 695 } | 694 } |
| 696 | 695 |
| 697 m_bFocus = FALSE; | 696 m_bFocus = FALSE; |
| 698 } | 697 } |
| 699 | 698 |
| 700 void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint /* = TRUE*/) { | 699 void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint /* = TRUE*/) { |
| 701 m_pEdit->SetHorzScale(nHorzScale, bPaint); | 700 m_pEdit->SetHorzScale(nHorzScale, bPaint); |
| 702 } | 701 } |
| 703 | 702 |
| 704 void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint /* = TRUE*/) { | 703 void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint /* = TRUE*/) { |
| 705 m_pEdit->SetCharSpace(fCharSpace, bPaint); | 704 m_pEdit->SetCharSpace(fCharSpace, bPaint); |
| 706 } | 705 } |
| 707 | 706 |
| 708 void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading, | 707 void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading, |
| 709 FX_BOOL bPaint /* = TRUE*/) { | 708 FX_BOOL bPaint /* = TRUE*/) { |
| 710 m_pEdit->SetLineLeading(fLineLeading, bPaint); | 709 m_pEdit->SetLineLeading(fLineLeading, bPaint); |
| 711 } | 710 } |
| 712 | 711 |
| 713 CFX_ByteString CPWL_Edit::GetSelectAppearanceStream( | 712 CFX_ByteString CPWL_Edit::GetSelectAppearanceStream( |
| 714 const CFX_FloatPoint& ptOffset) const { | 713 const CPDF_Point& ptOffset) const { |
| 715 CPVT_WordRange wr = GetSelectWordRange(); | 714 CPVT_WordRange wr = GetSelectWordRange(); |
| 716 return CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wr); | 715 return CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wr); |
| 717 } | 716 } |
| 718 | 717 |
| 719 CPVT_WordRange CPWL_Edit::GetSelectWordRange() const { | 718 CPVT_WordRange CPWL_Edit::GetSelectWordRange() const { |
| 720 if (m_pEdit->IsSelected()) { | 719 if (m_pEdit->IsSelected()) { |
| 721 int32_t nStart = -1; | 720 int32_t nStart = -1; |
| 722 int32_t nEnd = -1; | 721 int32_t nEnd = -1; |
| 723 | 722 |
| 724 m_pEdit->GetSel(nStart, nEnd); | 723 m_pEdit->GetSel(nStart, nEnd); |
| 725 | 724 |
| 726 CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart); | 725 CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart); |
| 727 CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd); | 726 CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd); |
| 728 | 727 |
| 729 return CPVT_WordRange(wpStart, wpEnd); | 728 return CPVT_WordRange(wpStart, wpEnd); |
| 730 } | 729 } |
| 731 | 730 |
| 732 return CPVT_WordRange(); | 731 return CPVT_WordRange(); |
| 733 } | 732 } |
| 734 | 733 |
| 735 CFX_ByteString CPWL_Edit::GetTextAppearanceStream( | 734 CFX_ByteString CPWL_Edit::GetTextAppearanceStream( |
| 736 const CFX_FloatPoint& ptOffset) const { | 735 const CPDF_Point& ptOffset) const { |
| 737 CFX_ByteTextBuf sRet; | 736 CFX_ByteTextBuf sRet; |
| 738 CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset); | 737 CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset); |
| 739 | 738 |
| 740 if (sEdit.GetLength() > 0) { | 739 if (sEdit.GetLength() > 0) { |
| 741 sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit | 740 sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit |
| 742 << "ET\n"; | 741 << "ET\n"; |
| 743 } | 742 } |
| 744 | 743 |
| 745 return sRet.GetByteString(); | 744 return sRet.GetByteString(); |
| 746 } | 745 } |
| 747 | 746 |
| 748 CFX_ByteString CPWL_Edit::GetCaretAppearanceStream( | 747 CFX_ByteString CPWL_Edit::GetCaretAppearanceStream( |
| 749 const CFX_FloatPoint& ptOffset) const { | 748 const CPDF_Point& ptOffset) const { |
| 750 if (m_pEditCaret) | 749 if (m_pEditCaret) |
| 751 return m_pEditCaret->GetCaretAppearanceStream(ptOffset); | 750 return m_pEditCaret->GetCaretAppearanceStream(ptOffset); |
| 752 | 751 |
| 753 return CFX_ByteString(); | 752 return CFX_ByteString(); |
| 754 } | 753 } |
| 755 | 754 |
| 756 CFX_FloatPoint CPWL_Edit::GetWordRightBottomPoint( | 755 CPDF_Point CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) { |
| 757 const CPVT_WordPlace& wpWord) { | 756 CPDF_Point pt(0.0f, 0.0f); |
| 758 CFX_FloatPoint pt(0.0f, 0.0f); | |
| 759 | 757 |
| 760 if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { | 758 if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) { |
| 761 CPVT_WordPlace wpOld = pIterator->GetAt(); | 759 CPVT_WordPlace wpOld = pIterator->GetAt(); |
| 762 pIterator->SetAt(wpWord); | 760 pIterator->SetAt(wpWord); |
| 763 CPVT_Word word; | 761 CPVT_Word word; |
| 764 if (pIterator->GetWord(word)) { | 762 if (pIterator->GetWord(word)) { |
| 765 pt = CFX_FloatPoint(word.ptWord.x + word.fWidth, | 763 pt = CPDF_Point(word.ptWord.x + word.fWidth, |
| 766 word.ptWord.y + word.fDescent); | 764 word.ptWord.y + word.fDescent); |
| 767 } | 765 } |
| 768 | 766 |
| 769 pIterator->SetAt(wpOld); | 767 pIterator->SetAt(wpOld); |
| 770 } | 768 } |
| 771 | 769 |
| 772 return pt; | 770 return pt; |
| 773 } | 771 } |
| 774 | 772 |
| 775 FX_BOOL CPWL_Edit::IsTextFull() const { | 773 FX_BOOL CPWL_Edit::IsTextFull() const { |
| 776 return m_pEdit->IsTextFull(); | 774 return m_pEdit->IsTextFull(); |
| 777 } | 775 } |
| 778 | 776 |
| 779 FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, | 777 FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, |
| 780 const CFX_FloatRect& rcPlate, | 778 const CPDF_Rect& rcPlate, |
| 781 int32_t nCharArray) { | 779 int32_t nCharArray) { |
| 782 if (pFont && !pFont->IsStandardFont()) { | 780 if (pFont && !pFont->IsStandardFont()) { |
| 783 FX_RECT rcBBox; | 781 FX_RECT rcBBox; |
| 784 pFont->GetFontBBox(rcBBox); | 782 pFont->GetFontBBox(rcBBox); |
| 785 | 783 |
| 786 CFX_FloatRect rcCell = rcPlate; | 784 CPDF_Rect rcCell = rcPlate; |
| 787 FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width(); | 785 FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width(); |
| 788 FX_FLOAT ydiv = -rcCell.Height() * 1000.0f / rcBBox.Height(); | 786 FX_FLOAT ydiv = -rcCell.Height() * 1000.0f / rcBBox.Height(); |
| 789 | 787 |
| 790 return xdiv < ydiv ? xdiv : ydiv; | 788 return xdiv < ydiv ? xdiv : ydiv; |
| 791 } | 789 } |
| 792 | 790 |
| 793 return 0.0f; | 791 return 0.0f; |
| 794 } | 792 } |
| 795 | 793 |
| 796 void CPWL_Edit::SetCharArray(int32_t nCharArray) { | 794 void CPWL_Edit::SetCharArray(int32_t nCharArray) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 813 | 811 |
| 814 void CPWL_Edit::SetLimitChar(int32_t nLimitChar) { | 812 void CPWL_Edit::SetLimitChar(int32_t nLimitChar) { |
| 815 m_pEdit->SetLimitChar(nLimitChar); | 813 m_pEdit->SetLimitChar(nLimitChar); |
| 816 } | 814 } |
| 817 | 815 |
| 818 void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText) { | 816 void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText) { |
| 819 m_pEdit->Clear(); | 817 m_pEdit->Clear(); |
| 820 m_pEdit->InsertText(csText); | 818 m_pEdit->InsertText(csText); |
| 821 } | 819 } |
| 822 | 820 |
| 823 CFX_FloatRect CPWL_Edit::GetFocusRect() const { | 821 CPDF_Rect CPWL_Edit::GetFocusRect() const { |
| 824 return CFX_FloatRect(); | 822 return CPDF_Rect(); |
| 825 } | 823 } |
| 826 | 824 |
| 827 void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) { | 825 void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) { |
| 828 if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { | 826 if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { |
| 829 if (bShow) { | 827 if (bShow) { |
| 830 if (!pScroll->IsVisible()) { | 828 if (!pScroll->IsVisible()) { |
| 831 pScroll->SetVisible(TRUE); | 829 pScroll->SetVisible(TRUE); |
| 832 CFX_FloatRect rcWindow = GetWindowRect(); | 830 CPDF_Rect rcWindow = GetWindowRect(); |
| 833 m_rcOldWindow = rcWindow; | 831 m_rcOldWindow = rcWindow; |
| 834 rcWindow.right += PWL_SCROLLBAR_WIDTH; | 832 rcWindow.right += PWL_SCROLLBAR_WIDTH; |
| 835 Move(rcWindow, TRUE, TRUE); | 833 Move(rcWindow, TRUE, TRUE); |
| 836 } | 834 } |
| 837 } else { | 835 } else { |
| 838 if (pScroll->IsVisible()) { | 836 if (pScroll->IsVisible()) { |
| 839 pScroll->SetVisible(FALSE); | 837 pScroll->SetVisible(FALSE); |
| 840 Move(m_rcOldWindow, TRUE, TRUE); | 838 Move(m_rcOldWindow, TRUE, TRUE); |
| 841 } | 839 } |
| 842 } | 840 } |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET); | 969 int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET); |
| 972 if (nOldCharSet != nNewCharSet) { | 970 if (nOldCharSet != nNewCharSet) { |
| 973 SetCharSet(nNewCharSet); | 971 SetCharSet(nNewCharSet); |
| 974 } | 972 } |
| 975 } | 973 } |
| 976 | 974 |
| 977 return CPWL_EditCtrl::OnChar(nChar, nFlag); | 975 return CPWL_EditCtrl::OnChar(nChar, nFlag); |
| 978 } | 976 } |
| 979 | 977 |
| 980 FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta, | 978 FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta, |
| 981 const CFX_FloatPoint& point, | 979 const CPDF_Point& point, |
| 982 FX_DWORD nFlag) { | 980 FX_DWORD nFlag) { |
| 983 if (HasFlag(PES_MULTILINE)) { | 981 if (HasFlag(PES_MULTILINE)) { |
| 984 CFX_FloatPoint ptScroll = GetScrollPos(); | 982 CPDF_Point ptScroll = GetScrollPos(); |
| 985 | 983 |
| 986 if (zDelta > 0) { | 984 if (zDelta > 0) { |
| 987 ptScroll.y += GetFontSize(); | 985 ptScroll.y += GetFontSize(); |
| 988 } else { | 986 } else { |
| 989 ptScroll.y -= GetFontSize(); | 987 ptScroll.y -= GetFontSize(); |
| 990 } | 988 } |
| 991 SetScrollPos(ptScroll); | 989 SetScrollPos(ptScroll); |
| 992 | 990 |
| 993 return TRUE; | 991 return TRUE; |
| 994 } | 992 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1089 | 1087 |
| 1090 if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { | 1088 if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) { |
| 1091 wrRet.EndPos = wr2.EndPos; | 1089 wrRet.EndPos = wr2.EndPos; |
| 1092 } else { | 1090 } else { |
| 1093 wrRet.EndPos = wr1.EndPos; | 1091 wrRet.EndPos = wr1.EndPos; |
| 1094 } | 1092 } |
| 1095 | 1093 |
| 1096 return wrRet; | 1094 return wrRet; |
| 1097 } | 1095 } |
| 1098 | 1096 |
| 1099 CPVT_WordRange CPWL_Edit::GetLatinWordsRange( | 1097 CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPDF_Point& point) const { |
| 1100 const CFX_FloatPoint& point) const { | |
| 1101 return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE); | 1098 return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE); |
| 1102 } | 1099 } |
| 1103 | 1100 |
| 1104 CPVT_WordRange CPWL_Edit::GetLatinWordsRange( | 1101 CPVT_WordRange CPWL_Edit::GetLatinWordsRange( |
| 1105 const CPVT_WordPlace& place) const { | 1102 const CPVT_WordPlace& place) const { |
| 1106 return GetSameWordsRange(place, TRUE, FALSE); | 1103 return GetSameWordsRange(place, TRUE, FALSE); |
| 1107 } | 1104 } |
| 1108 | 1105 |
| 1109 CPVT_WordRange CPWL_Edit::GetArabicWordsRange( | 1106 CPVT_WordRange CPWL_Edit::GetArabicWordsRange( |
| 1110 const CPVT_WordPlace& place) const { | 1107 const CPVT_WordPlace& place) const { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1163 } | 1160 } |
| 1164 | 1161 |
| 1165 range.Set(wpStart, wpEnd); | 1162 range.Set(wpStart, wpEnd); |
| 1166 } | 1163 } |
| 1167 | 1164 |
| 1168 return range; | 1165 return range; |
| 1169 } | 1166 } |
| 1170 | 1167 |
| 1171 void CPWL_Edit::GeneratePageObjects( | 1168 void CPWL_Edit::GeneratePageObjects( |
| 1172 CPDF_PageObjectHolder* pObjectHolder, | 1169 CPDF_PageObjectHolder* pObjectHolder, |
| 1173 const CFX_FloatPoint& ptOffset, | 1170 const CPDF_Point& ptOffset, |
| 1174 CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) { | 1171 CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) { |
| 1175 IFX_Edit::GeneratePageObjects( | 1172 IFX_Edit::GeneratePageObjects( |
| 1176 pObjectHolder, m_pEdit, ptOffset, NULL, | 1173 pObjectHolder, m_pEdit, ptOffset, NULL, |
| 1177 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), | 1174 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), |
| 1178 ObjArray); | 1175 ObjArray); |
| 1179 } | 1176 } |
| 1180 | 1177 |
| 1181 void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder, | 1178 void CPWL_Edit::GeneratePageObjects(CPDF_PageObjectHolder* pObjectHolder, |
| 1182 const CFX_FloatPoint& ptOffset) { | 1179 const CPDF_Point& ptOffset) { |
| 1183 CFX_ArrayTemplate<CPDF_TextObject*> ObjArray; | 1180 CFX_ArrayTemplate<CPDF_TextObject*> ObjArray; |
| 1184 IFX_Edit::GeneratePageObjects( | 1181 IFX_Edit::GeneratePageObjects( |
| 1185 pObjectHolder, m_pEdit, ptOffset, NULL, | 1182 pObjectHolder, m_pEdit, ptOffset, NULL, |
| 1186 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), | 1183 CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), |
| 1187 ObjArray); | 1184 ObjArray); |
| 1188 } | 1185 } |
| OLD | NEW |