Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(436)

Side by Side Diff: xfa/fwl/core/ifwl_scrollbar.cpp

Issue 2467993003: Merge delegates into IFWL_* classes. (Closed)
Patch Set: Add const version Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fwl/core/ifwl_scrollbar.h ('k') | xfa/fwl/core/ifwl_spinbutton.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/ifwl_scrollbar.h" 7 #include "xfa/fwl/core/ifwl_scrollbar.h"
8 8
9 #include "third_party/base/ptr_util.h" 9 #include "third_party/base/ptr_util.h"
10 #include "xfa/fwl/core/cfwl_message.h" 10 #include "xfa/fwl/core/cfwl_message.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 m_bMinSize(FALSE), 45 m_bMinSize(FALSE),
46 m_bCustomLayout(false), 46 m_bCustomLayout(false),
47 m_fMinThumb(FWL_SCROLLBAR_MinThumb), 47 m_fMinThumb(FWL_SCROLLBAR_MinThumb),
48 m_Timer(this) { 48 m_Timer(this) {
49 m_rtClient.Reset(); 49 m_rtClient.Reset();
50 m_rtThumb.Reset(); 50 m_rtThumb.Reset();
51 m_rtMinBtn.Reset(); 51 m_rtMinBtn.Reset();
52 m_rtMaxBtn.Reset(); 52 m_rtMaxBtn.Reset();
53 m_rtMinTrack.Reset(); 53 m_rtMinTrack.Reset();
54 m_rtMaxTrack.Reset(); 54 m_rtMaxTrack.Reset();
55
56 SetDelegate(pdfium::MakeUnique<CFWL_ScrollBarImpDelegate>(this));
57 } 55 }
58 56
59 IFWL_ScrollBar::~IFWL_ScrollBar() {} 57 IFWL_ScrollBar::~IFWL_ScrollBar() {}
60 58
61 FWL_Type IFWL_ScrollBar::GetClassID() const { 59 FWL_Type IFWL_ScrollBar::GetClassID() const {
62 return FWL_Type::ScrollBar; 60 return FWL_Type::ScrollBar;
63 } 61 }
64 62
65 FWL_Error IFWL_ScrollBar::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { 63 FWL_Error IFWL_ScrollBar::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) {
66 if (bAutoSize) { 64 if (bAutoSize) {
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 FX_BOOL bRet = TRUE; 560 FX_BOOL bRet = TRUE;
563 CFWL_EvtScroll ev; 561 CFWL_EvtScroll ev;
564 ev.m_iScrollCode = dwCode; 562 ev.m_iScrollCode = dwCode;
565 ev.m_pSrcTarget = this; 563 ev.m_pSrcTarget = this;
566 ev.m_fPos = fPos; 564 ev.m_fPos = fPos;
567 ev.m_pRet = &bRet; 565 ev.m_pRet = &bRet;
568 DispatchEvent(&ev); 566 DispatchEvent(&ev);
569 return bRet; 567 return bRet;
570 } 568 }
571 569
572 CFWL_ScrollBarImpDelegate::CFWL_ScrollBarImpDelegate(IFWL_ScrollBar* pOwner) 570 void IFWL_ScrollBar::OnProcessMessage(CFWL_Message* pMessage) {
573 : m_pOwner(pOwner) {}
574
575 void CFWL_ScrollBarImpDelegate::OnProcessMessage(CFWL_Message* pMessage) {
576 if (!pMessage) 571 if (!pMessage)
577 return; 572 return;
578 573
579 CFWL_MessageType dwMsgCode = pMessage->GetClassID(); 574 CFWL_MessageType dwMsgCode = pMessage->GetClassID();
580 if (dwMsgCode == CFWL_MessageType::Mouse) { 575 if (dwMsgCode == CFWL_MessageType::Mouse) {
581 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); 576 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage);
582 switch (pMsg->m_dwCmd) { 577 switch (pMsg->m_dwCmd) {
583 case FWL_MouseCommand::LeftButtonDown: { 578 case FWL_MouseCommand::LeftButtonDown:
584 OnLButtonDown(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); 579 OnLButtonDown(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy);
585 break; 580 break;
586 } 581 case FWL_MouseCommand::LeftButtonUp:
587 case FWL_MouseCommand::LeftButtonUp: {
588 OnLButtonUp(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); 582 OnLButtonUp(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy);
589 break; 583 break;
590 } 584 case FWL_MouseCommand::Move:
591 case FWL_MouseCommand::Move: {
592 OnMouseMove(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); 585 OnMouseMove(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy);
593 break; 586 break;
594 } 587 case FWL_MouseCommand::Leave:
595 case FWL_MouseCommand::Leave: {
596 OnMouseLeave(); 588 OnMouseLeave();
597 break; 589 break;
598 } 590 default:
599 default: { break; } 591 break;
600 } 592 }
601 } else if (dwMsgCode == CFWL_MessageType::MouseWheel) { 593 } else if (dwMsgCode == CFWL_MessageType::MouseWheel) {
602 CFWL_MsgMouseWheel* pMsg = static_cast<CFWL_MsgMouseWheel*>(pMessage); 594 CFWL_MsgMouseWheel* pMsg = static_cast<CFWL_MsgMouseWheel*>(pMessage);
603 OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX, 595 OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX,
604 pMsg->m_fDeltaY); 596 pMsg->m_fDeltaY);
605 } 597 }
606 } 598 }
607 599
608 void CFWL_ScrollBarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, 600 void IFWL_ScrollBar::OnDrawWidget(CFX_Graphics* pGraphics,
609 const CFX_Matrix* pMatrix) { 601 const CFX_Matrix* pMatrix) {
610 m_pOwner->DrawWidget(pGraphics, pMatrix); 602 DrawWidget(pGraphics, pMatrix);
611 } 603 }
612 604
613 void CFWL_ScrollBarImpDelegate::OnLButtonDown(uint32_t dwFlags, 605 void IFWL_ScrollBar::OnLButtonDown(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
614 FX_FLOAT fx, 606 if (!IsEnabled())
615 FX_FLOAT fy) {
616 if (!m_pOwner->IsEnabled()) {
617 return; 607 return;
618 } 608
619 m_pOwner->m_bMouseDown = TRUE; 609 m_bMouseDown = TRUE;
620 m_pOwner->SetGrab(TRUE); 610 SetGrab(TRUE);
621 m_pOwner->m_cpTrackPointX = fx; 611 m_cpTrackPointX = fx;
622 m_pOwner->m_cpTrackPointY = fy; 612 m_cpTrackPointY = fy;
623 m_pOwner->m_fLastTrackPos = m_pOwner->m_fTrackPos; 613 m_fLastTrackPos = m_fTrackPos;
624 if (m_pOwner->m_rtMinBtn.Contains(fx, fy)) { 614 if (m_rtMinBtn.Contains(fx, fy))
625 DoMouseDown(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); 615 DoMouseDown(0, m_rtMinBtn, m_iMinButtonState, fx, fy);
626 } else { 616 else if (m_rtThumb.Contains(fx, fy))
627 if (m_pOwner->m_rtThumb.Contains(fx, fy)) { 617 DoMouseDown(1, m_rtThumb, m_iThumbButtonState, fx, fy);
628 DoMouseDown(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, 618 else if (m_rtMaxBtn.Contains(fx, fy))
629 fy); 619 DoMouseDown(2, m_rtMaxBtn, m_iMaxButtonState, fx, fy);
630 } else { 620 else if (m_rtMinTrack.Contains(fx, fy))
631 if (m_pOwner->m_rtMaxBtn.Contains(fx, fy)) { 621 DoMouseDown(3, m_rtMinTrack, m_iMinTrackState, fx, fy);
632 DoMouseDown(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, 622 else
633 fy); 623 DoMouseDown(4, m_rtMaxTrack, m_iMaxTrackState, fx, fy);
634 } else { 624
635 if (m_pOwner->m_rtMinTrack.Contains(fx, fy)) { 625 if (!SendEvent())
636 DoMouseDown(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, 626 m_pTimerInfo = m_Timer.StartTimer(FWL_SCROLLBAR_Elapse, true);
637 fy);
638 } else {
639 DoMouseDown(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx,
640 fy);
641 }
642 }
643 }
644 }
645 if (!m_pOwner->SendEvent())
646 m_pOwner->m_pTimerInfo =
647 m_pOwner->m_Timer.StartTimer(FWL_SCROLLBAR_Elapse, true);
648 } 627 }
649 628
650 void CFWL_ScrollBarImpDelegate::OnLButtonUp(uint32_t dwFlags, 629 void IFWL_ScrollBar::OnLButtonUp(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
651 FX_FLOAT fx, 630 m_pTimerInfo->StopTimer();
652 FX_FLOAT fy) { 631 m_bMouseDown = FALSE;
653 m_pOwner->m_pTimerInfo->StopTimer(); 632 DoMouseUp(0, m_rtMinBtn, m_iMinButtonState, fx, fy);
654 m_pOwner->m_bMouseDown = FALSE; 633 DoMouseUp(1, m_rtThumb, m_iThumbButtonState, fx, fy);
655 DoMouseUp(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); 634 DoMouseUp(2, m_rtMaxBtn, m_iMaxButtonState, fx, fy);
656 DoMouseUp(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, fy); 635 DoMouseUp(3, m_rtMinTrack, m_iMinTrackState, fx, fy);
657 DoMouseUp(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, fy); 636 DoMouseUp(4, m_rtMaxTrack, m_iMaxTrackState, fx, fy);
658 DoMouseUp(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, fy); 637 SetGrab(FALSE);
659 DoMouseUp(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, fy);
660 m_pOwner->SetGrab(FALSE);
661 } 638 }
662 639
663 void CFWL_ScrollBarImpDelegate::OnMouseMove(uint32_t dwFlags, 640 void IFWL_ScrollBar::OnMouseMove(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) {
664 FX_FLOAT fx, 641 DoMouseMove(0, m_rtMinBtn, m_iMinButtonState, fx, fy);
665 FX_FLOAT fy) { 642 DoMouseMove(1, m_rtThumb, m_iThumbButtonState, fx, fy);
666 DoMouseMove(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState, fx, fy); 643 DoMouseMove(2, m_rtMaxBtn, m_iMaxButtonState, fx, fy);
667 DoMouseMove(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState, fx, fy); 644 DoMouseMove(3, m_rtMinTrack, m_iMinTrackState, fx, fy);
668 DoMouseMove(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState, fx, fy); 645 DoMouseMove(4, m_rtMaxTrack, m_iMaxTrackState, fx, fy);
669 DoMouseMove(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState, fx, fy);
670 DoMouseMove(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState, fx, fy);
671 } 646 }
672 647
673 void CFWL_ScrollBarImpDelegate::OnMouseLeave() { 648 void IFWL_ScrollBar::OnMouseLeave() {
674 DoMouseLeave(0, m_pOwner->m_rtMinBtn, m_pOwner->m_iMinButtonState); 649 DoMouseLeave(0, m_rtMinBtn, m_iMinButtonState);
675 DoMouseLeave(1, m_pOwner->m_rtThumb, m_pOwner->m_iThumbButtonState); 650 DoMouseLeave(1, m_rtThumb, m_iThumbButtonState);
676 DoMouseLeave(2, m_pOwner->m_rtMaxBtn, m_pOwner->m_iMaxButtonState); 651 DoMouseLeave(2, m_rtMaxBtn, m_iMaxButtonState);
677 DoMouseLeave(3, m_pOwner->m_rtMinTrack, m_pOwner->m_iMinTrackState); 652 DoMouseLeave(3, m_rtMinTrack, m_iMinTrackState);
678 DoMouseLeave(4, m_pOwner->m_rtMaxTrack, m_pOwner->m_iMaxTrackState); 653 DoMouseLeave(4, m_rtMaxTrack, m_iMaxTrackState);
679 } 654 }
680 655
681 void CFWL_ScrollBarImpDelegate::OnMouseWheel(FX_FLOAT fx, 656 void IFWL_ScrollBar::OnMouseWheel(FX_FLOAT fx,
682 FX_FLOAT fy, 657 FX_FLOAT fy,
683 uint32_t dwFlags, 658 uint32_t dwFlags,
684 FX_FLOAT fDeltaX, 659 FX_FLOAT fDeltaX,
685 FX_FLOAT fDeltaY) { 660 FX_FLOAT fDeltaY) {
686 m_pOwner->m_iMouseWheel = (int32_t)fDeltaX; 661 m_iMouseWheel = (int32_t)fDeltaX;
687 m_pOwner->SendEvent(); 662 SendEvent();
688 m_pOwner->m_iMouseWheel = 0; 663 m_iMouseWheel = 0;
689 } 664 }
690 665
691 void CFWL_ScrollBarImpDelegate::DoMouseDown(int32_t iItem, 666 void IFWL_ScrollBar::DoMouseDown(int32_t iItem,
692 const CFX_RectF& rtItem, 667 const CFX_RectF& rtItem,
693 int32_t& iState, 668 int32_t& iState,
694 FX_FLOAT fx, 669 FX_FLOAT fx,
695 FX_FLOAT fy) { 670 FX_FLOAT fy) {
696 if (!rtItem.Contains(fx, fy)) { 671 if (!rtItem.Contains(fx, fy))
697 return; 672 return;
698 } 673 if (iState == CFWL_PartState_Pressed)
699 if (iState == CFWL_PartState_Pressed) {
700 return; 674 return;
701 }
702 iState = CFWL_PartState_Pressed; 675 iState = CFWL_PartState_Pressed;
703 m_pOwner->Repaint(&rtItem); 676 Repaint(&rtItem);
704 } 677 }
705 678
706 void CFWL_ScrollBarImpDelegate::DoMouseUp(int32_t iItem, 679 void IFWL_ScrollBar::DoMouseUp(int32_t iItem,
707 const CFX_RectF& rtItem, 680 const CFX_RectF& rtItem,
708 int32_t& iState, 681 int32_t& iState,
709 FX_FLOAT fx, 682 FX_FLOAT fx,
710 FX_FLOAT fy) { 683 FX_FLOAT fy) {
711 int32_t iNewState = 684 int32_t iNewState =
712 rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered : CFWL_PartState_Normal; 685 rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered : CFWL_PartState_Normal;
713 if (iState == iNewState) { 686 if (iState == iNewState)
714 return; 687 return;
715 } 688
716 iState = iNewState; 689 iState = iNewState;
717 m_pOwner->Repaint(&rtItem); 690 Repaint(&rtItem);
718 m_pOwner->OnScroll(FWL_SCBCODE_EndScroll, m_pOwner->m_fTrackPos); 691 OnScroll(FWL_SCBCODE_EndScroll, m_fTrackPos);
719 } 692 }
720 693
721 void CFWL_ScrollBarImpDelegate::DoMouseMove(int32_t iItem, 694 void IFWL_ScrollBar::DoMouseMove(int32_t iItem,
722 const CFX_RectF& rtItem, 695 const CFX_RectF& rtItem,
723 int32_t& iState, 696 int32_t& iState,
724 FX_FLOAT fx, 697 FX_FLOAT fx,
725 FX_FLOAT fy) { 698 FX_FLOAT fy) {
726 if (!m_pOwner->m_bMouseDown) { 699 if (!m_bMouseDown) {
727 int32_t iNewState = rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered 700 int32_t iNewState = rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered
728 : CFWL_PartState_Normal; 701 : CFWL_PartState_Normal;
729 if (iState == iNewState) { 702 if (iState == iNewState)
730 return; 703 return;
731 } 704
732 iState = iNewState; 705 iState = iNewState;
733 m_pOwner->Repaint(&rtItem); 706 Repaint(&rtItem);
734 } else if ((2 == iItem) && 707 } else if ((2 == iItem) && (m_iThumbButtonState == CFWL_PartState_Pressed)) {
735 (m_pOwner->m_iThumbButtonState == CFWL_PartState_Pressed)) { 708 FX_FLOAT fPos = GetTrackPointPos(fx, fy);
736 FX_FLOAT fPos = m_pOwner->GetTrackPointPos(fx, fy); 709 m_fTrackPos = fPos;
737 m_pOwner->m_fTrackPos = fPos; 710 OnScroll(FWL_SCBCODE_TrackPos, fPos);
738 m_pOwner->OnScroll(FWL_SCBCODE_TrackPos, fPos);
739 } 711 }
740 } 712 }
741 713
742 void CFWL_ScrollBarImpDelegate::DoMouseLeave(int32_t iItem, 714 void IFWL_ScrollBar::DoMouseLeave(int32_t iItem,
743 const CFX_RectF& rtItem, 715 const CFX_RectF& rtItem,
744 int32_t& iState) { 716 int32_t& iState) {
745 if (iState == CFWL_PartState_Normal) { 717 if (iState == CFWL_PartState_Normal)
746 return; 718 return;
747 } 719
748 iState = CFWL_PartState_Normal; 720 iState = CFWL_PartState_Normal;
749 m_pOwner->Repaint(&rtItem); 721 Repaint(&rtItem);
750 } 722 }
751 723
752 void CFWL_ScrollBarImpDelegate::DoMouseHover(int32_t iItem, 724 void IFWL_ScrollBar::DoMouseHover(int32_t iItem,
753 const CFX_RectF& rtItem, 725 const CFX_RectF& rtItem,
754 int32_t& iState) { 726 int32_t& iState) {
755 if (iState == CFWL_PartState_Hovered) { 727 if (iState == CFWL_PartState_Hovered)
756 return; 728 return;
757 } 729
758 iState = CFWL_PartState_Hovered; 730 iState = CFWL_PartState_Hovered;
759 m_pOwner->Repaint(&rtItem); 731 Repaint(&rtItem);
760 } 732 }
761 733
762 IFWL_ScrollBar::Timer::Timer(IFWL_ScrollBar* pToolTip) : IFWL_Timer(pToolTip) {} 734 IFWL_ScrollBar::Timer::Timer(IFWL_ScrollBar* pToolTip) : IFWL_Timer(pToolTip) {}
763 735
764 void IFWL_ScrollBar::Timer::Run(IFWL_TimerInfo* pTimerInfo) { 736 void IFWL_ScrollBar::Timer::Run(IFWL_TimerInfo* pTimerInfo) {
765 IFWL_ScrollBar* pButton = static_cast<IFWL_ScrollBar*>(m_pWidget); 737 IFWL_ScrollBar* pButton = static_cast<IFWL_ScrollBar*>(m_pWidget);
766 738
767 if (pButton->m_pTimerInfo) 739 if (pButton->m_pTimerInfo)
768 pButton->m_pTimerInfo->StopTimer(); 740 pButton->m_pTimerInfo->StopTimer();
769 741
770 if (!pButton->SendEvent()) 742 if (!pButton->SendEvent())
771 pButton->m_pTimerInfo = StartTimer(0, true); 743 pButton->m_pTimerInfo = StartTimer(0, true);
772 } 744 }
OLDNEW
« no previous file with comments | « xfa/fwl/core/ifwl_scrollbar.h ('k') | xfa/fwl/core/ifwl_spinbutton.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698