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

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

Issue 2436103002: Remove FWL globals. (Closed)
Patch Set: Review feedback 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_widget.h ('k') | xfa/fwl/core/ifwl_widgetdelegate.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_widget.h" 7 #include "xfa/fwl/core/ifwl_widget.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
11 #include "xfa/fde/tto/fde_textout.h" 11 #include "xfa/fde/tto/fde_textout.h"
12 #include "xfa/fwl/core/cfwl_message.h" 12 #include "xfa/fwl/core/cfwl_message.h"
13 #include "xfa/fwl/core/cfwl_themebackground.h" 13 #include "xfa/fwl/core/cfwl_themebackground.h"
14 #include "xfa/fwl/core/cfwl_themepart.h" 14 #include "xfa/fwl/core/cfwl_themepart.h"
15 #include "xfa/fwl/core/cfwl_themetext.h" 15 #include "xfa/fwl/core/cfwl_themetext.h"
16 #include "xfa/fwl/core/cfwl_widgetmgr.h" 16 #include "xfa/fwl/core/cfwl_widgetmgr.h"
17 #include "xfa/fwl/core/fwl_noteimp.h" 17 #include "xfa/fwl/core/fwl_noteimp.h"
18 #include "xfa/fwl/core/ifwl_app.h" 18 #include "xfa/fwl/core/ifwl_app.h"
19 #include "xfa/fwl/core/ifwl_combobox.h" 19 #include "xfa/fwl/core/ifwl_combobox.h"
20 #include "xfa/fwl/core/ifwl_form.h" 20 #include "xfa/fwl/core/ifwl_form.h"
21 #include "xfa/fwl/core/ifwl_themeprovider.h" 21 #include "xfa/fwl/core/ifwl_themeprovider.h"
22 #include "xfa/fwl/core/ifwl_widget.h" 22 #include "xfa/fwl/core/ifwl_widget.h"
23 #include "xfa/fxfa/xfa_ffapp.h" 23 #include "xfa/fxfa/xfa_ffapp.h"
24 24
25 #define FWL_STYLEEXT_MNU_Vert (1L << 0) 25 #define FWL_STYLEEXT_MNU_Vert (1L << 0)
26 26
27 IFWL_Widget::IFWL_Widget(const CFWL_WidgetImpProperties& properties, 27 IFWL_Widget::IFWL_Widget(const IFWL_App* app,
28 const CFWL_WidgetImpProperties& properties,
28 IFWL_Widget* pOuter) 29 IFWL_Widget* pOuter)
29 : m_pWidgetMgr(CFWL_WidgetMgr::GetInstance()), 30 : m_pOwnerApp(app),
31 m_pWidgetMgr(app->GetWidgetMgr()),
30 m_pProperties(new CFWL_WidgetImpProperties(properties)), 32 m_pProperties(new CFWL_WidgetImpProperties(properties)),
31 m_pDelegate(nullptr), 33 m_pDelegate(nullptr),
32 m_pCurDelegate(nullptr), 34 m_pCurDelegate(nullptr),
33 m_pOuter(pOuter), 35 m_pOuter(pOuter),
34 m_pLayoutItem(nullptr), 36 m_pLayoutItem(nullptr),
35 m_pAssociate(nullptr), 37 m_pAssociate(nullptr),
36 m_iLock(0), 38 m_iLock(0),
37 m_nEventKey(0) { 39 m_nEventKey(0) {
38 ASSERT(m_pWidgetMgr); 40 ASSERT(m_pWidgetMgr);
39 } 41 }
40 42
41 IFWL_Widget::~IFWL_Widget() {} 43 IFWL_Widget::~IFWL_Widget() {}
42 44
43 FWL_Error IFWL_Widget::Initialize() { 45 void IFWL_Widget::Initialize() {
44 IFWL_App* pApp = FWL_GetApp();
45 if (!pApp)
46 return FWL_Error::Indefinite;
47
48 CXFA_FFApp* pAdapter = pApp->GetAdapterNative();
49 if (!pAdapter)
50 return FWL_Error::Indefinite;
51
52 SetOwnerApp(FWL_GetApp());
53
54 IFWL_Widget* pParent = m_pProperties->m_pParent; 46 IFWL_Widget* pParent = m_pProperties->m_pParent;
55 m_pWidgetMgr->InsertWidget(pParent, this); 47 m_pWidgetMgr->InsertWidget(pParent, this);
56 if (!IsChild()) { 48 if (!IsChild()) {
57 IFWL_Widget* pOwner = m_pProperties->m_pOwner; 49 IFWL_Widget* pOwner = m_pProperties->m_pOwner;
58 if (pOwner) 50 if (pOwner)
59 m_pWidgetMgr->SetOwner(pOwner, this); 51 m_pWidgetMgr->SetOwner(pOwner, this);
60 } 52 }
61 return FWL_Error::Succeeded;
62 } 53 }
63 54
64 void IFWL_Widget::Finalize() { 55 void IFWL_Widget::Finalize() {
65 NotifyDriver(); 56 NotifyDriver();
66 m_pWidgetMgr->RemoveWidget(this); 57 m_pWidgetMgr->RemoveWidget(this);
67 } 58 }
68 59
69 FX_BOOL IFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { 60 FX_BOOL IFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const {
70 return FALSE; 61 return FALSE;
71 } 62 }
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 } 182 }
192 183
193 void IFWL_Widget::SetStates(uint32_t dwStates, FX_BOOL bSet) { 184 void IFWL_Widget::SetStates(uint32_t dwStates, FX_BOOL bSet) {
194 bSet ? (m_pProperties->m_dwStates |= dwStates) 185 bSet ? (m_pProperties->m_dwStates |= dwStates)
195 : (m_pProperties->m_dwStates &= ~dwStates); 186 : (m_pProperties->m_dwStates &= ~dwStates);
196 if (!(dwStates & FWL_WGTSTATE_Invisible) || !bSet) 187 if (!(dwStates & FWL_WGTSTATE_Invisible) || !bSet)
197 return; 188 return;
198 189
199 CFWL_NoteDriver* noteDriver = 190 CFWL_NoteDriver* noteDriver =
200 static_cast<CFWL_NoteDriver*>(GetOwnerApp()->GetNoteDriver()); 191 static_cast<CFWL_NoteDriver*>(GetOwnerApp()->GetNoteDriver());
201 CFWL_WidgetMgr* widgetMgr = CFWL_WidgetMgr::GetInstance(); 192 CFWL_WidgetMgr* widgetMgr = GetOwnerApp()->GetWidgetMgr();
202 noteDriver->NotifyTargetHide(this); 193 noteDriver->NotifyTargetHide(this);
203 IFWL_Widget* child = widgetMgr->GetFirstChildWidget(this); 194 IFWL_Widget* child = widgetMgr->GetFirstChildWidget(this);
204 while (child) { 195 while (child) {
205 noteDriver->NotifyTargetHide(child); 196 noteDriver->NotifyTargetHide(child);
206 NotifyHideChildWidget(widgetMgr, child, noteDriver); 197 NotifyHideChildWidget(widgetMgr, child, noteDriver);
207 child = widgetMgr->GetNextSiblingWidget(child); 198 child = widgetMgr->GetNextSiblingWidget(child);
208 } 199 }
209 return; 200 return;
210 } 201 }
211 202
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 m_pCurDelegate = m_pDelegate; 358 m_pCurDelegate = m_pDelegate;
368 } 359 }
369 if (!pDelegate) { 360 if (!pDelegate) {
370 return m_pCurDelegate; 361 return m_pCurDelegate;
371 } 362 }
372 IFWL_WidgetDelegate* pOldDelegate = m_pCurDelegate; 363 IFWL_WidgetDelegate* pOldDelegate = m_pCurDelegate;
373 m_pCurDelegate = pDelegate; 364 m_pCurDelegate = pDelegate;
374 return pOldDelegate; 365 return pOldDelegate;
375 } 366 }
376 367
377 IFWL_App* IFWL_Widget::GetOwnerApp() const { 368 const IFWL_App* IFWL_Widget::GetOwnerApp() const {
378 return m_pOwnerApp; 369 return m_pOwnerApp;
379 } 370 }
380 371
381 FWL_Error IFWL_Widget::SetOwnerApp(IFWL_App* pOwnerApp) {
382 m_pOwnerApp = pOwnerApp;
383 return FWL_Error::Succeeded;
384 }
385
386 uint32_t IFWL_Widget::GetEventKey() const { 372 uint32_t IFWL_Widget::GetEventKey() const {
387 return m_nEventKey; 373 return m_nEventKey;
388 } 374 }
389 375
390 void IFWL_Widget::SetEventKey(uint32_t key) { 376 void IFWL_Widget::SetEventKey(uint32_t key) {
391 m_nEventKey = key; 377 m_nEventKey = key;
392 } 378 }
393 379
394 void* IFWL_Widget::GetLayoutItem() const { 380 void* IFWL_Widget::GetLayoutItem() const {
395 return m_pLayoutItem; 381 return m_pLayoutItem;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 calPart.m_wsText = wsText; 549 calPart.m_wsText = wsText;
564 calPart.m_dwTTOStyles = dwTTOStyles; 550 calPart.m_dwTTOStyles = dwTTOStyles;
565 calPart.m_iTTOAlign = iTTOAlign; 551 calPart.m_iTTOAlign = iTTOAlign;
566 pTheme->CalcTextRect(&calPart, rect); 552 pTheme->CalcTextRect(&calPart, rect);
567 } 553 }
568 554
569 void IFWL_Widget::SetFocus(FX_BOOL bFocus) { 555 void IFWL_Widget::SetFocus(FX_BOOL bFocus) {
570 if (m_pWidgetMgr->IsFormDisabled()) 556 if (m_pWidgetMgr->IsFormDisabled())
571 return; 557 return;
572 558
573 IFWL_App* pApp = GetOwnerApp(); 559 const IFWL_App* pApp = GetOwnerApp();
574 if (!pApp) 560 if (!pApp)
575 return; 561 return;
576 562
577 CFWL_NoteDriver* pDriver = 563 CFWL_NoteDriver* pDriver =
578 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 564 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
579 if (!pDriver) 565 if (!pDriver)
580 return; 566 return;
581 567
582 IFWL_Widget* curFocus = pDriver->GetFocus(); 568 IFWL_Widget* curFocus = pDriver->GetFocus();
583 if (bFocus && curFocus != this) { 569 if (bFocus && curFocus != this) {
584 pDriver->SetFocus(this); 570 pDriver->SetFocus(this);
585 } else if (!bFocus && curFocus == this) { 571 } else if (!bFocus && curFocus == this) {
586 pDriver->SetFocus(nullptr); 572 pDriver->SetFocus(nullptr);
587 } 573 }
588 } 574 }
589 575
590 void IFWL_Widget::SetGrab(FX_BOOL bSet) { 576 void IFWL_Widget::SetGrab(FX_BOOL bSet) {
591 IFWL_App* pApp = GetOwnerApp(); 577 const IFWL_App* pApp = GetOwnerApp();
592 if (!pApp) 578 if (!pApp)
593 return; 579 return;
594 CFWL_NoteDriver* pDriver = 580 CFWL_NoteDriver* pDriver =
595 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 581 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
596 pDriver->SetGrab(this, bSet); 582 pDriver->SetGrab(this, bSet);
597 } 583 }
598 584
599 FX_BOOL IFWL_Widget::GetPopupPos(FX_FLOAT fMinHeight, 585 FX_BOOL IFWL_Widget::GetPopupPos(FX_FLOAT fMinHeight,
600 FX_FLOAT fMaxHeight, 586 FX_FLOAT fMaxHeight,
601 const CFX_RectF& rtAnchor, 587 const CFX_RectF& rtAnchor,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 rtPopup.Offset(fx, fy); 683 rtPopup.Offset(fx, fy);
698 return TRUE; 684 return TRUE;
699 } 685 }
700 686
701 FX_BOOL IFWL_Widget::GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy) { 687 FX_BOOL IFWL_Widget::GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy) {
702 return FALSE; 688 return FALSE;
703 } 689 }
704 690
705 void IFWL_Widget::RegisterEventTarget(IFWL_Widget* pEventSource, 691 void IFWL_Widget::RegisterEventTarget(IFWL_Widget* pEventSource,
706 uint32_t dwFilter) { 692 uint32_t dwFilter) {
707 IFWL_App* pApp = GetOwnerApp(); 693 const IFWL_App* pApp = GetOwnerApp();
708 if (!pApp) 694 if (!pApp)
709 return; 695 return;
710 696
711 CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); 697 CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver();
712 if (!pNoteDriver) 698 if (!pNoteDriver)
713 return; 699 return;
714 700
715 pNoteDriver->RegisterEventTarget(this, pEventSource, dwFilter); 701 pNoteDriver->RegisterEventTarget(this, pEventSource, dwFilter);
716 } 702 }
717 703
718 void IFWL_Widget::UnregisterEventTarget() { 704 void IFWL_Widget::UnregisterEventTarget() {
719 IFWL_App* pApp = GetOwnerApp(); 705 const IFWL_App* pApp = GetOwnerApp();
720 if (!pApp) 706 if (!pApp)
721 return; 707 return;
722 708
723 CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); 709 CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver();
724 if (!pNoteDriver) 710 if (!pNoteDriver)
725 return; 711 return;
726 712
727 pNoteDriver->UnregisterEventTarget(this); 713 pNoteDriver->UnregisterEventTarget(this);
728 } 714 }
729 715
730 void IFWL_Widget::DispatchKeyEvent(CFWL_MsgKey* pNote) { 716 void IFWL_Widget::DispatchKeyEvent(CFWL_MsgKey* pNote) {
731 if (!pNote) 717 if (!pNote)
732 return; 718 return;
733 CFWL_EvtKey* pEvent = new CFWL_EvtKey; 719 CFWL_EvtKey* pEvent = new CFWL_EvtKey;
734 pEvent->m_pSrcTarget = this; 720 pEvent->m_pSrcTarget = this;
735 pEvent->m_dwCmd = pNote->m_dwCmd; 721 pEvent->m_dwCmd = pNote->m_dwCmd;
736 pEvent->m_dwKeyCode = pNote->m_dwKeyCode; 722 pEvent->m_dwKeyCode = pNote->m_dwKeyCode;
737 pEvent->m_dwFlags = pNote->m_dwFlags; 723 pEvent->m_dwFlags = pNote->m_dwFlags;
738 DispatchEvent(pEvent); 724 DispatchEvent(pEvent);
739 pEvent->Release(); 725 pEvent->Release();
740 } 726 }
741 727
742 void IFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { 728 void IFWL_Widget::DispatchEvent(CFWL_Event* pEvent) {
743 if (m_pOuter) { 729 if (m_pOuter) {
744 IFWL_WidgetDelegate* pDelegate = m_pOuter->SetDelegate(nullptr); 730 IFWL_WidgetDelegate* pDelegate = m_pOuter->SetDelegate(nullptr);
745 pDelegate->OnProcessEvent(pEvent); 731 pDelegate->OnProcessEvent(pEvent);
746 return; 732 return;
747 } 733 }
748 IFWL_App* pApp = GetOwnerApp(); 734 const IFWL_App* pApp = GetOwnerApp();
749 if (!pApp) 735 if (!pApp)
750 return; 736 return;
751 CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); 737 CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver();
752 if (!pNoteDriver) 738 if (!pNoteDriver)
753 return; 739 return;
754 pNoteDriver->SendEvent(pEvent); 740 pNoteDriver->SendEvent(pEvent);
755 } 741 }
756 742
757 void IFWL_Widget::Repaint(const CFX_RectF* pRect) { 743 void IFWL_Widget::Repaint(const CFX_RectF* pRect) {
758 if (pRect) { 744 if (pRect) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 param.m_iPart = iPartEdge; 796 param.m_iPart = iPartEdge;
811 param.m_pGraphics = pGraphics; 797 param.m_pGraphics = pGraphics;
812 if (pMatrix) { 798 if (pMatrix) {
813 param.m_matrix.Concat(*pMatrix, TRUE); 799 param.m_matrix.Concat(*pMatrix, TRUE);
814 } 800 }
815 param.m_rtPart = rtEdge; 801 param.m_rtPart = rtEdge;
816 pTheme->DrawBackground(&param); 802 pTheme->DrawBackground(&param);
817 } 803 }
818 804
819 void IFWL_Widget::NotifyDriver() { 805 void IFWL_Widget::NotifyDriver() {
820 IFWL_App* pApp = GetOwnerApp(); 806 const IFWL_App* pApp = GetOwnerApp();
821 if (!pApp) 807 if (!pApp)
822 return; 808 return;
823 809
824 CFWL_NoteDriver* pDriver = 810 CFWL_NoteDriver* pDriver =
825 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 811 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
826 if (!pDriver) 812 if (!pDriver)
827 return; 813 return;
828 814
829 pDriver->NotifyTargetDestroy(this); 815 pDriver->NotifyTargetDestroy(this);
830 } 816 }
831 817
832 CFX_SizeF IFWL_Widget::GetOffsetFromParent(IFWL_Widget* pParent) { 818 CFX_SizeF IFWL_Widget::GetOffsetFromParent(IFWL_Widget* pParent) {
833 if (pParent == this) 819 if (pParent == this)
834 return CFX_SizeF(); 820 return CFX_SizeF();
835 821
836 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); 822 CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr();
837 if (!pWidgetMgr) 823 if (!pWidgetMgr)
838 return CFX_SizeF(); 824 return CFX_SizeF();
839 825
840 CFX_SizeF szRet(m_pProperties->m_rtWidget.left, 826 CFX_SizeF szRet(m_pProperties->m_rtWidget.left,
841 m_pProperties->m_rtWidget.top); 827 m_pProperties->m_rtWidget.top);
842 828
843 IFWL_Widget* pDstWidget = GetParent(); 829 IFWL_Widget* pDstWidget = GetParent();
844 while (pDstWidget && pDstWidget != pParent) { 830 while (pDstWidget && pDstWidget != pParent) {
845 CFX_RectF rtDst; 831 CFX_RectF rtDst;
846 pDstWidget->GetWidgetRect(rtDst); 832 pDstWidget->GetWidgetRect(rtDst);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
930 } 916 }
931 } 917 }
932 918
933 void CFWL_WidgetImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {} 919 void CFWL_WidgetImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {}
934 920
935 void CFWL_WidgetImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, 921 void CFWL_WidgetImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics,
936 const CFX_Matrix* pMatrix) { 922 const CFX_Matrix* pMatrix) {
937 CFWL_EvtDraw evt; 923 CFWL_EvtDraw evt;
938 evt.m_pGraphics = pGraphics; 924 evt.m_pGraphics = pGraphics;
939 } 925 }
OLDNEW
« no previous file with comments | « xfa/fwl/core/ifwl_widget.h ('k') | xfa/fwl/core/ifwl_widgetdelegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698