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/fwl/core/cfwl_edit.h" | 7 #include "xfa/fwl/core/cfwl_edit.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 rect.height += kEditMargin; | 106 rect.height += kEditMargin; |
107 } | 107 } |
108 } | 108 } |
109 return; | 109 return; |
110 } | 110 } |
111 | 111 |
112 rect.Set(0, 0, 0, 0); | 112 rect.Set(0, 0, 0, 0); |
113 | 113 |
114 int32_t iTextLen = m_EdtEngine.GetTextLength(); | 114 int32_t iTextLen = m_EdtEngine.GetTextLength(); |
115 if (iTextLen > 0) { | 115 if (iTextLen > 0) { |
116 CFX_WideString wsText = m_EdtEngine.GetText(0); | 116 CFX_WideString wsText = m_EdtEngine.GetText(0, -1); |
117 CFX_SizeF sz = CalcTextSize( | 117 CFX_SizeF sz = CalcTextSize( |
118 wsText, m_pProperties->m_pThemeProvider, | 118 wsText, m_pProperties->m_pThemeProvider, |
119 !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine)); | 119 !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine)); |
120 rect.Set(0, 0, sz.x, sz.y); | 120 rect.Set(0, 0, sz.x, sz.y); |
121 } | 121 } |
122 CFWL_Widget::GetWidgetRect(rect, true); | 122 CFWL_Widget::GetWidgetRect(rect, true); |
123 } | 123 } |
124 | 124 |
125 void CFWL_Edit::SetStates(uint32_t dwStates) { | 125 void CFWL_Edit::SetStates(uint32_t dwStates) { |
126 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) || | 126 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) || |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 } | 290 } |
291 | 291 |
292 void CFWL_Edit::SetText(const CFX_WideString& wsText) { | 292 void CFWL_Edit::SetText(const CFX_WideString& wsText) { |
293 m_EdtEngine.SetText(wsText); | 293 m_EdtEngine.SetText(wsText); |
294 } | 294 } |
295 | 295 |
296 int32_t CFWL_Edit::GetTextLength() const { | 296 int32_t CFWL_Edit::GetTextLength() const { |
297 return m_EdtEngine.GetTextLength(); | 297 return m_EdtEngine.GetTextLength(); |
298 } | 298 } |
299 | 299 |
300 CFX_WideString CFWL_Edit::GetText(int32_t nStart, int32_t nCount) const { | 300 CFX_WideString CFWL_Edit::GetText() const { |
301 return m_EdtEngine.GetText(nStart, nCount); | 301 return m_EdtEngine.GetText(0, -1); |
302 } | 302 } |
303 | 303 |
304 void CFWL_Edit::ClearText() { | 304 void CFWL_Edit::ClearText() { |
305 m_EdtEngine.ClearText(); | 305 m_EdtEngine.ClearText(); |
306 } | 306 } |
307 | 307 |
308 void CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) { | 308 void CFWL_Edit::AddSelRange(int32_t nStart) { |
309 m_EdtEngine.AddSelRange(nStart, nCount); | 309 m_EdtEngine.AddSelRange(nStart, -1); |
310 } | 310 } |
311 | 311 |
312 int32_t CFWL_Edit::CountSelRanges() const { | 312 int32_t CFWL_Edit::CountSelRanges() const { |
313 return m_EdtEngine.CountSelRanges(); | 313 return m_EdtEngine.CountSelRanges(); |
314 } | 314 } |
315 | 315 |
316 int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) const { | 316 int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t* nStart) const { |
317 return m_EdtEngine.GetSelRange(nIndex, nStart); | 317 return m_EdtEngine.GetSelRange(nIndex, nStart); |
318 } | 318 } |
319 | 319 |
320 void CFWL_Edit::ClearSelections() { | 320 void CFWL_Edit::ClearSelections() { |
321 m_EdtEngine.ClearSelection(); | 321 m_EdtEngine.ClearSelection(); |
322 } | 322 } |
323 | 323 |
324 int32_t CFWL_Edit::GetLimit() const { | 324 int32_t CFWL_Edit::GetLimit() const { |
325 return m_nLimit; | 325 return m_nLimit; |
326 } | 326 } |
327 | 327 |
328 void CFWL_Edit::SetLimit(int32_t nLimit) { | 328 void CFWL_Edit::SetLimit(int32_t nLimit) { |
329 m_nLimit = nLimit; | 329 m_nLimit = nLimit; |
330 m_EdtEngine.SetLimit(nLimit); | 330 m_EdtEngine.SetLimit(nLimit); |
331 } | 331 } |
332 | 332 |
333 void CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) { | 333 void CFWL_Edit::SetAliasChar(FX_WCHAR wAlias) { |
334 m_EdtEngine.SetAliasChar(wAlias); | 334 m_EdtEngine.SetAliasChar(wAlias); |
335 } | 335 } |
336 | 336 |
337 bool CFWL_Edit::Copy(CFX_WideString& wsCopy) { | 337 bool CFWL_Edit::Copy(CFX_WideString& wsCopy) { |
338 int32_t nCount = m_EdtEngine.CountSelRanges(); | 338 int32_t nCount = m_EdtEngine.CountSelRanges(); |
339 if (nCount == 0) | 339 if (nCount == 0) |
340 return false; | 340 return false; |
341 | 341 |
342 wsCopy.clear(); | 342 wsCopy.clear(); |
343 CFX_WideString wsTemp; | 343 int32_t nStart; |
344 int32_t nStart, nLength; | 344 int32_t nLength; |
345 for (int32_t i = 0; i < nCount; i++) { | 345 for (int32_t i = 0; i < nCount; i++) { |
346 nLength = m_EdtEngine.GetSelRange(i, nStart); | 346 nLength = m_EdtEngine.GetSelRange(i, &nStart); |
347 wsTemp = m_EdtEngine.GetText(nStart, nLength); | 347 wsCopy += m_EdtEngine.GetText(nStart, nLength); |
348 wsCopy += wsTemp; | |
349 wsTemp.clear(); | |
350 } | 348 } |
351 return true; | 349 return true; |
352 } | 350 } |
353 | 351 |
354 bool CFWL_Edit::Cut(CFX_WideString& wsCut) { | 352 bool CFWL_Edit::Cut(CFX_WideString& wsCut) { |
355 int32_t nCount = m_EdtEngine.CountSelRanges(); | 353 int32_t nCount = m_EdtEngine.CountSelRanges(); |
356 if (nCount == 0) | 354 if (nCount == 0) |
357 return false; | 355 return false; |
358 | 356 |
359 wsCut.clear(); | 357 wsCut.clear(); |
360 CFX_WideString wsTemp; | 358 CFX_WideString wsTemp; |
361 int32_t nStart, nLength; | 359 int32_t nStart, nLength; |
362 for (int32_t i = 0; i < nCount; i++) { | 360 for (int32_t i = 0; i < nCount; i++) { |
363 nLength = m_EdtEngine.GetSelRange(i, nStart); | 361 nLength = m_EdtEngine.GetSelRange(i, &nStart); |
364 wsTemp = m_EdtEngine.GetText(nStart, nLength); | 362 wsTemp = m_EdtEngine.GetText(nStart, nLength); |
365 wsCut += wsTemp; | 363 wsCut += wsTemp; |
366 wsTemp.clear(); | 364 wsTemp.clear(); |
367 } | 365 } |
368 m_EdtEngine.Delete(0); | 366 m_EdtEngine.Delete(0); |
369 return true; | 367 return true; |
370 } | 368 } |
371 | 369 |
372 bool CFWL_Edit::Paste(const CFX_WideString& wsPaste) { | 370 bool CFWL_Edit::Paste(const CFX_WideString& wsPaste) { |
373 int32_t nCaret = m_EdtEngine.GetCaretPos(); | 371 int32_t nCaret = m_EdtEngine.GetCaretPos(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 } | 407 } |
410 | 408 |
411 bool CFWL_Edit::CanRedo() { | 409 bool CFWL_Edit::CanRedo() { |
412 return m_iCurRecord < pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; | 410 return m_iCurRecord < pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; |
413 } | 411 } |
414 | 412 |
415 void CFWL_Edit::SetOuter(CFWL_Widget* pOuter) { | 413 void CFWL_Edit::SetOuter(CFWL_Widget* pOuter) { |
416 m_pOuter = pOuter; | 414 m_pOuter = pOuter; |
417 } | 415 } |
418 | 416 |
419 void CFWL_Edit::On_CaretChanged(CFDE_TxtEdtEngine* pEdit, | 417 void CFWL_Edit::OnCaretChanged() { |
420 int32_t nPage, | |
421 bool bVisible) { | |
422 if (m_rtEngine.IsEmpty()) | 418 if (m_rtEngine.IsEmpty()) |
423 return; | 419 return; |
424 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) | 420 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) |
425 return; | 421 return; |
426 | 422 |
427 bool bRepaintContent = UpdateOffset(); | 423 bool bRepaintContent = UpdateOffset(); |
428 UpdateCaret(); | 424 UpdateCaret(); |
429 CFX_RectF rtInvalid; | 425 CFX_RectF rtInvalid; |
430 rtInvalid.Set(0, 0, 0, 0); | 426 rtInvalid.Set(0, 0, 0, 0); |
431 bool bRepaintScroll = false; | 427 bool bRepaintScroll = false; |
432 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { | 428 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine) { |
433 CFWL_ScrollBar* pScroll = UpdateScroll(); | 429 CFWL_ScrollBar* pScroll = UpdateScroll(); |
434 if (pScroll) { | 430 if (pScroll) { |
435 pScroll->GetWidgetRect(rtInvalid, false); | 431 pScroll->GetWidgetRect(rtInvalid, false); |
436 bRepaintScroll = true; | 432 bRepaintScroll = true; |
437 } | 433 } |
438 } | 434 } |
439 if (bRepaintContent || bRepaintScroll) { | 435 if (bRepaintContent || bRepaintScroll) { |
440 if (bRepaintContent) | 436 if (bRepaintContent) |
441 rtInvalid.Union(m_rtEngine); | 437 rtInvalid.Union(m_rtEngine); |
442 Repaint(&rtInvalid); | 438 Repaint(&rtInvalid); |
443 } | 439 } |
444 } | 440 } |
445 | 441 |
446 void CFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, | 442 void CFWL_Edit::OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { |
447 FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { | |
448 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask) | 443 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask) |
449 UpdateVAlignment(); | 444 UpdateVAlignment(); |
450 | 445 |
451 CFX_RectF rtTemp; | 446 CFX_RectF rtTemp; |
452 GetClientRect(rtTemp); | 447 GetClientRect(rtTemp); |
453 | 448 |
454 CFWL_EvtTextChanged event(this); | 449 CFWL_EvtTextChanged event(this); |
455 event.wsPrevText = ChangeInfo.wsPrevText; | 450 event.wsPrevText = ChangeInfo.wsPrevText; |
456 DispatchEvent(&event); | 451 DispatchEvent(&event); |
457 | 452 |
458 LayoutScrollBar(); | 453 LayoutScrollBar(); |
459 Repaint(&rtTemp); | 454 Repaint(&rtTemp); |
460 } | 455 } |
461 | 456 |
462 void CFWL_Edit::On_SelChanged(CFDE_TxtEdtEngine* pEdit) { | 457 void CFWL_Edit::OnSelChanged() { |
463 CFX_RectF rtTemp; | 458 CFX_RectF rtTemp; |
464 GetClientRect(rtTemp); | 459 GetClientRect(rtTemp); |
465 Repaint(&rtTemp); | 460 Repaint(&rtTemp); |
466 } | 461 } |
467 | 462 |
468 bool CFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit, | 463 bool CFWL_Edit::OnPageLoad(int32_t nPageIndex) { |
469 int32_t nPageIndex, | |
470 int32_t nPurpose) { | |
471 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); | 464 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); |
472 if (!pPage) | 465 if (!pPage) |
473 return false; | 466 return false; |
474 | 467 |
475 pPage->LoadPage(nullptr, nullptr); | 468 pPage->LoadPage(nullptr, nullptr); |
476 return true; | 469 return true; |
477 } | 470 } |
478 | 471 |
479 bool CFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit, | 472 bool CFWL_Edit::OnPageUnload(int32_t nPageIndex) { |
480 int32_t nPageIndex, | |
481 int32_t nPurpose) { | |
482 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); | 473 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); |
483 if (!pPage) | 474 if (!pPage) |
484 return false; | 475 return false; |
485 | 476 |
486 pPage->UnloadPage(nullptr); | 477 pPage->UnloadPage(nullptr); |
487 return true; | 478 return true; |
488 } | 479 } |
489 | 480 |
490 void CFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, | 481 void CFWL_Edit::OnAddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord) { |
491 IFDE_TxtEdtDoRecord* pRecord) { | 482 AddDoRecord(std::move(pRecord)); |
492 AddDoRecord(pRecord); | |
493 } | 483 } |
494 | 484 |
495 bool CFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) { | 485 bool CFWL_Edit::OnValidate(const CFX_WideString& wsText) { |
496 CFWL_Widget* pDst = GetOuter(); | 486 CFWL_Widget* pDst = GetOuter(); |
497 if (!pDst) | 487 if (!pDst) |
498 pDst = this; | 488 pDst = this; |
499 | 489 |
500 CFWL_EvtValidate event(this); | 490 CFWL_EvtValidate event(this); |
501 event.wsInsert = wsText; | 491 event.wsInsert = wsText; |
502 event.bValidate = true; | 492 event.bValidate = true; |
503 DispatchEvent(&event); | 493 DispatchEvent(&event); |
504 return event.bValidate; | 494 return event.bValidate; |
505 } | 495 } |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 int32_t nSelCount = m_EdtEngine.CountSelRanges(); | 566 int32_t nSelCount = m_EdtEngine.CountSelRanges(); |
577 if (bShowSel && nSelCount > 0) { | 567 if (bShowSel && nSelCount > 0) { |
578 int32_t nPageCharStart = pPage->GetCharStart(); | 568 int32_t nPageCharStart = pPage->GetCharStart(); |
579 int32_t nPageCharCount = pPage->GetCharCount(); | 569 int32_t nPageCharCount = pPage->GetCharCount(); |
580 int32_t nPageCharEnd = nPageCharStart + nPageCharCount - 1; | 570 int32_t nPageCharEnd = nPageCharStart + nPageCharCount - 1; |
581 int32_t nCharCount; | 571 int32_t nCharCount; |
582 int32_t nCharStart; | 572 int32_t nCharStart; |
583 CFX_RectFArray rectArr; | 573 CFX_RectFArray rectArr; |
584 int32_t i = 0; | 574 int32_t i = 0; |
585 for (i = 0; i < nSelCount; i++) { | 575 for (i = 0; i < nSelCount; i++) { |
586 nCharCount = m_EdtEngine.GetSelRange(i, nCharStart); | 576 nCharCount = m_EdtEngine.GetSelRange(i, &nCharStart); |
587 int32_t nCharEnd = nCharStart + nCharCount - 1; | 577 int32_t nCharEnd = nCharStart + nCharCount - 1; |
588 if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) | 578 if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) |
589 continue; | 579 continue; |
590 | 580 |
591 int32_t nBgn = std::max(nCharStart, nPageCharStart); | 581 int32_t nBgn = std::max(nCharStart, nPageCharStart); |
592 int32_t nEnd = std::min(nCharEnd, nPageCharEnd); | 582 int32_t nEnd = std::min(nCharEnd, nPageCharEnd); |
593 pPage->CalcRangeRectArray(nBgn - nPageCharStart, nEnd - nBgn + 1, | 583 pPage->CalcRangeRectArray(nBgn - nPageCharStart, nEnd - nBgn + 1, |
594 rectArr); | 584 rectArr); |
595 } | 585 } |
596 | 586 |
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
984 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); | 974 (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine); |
985 } | 975 } |
986 | 976 |
987 bool CFWL_Edit::IsContentHeightOverflow() { | 977 bool CFWL_Edit::IsContentHeightOverflow() { |
988 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); | 978 IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(0); |
989 if (!pPage) | 979 if (!pPage) |
990 return false; | 980 return false; |
991 return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; | 981 return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; |
992 } | 982 } |
993 | 983 |
994 int32_t CFWL_Edit::AddDoRecord(IFDE_TxtEdtDoRecord* pRecord) { | 984 int32_t CFWL_Edit::AddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord) { |
995 int32_t nCount = pdfium::CollectionSize<int32_t>(m_DoRecords); | 985 int32_t nCount = pdfium::CollectionSize<int32_t>(m_DoRecords); |
996 if (m_iCurRecord == nCount - 1) { | 986 if (m_iCurRecord == nCount - 1) { |
997 if (nCount == m_iMaxRecord) { | 987 if (nCount == m_iMaxRecord) { |
998 m_DoRecords.pop_front(); | 988 m_DoRecords.pop_front(); |
999 m_iCurRecord--; | 989 m_iCurRecord--; |
1000 } | 990 } |
1001 } else { | 991 } else { |
1002 m_DoRecords.erase(m_DoRecords.begin() + m_iCurRecord + 1, | 992 m_DoRecords.erase(m_DoRecords.begin() + m_iCurRecord + 1, |
1003 m_DoRecords.end()); | 993 m_DoRecords.end()); |
1004 } | 994 } |
1005 | 995 |
1006 m_DoRecords.push_back(std::unique_ptr<IFDE_TxtEdtDoRecord>(pRecord)); | 996 m_DoRecords.push_back(std::move(pRecord)); |
1007 m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; | 997 m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; |
1008 return m_iCurRecord; | 998 return m_iCurRecord; |
1009 } | 999 } |
1010 | 1000 |
1011 void CFWL_Edit::Layout() { | 1001 void CFWL_Edit::Layout() { |
1012 GetClientRect(m_rtClient); | 1002 GetClientRect(m_rtClient); |
1013 m_rtEngine = m_rtClient; | 1003 m_rtEngine = m_rtClient; |
1014 FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( | 1004 FX_FLOAT* pfWidth = static_cast<FX_FLOAT*>( |
1015 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 1005 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); |
1016 if (!pfWidth) | 1006 if (!pfWidth) |
(...skipping 15 matching lines...) Expand all Loading... |
1032 &part, CFWL_WidgetCapacity::UIMargin)); | 1022 &part, CFWL_WidgetCapacity::UIMargin)); |
1033 if (pUIMargin) { | 1023 if (pUIMargin) { |
1034 m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, | 1024 m_rtEngine.Deflate(pUIMargin->left, pUIMargin->top, pUIMargin->width, |
1035 pUIMargin->height); | 1025 pUIMargin->height); |
1036 } | 1026 } |
1037 } | 1027 } |
1038 | 1028 |
1039 bool bShowVertScrollbar = IsShowScrollBar(true); | 1029 bool bShowVertScrollbar = IsShowScrollBar(true); |
1040 bool bShowHorzScrollbar = IsShowScrollBar(false); | 1030 bool bShowHorzScrollbar = IsShowScrollBar(false); |
1041 if (bShowVertScrollbar) { | 1031 if (bShowVertScrollbar) { |
1042 InitScrollBar(); | 1032 InitVerticalScrollBar(); |
1043 | 1033 |
1044 CFX_RectF rtVertScr; | 1034 CFX_RectF rtVertScr; |
1045 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1035 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { |
1046 rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, | 1036 rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, |
1047 m_rtClient.height); | 1037 m_rtClient.height); |
1048 } else { | 1038 } else { |
1049 rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, | 1039 rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, |
1050 m_rtClient.height); | 1040 m_rtClient.height); |
1051 if (bShowHorzScrollbar) | 1041 if (bShowHorzScrollbar) |
1052 rtVertScr.height -= fWidth; | 1042 rtVertScr.height -= fWidth; |
1053 m_rtEngine.width -= fWidth; | 1043 m_rtEngine.width -= fWidth; |
1054 } | 1044 } |
1055 | 1045 |
1056 m_pVertScrollBar->SetWidgetRect(rtVertScr); | 1046 m_pVertScrollBar->SetWidgetRect(rtVertScr); |
1057 m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible); | 1047 m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible); |
1058 m_pVertScrollBar->Update(); | 1048 m_pVertScrollBar->Update(); |
1059 } else if (m_pVertScrollBar) { | 1049 } else if (m_pVertScrollBar) { |
1060 m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible); | 1050 m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible); |
1061 } | 1051 } |
1062 | 1052 |
1063 if (bShowHorzScrollbar) { | 1053 if (bShowHorzScrollbar) { |
1064 InitScrollBar(false); | 1054 InitHorizontalScrollBar(); |
1065 | 1055 |
1066 CFX_RectF rtHoriScr; | 1056 CFX_RectF rtHoriScr; |
1067 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1057 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { |
1068 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, | 1058 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, |
1069 m_rtClient.width, fWidth); | 1059 m_rtClient.width, fWidth); |
1070 } else { | 1060 } else { |
1071 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, | 1061 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, |
1072 m_rtClient.width, fWidth); | 1062 m_rtClient.width, fWidth); |
1073 if (bShowVertScrollbar) | 1063 if (bShowVertScrollbar) |
1074 rtHoriScr.width -= fWidth; | 1064 rtHoriScr.width -= fWidth; |
(...skipping 14 matching lines...) Expand all Loading... |
1089 } | 1079 } |
1090 | 1080 |
1091 FX_FLOAT* pfWidth = nullptr; | 1081 FX_FLOAT* pfWidth = nullptr; |
1092 bool bShowVertScrollbar = IsShowScrollBar(true); | 1082 bool bShowVertScrollbar = IsShowScrollBar(true); |
1093 bool bShowHorzScrollbar = IsShowScrollBar(false); | 1083 bool bShowHorzScrollbar = IsShowScrollBar(false); |
1094 if (bShowVertScrollbar) { | 1084 if (bShowVertScrollbar) { |
1095 if (!m_pVertScrollBar) { | 1085 if (!m_pVertScrollBar) { |
1096 pfWidth = static_cast<FX_FLOAT*>( | 1086 pfWidth = static_cast<FX_FLOAT*>( |
1097 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 1087 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); |
1098 FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; | 1088 FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; |
1099 InitScrollBar(); | 1089 InitVerticalScrollBar(); |
1100 CFX_RectF rtVertScr; | 1090 CFX_RectF rtVertScr; |
1101 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1091 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { |
1102 rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, | 1092 rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, |
1103 m_rtClient.height); | 1093 m_rtClient.height); |
1104 } else { | 1094 } else { |
1105 rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, | 1095 rtVertScr.Set(m_rtClient.right() - fWidth, m_rtClient.top, fWidth, |
1106 m_rtClient.height); | 1096 m_rtClient.height); |
1107 if (bShowHorzScrollbar) | 1097 if (bShowHorzScrollbar) |
1108 rtVertScr.height -= fWidth; | 1098 rtVertScr.height -= fWidth; |
1109 } | 1099 } |
1110 m_pVertScrollBar->SetWidgetRect(rtVertScr); | 1100 m_pVertScrollBar->SetWidgetRect(rtVertScr); |
1111 m_pVertScrollBar->Update(); | 1101 m_pVertScrollBar->Update(); |
1112 } | 1102 } |
1113 m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible); | 1103 m_pVertScrollBar->RemoveStates(FWL_WGTSTATE_Invisible); |
1114 } else if (m_pVertScrollBar) { | 1104 } else if (m_pVertScrollBar) { |
1115 m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible); | 1105 m_pVertScrollBar->SetStates(FWL_WGTSTATE_Invisible); |
1116 } | 1106 } |
1117 | 1107 |
1118 if (bShowHorzScrollbar) { | 1108 if (bShowHorzScrollbar) { |
1119 if (!m_pHorzScrollBar) { | 1109 if (!m_pHorzScrollBar) { |
1120 if (!pfWidth) { | 1110 if (!pfWidth) { |
1121 pfWidth = static_cast<FX_FLOAT*>( | 1111 pfWidth = static_cast<FX_FLOAT*>( |
1122 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 1112 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); |
1123 } | 1113 } |
1124 | 1114 |
1125 FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; | 1115 FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; |
1126 InitScrollBar(false); | 1116 InitHorizontalScrollBar(); |
1127 CFX_RectF rtHoriScr; | 1117 CFX_RectF rtHoriScr; |
1128 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { | 1118 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { |
1129 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, | 1119 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, |
1130 m_rtClient.width, fWidth); | 1120 m_rtClient.width, fWidth); |
1131 } else { | 1121 } else { |
1132 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, | 1122 rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() - fWidth, |
1133 m_rtClient.width, fWidth); | 1123 m_rtClient.width, fWidth); |
1134 if (bShowVertScrollbar) | 1124 if (bShowVertScrollbar) |
1135 rtHoriScr.width -= (fWidth); | 1125 rtHoriScr.width -= (fWidth); |
1136 } | 1126 } |
1137 m_pHorzScrollBar->SetWidgetRect(rtHoriScr); | 1127 m_pHorzScrollBar->SetWidgetRect(rtHoriScr); |
1138 m_pHorzScrollBar->Update(); | 1128 m_pHorzScrollBar->Update(); |
1139 } | 1129 } |
1140 m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible); | 1130 m_pHorzScrollBar->RemoveStates(FWL_WGTSTATE_Invisible); |
1141 } else if (m_pHorzScrollBar) { | 1131 } else if (m_pHorzScrollBar) { |
1142 m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible); | 1132 m_pHorzScrollBar->SetStates(FWL_WGTSTATE_Invisible); |
1143 } | 1133 } |
1144 if (bShowVertScrollbar || bShowHorzScrollbar) | 1134 if (bShowVertScrollbar || bShowHorzScrollbar) |
1145 UpdateScroll(); | 1135 UpdateScroll(); |
1146 } | 1136 } |
1147 | 1137 |
1148 void CFWL_Edit::DeviceToEngine(CFX_PointF& pt) { | 1138 void CFWL_Edit::DeviceToEngine(CFX_PointF& pt) { |
1149 pt.x += m_fScrollOffsetX - m_rtEngine.left; | 1139 pt.x += m_fScrollOffsetX - m_rtEngine.left; |
1150 pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset; | 1140 pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset; |
1151 } | 1141 } |
1152 | 1142 |
1153 void CFWL_Edit::InitScrollBar(bool bVert) { | 1143 void CFWL_Edit::InitVerticalScrollBar() { |
1154 if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) | 1144 if (m_pVertScrollBar) |
1155 return; | 1145 return; |
1156 | 1146 |
1157 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); | 1147 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); |
1158 prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; | 1148 prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Vert; |
1159 prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; | 1149 prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; |
1160 prop->m_pParent = this; | 1150 prop->m_pParent = this; |
1161 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; | 1151 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; |
| 1152 m_pVertScrollBar = |
| 1153 pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); |
| 1154 } |
1162 | 1155 |
1163 CFWL_ScrollBar* sb = new CFWL_ScrollBar(m_pOwnerApp, std::move(prop), this); | 1156 void CFWL_Edit::InitHorizontalScrollBar() { |
1164 if (bVert) | 1157 if (m_pHorzScrollBar) |
1165 m_pVertScrollBar.reset(sb); | 1158 return; |
1166 else | 1159 |
1167 m_pHorzScrollBar.reset(sb); | 1160 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); |
| 1161 prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Horz; |
| 1162 prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; |
| 1163 prop->m_pParent = this; |
| 1164 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; |
| 1165 m_pHorzScrollBar = |
| 1166 pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); |
1168 } | 1167 } |
1169 | 1168 |
1170 void CFWL_Edit::ShowCaret(CFX_RectF* pRect) { | 1169 void CFWL_Edit::ShowCaret(CFX_RectF* pRect) { |
1171 if (m_pCaret) { | 1170 if (m_pCaret) { |
1172 m_pCaret->ShowCaret(); | 1171 m_pCaret->ShowCaret(); |
1173 if (!pRect->IsEmpty()) | 1172 if (!pRect->IsEmpty()) |
1174 m_pCaret->SetWidgetRect(*pRect); | 1173 m_pCaret->SetWidgetRect(*pRect); |
1175 Repaint(&m_rtEngine); | 1174 Repaint(&m_rtEngine); |
1176 return; | 1175 return; |
1177 } | 1176 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1225 if (!pDocEnvironment) | 1224 if (!pDocEnvironment) |
1226 return; | 1225 return; |
1227 | 1226 |
1228 pDocEnvironment->DisplayCaret(pXFAWidget, false, pRect); | 1227 pDocEnvironment->DisplayCaret(pXFAWidget, false, pRect); |
1229 } | 1228 } |
1230 | 1229 |
1231 bool CFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) { | 1230 bool CFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) { |
1232 if (!m_bSetRange) | 1231 if (!m_bSetRange) |
1233 return true; | 1232 return true; |
1234 | 1233 |
1235 CFX_WideString wsText = m_EdtEngine.GetText(0); | 1234 CFX_WideString wsText = m_EdtEngine.GetText(0, -1); |
1236 if (wsText.IsEmpty()) { | 1235 if (wsText.IsEmpty()) { |
1237 if (cNum == L'0') | 1236 if (cNum == L'0') |
1238 return false; | 1237 return false; |
1239 return true; | 1238 return true; |
1240 } | 1239 } |
1241 | 1240 |
1242 int32_t caretPos = m_EdtEngine.GetCaretPos(); | 1241 int32_t caretPos = m_EdtEngine.GetCaretPos(); |
1243 if (CountSelRanges() == 0) { | 1242 if (CountSelRanges() == 0) { |
1244 if (cNum == L'0' && caretPos == 0) | 1243 if (cNum == L'0' && caretPos == 0) |
1245 return false; | 1244 return false; |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1647 UpdateOffset(pScrollBar, fPos - iCurPos); | 1646 UpdateOffset(pScrollBar, fPos - iCurPos); |
1648 UpdateCaret(); | 1647 UpdateCaret(); |
1649 | 1648 |
1650 CFX_RectF rect; | 1649 CFX_RectF rect; |
1651 GetWidgetRect(rect, false); | 1650 GetWidgetRect(rect, false); |
1652 CFX_RectF rtInvalidate; | 1651 CFX_RectF rtInvalidate; |
1653 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); | 1652 rtInvalidate.Set(0, 0, rect.width + 2, rect.height + 2); |
1654 Repaint(&rtInvalidate); | 1653 Repaint(&rtInvalidate); |
1655 return true; | 1654 return true; |
1656 } | 1655 } |
OLD | NEW |