diff options
author | dsinclair <dsinclair@chromium.org> | 2016-10-31 07:29:34 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-31 07:29:34 -0700 |
commit | 20855384b8149a631c3c1d229551523c12eb767b (patch) | |
tree | e3cef278e322742bea6c4b48f40ed580754ebd80 | |
parent | 747dcf775c5cb661e96a639f73322cc489d8590f (diff) | |
download | pdfium-20855384b8149a631c3c1d229551523c12eb767b.tar.xz |
Remove FWL globals.
This CL removes the FWL_GetApp, FWL_SetApp and FWL_GetWidgetAdapter methods.
In the process it changes the various Initialize methods to return void.
Review-Url: https://codereview.chromium.org/2436103002
83 files changed, 700 insertions, 709 deletions
diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp index 4c390ae917..f5e36d4a67 100644 --- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp +++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.cpp @@ -24,7 +24,7 @@ FWL_Error CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer, if (!s_TimerArray) s_TimerArray = new std::vector<CFWL_TimerInfo*>; - s_TimerArray->push_back(new CFWL_TimerInfo(id_event, pTimer)); + s_TimerArray->push_back(new CFWL_TimerInfo(this, id_event, pTimer)); *pTimerInfo = s_TimerArray->back(); return FWL_Error::Succeeded; } diff --git a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h index 3fc56ee0e7..092148f4f2 100644 --- a/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h +++ b/fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h @@ -33,9 +33,8 @@ class CXFA_FWLAdapterTimerMgr : public IFWL_AdapterTimerMgr { }; struct CFWL_TimerInfo : public IFWL_TimerInfo { - CFWL_TimerInfo() : pTimer(nullptr) {} - CFWL_TimerInfo(int32_t event, IFWL_Timer* timer) - : idEvent(event), pTimer(timer) {} + CFWL_TimerInfo(IFWL_AdapterTimerMgr* mgr, int32_t event, IFWL_Timer* timer) + : IFWL_TimerInfo(mgr), idEvent(event), pTimer(timer) {} int32_t idEvent; IFWL_Timer* pTimer; diff --git a/xfa/fwl/core/cfwl_barcode.cpp b/xfa/fwl/core/cfwl_barcode.cpp index 5a3f9dd545..c17185990e 100644 --- a/xfa/fwl/core/cfwl_barcode.cpp +++ b/xfa/fwl/core/cfwl_barcode.cpp @@ -8,34 +8,31 @@ #include <memory> -IFWL_Barcode* CFWL_Barcode::GetWidget() { - return static_cast<IFWL_Barcode*>(m_pIface.get()); -} +CFWL_Barcode::CFWL_Barcode(const IFWL_App* app) : CFWL_Edit(app) {} -const IFWL_Barcode* CFWL_Barcode::GetWidget() const { - return static_cast<IFWL_Barcode*>(m_pIface.get()); -} +CFWL_Barcode::~CFWL_Barcode() {} -FWL_Error CFWL_Barcode::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { +void CFWL_Barcode::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_Barcode> pBarcode( - new IFWL_Barcode(m_pProperties->MakeWidgetImpProperties(&m_barcodeData))); - FWL_Error ret = pBarcode->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } + + std::unique_ptr<IFWL_Barcode> pBarcode(new IFWL_Barcode( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_barcodeData))); + pBarcode->Initialize(); + m_pIface = std::move(pBarcode); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; + CFWL_Widget::Initialize(pProperties); } -CFWL_Barcode::CFWL_Barcode() {} +IFWL_Barcode* CFWL_Barcode::GetWidget() { + return static_cast<IFWL_Barcode*>(m_pIface.get()); +} -CFWL_Barcode::~CFWL_Barcode() {} +const IFWL_Barcode* CFWL_Barcode::GetWidget() const { + return static_cast<IFWL_Barcode*>(m_pIface.get()); +} void CFWL_Barcode::SetType(BC_TYPE type) { if (GetWidget()) diff --git a/xfa/fwl/core/cfwl_barcode.h b/xfa/fwl/core/cfwl_barcode.h index aa6f8fccf4..c2bf38ad40 100644 --- a/xfa/fwl/core/cfwl_barcode.h +++ b/xfa/fwl/core/cfwl_barcode.h @@ -16,13 +16,14 @@ class CFWL_WidgetProperties; class CFWL_Barcode : public CFWL_Edit { public: - CFWL_Barcode(); + CFWL_Barcode(const IFWL_App*); ~CFWL_Barcode() override; IFWL_Barcode* GetWidget() override; const IFWL_Barcode* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + void SetType(BC_TYPE type); FX_BOOL IsProtectedType(); diff --git a/xfa/fwl/core/cfwl_checkbox.cpp b/xfa/fwl/core/cfwl_checkbox.cpp index bc55a690f3..8ae3e970e3 100644 --- a/xfa/fwl/core/cfwl_checkbox.cpp +++ b/xfa/fwl/core/cfwl_checkbox.cpp @@ -10,6 +10,24 @@ #include "xfa/fwl/core/fwl_error.h" +CFWL_CheckBox::CFWL_CheckBox(const IFWL_App* app) : CFWL_Widget(app) {} + +CFWL_CheckBox::~CFWL_CheckBox() {} + +void CFWL_CheckBox::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_CheckBox> pCheckBox(new IFWL_CheckBox( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_checkboxData))); + pCheckBox->Initialize(); + + m_pIface = std::move(pCheckBox); + CFWL_Widget::Initialize(pProperties); +} + IFWL_CheckBox* CFWL_CheckBox::GetWidget() { return static_cast<IFWL_CheckBox*>(m_pIface.get()); } @@ -18,23 +36,6 @@ const IFWL_CheckBox* CFWL_CheckBox::GetWidget() const { return static_cast<IFWL_CheckBox*>(m_pIface.get()); } -FWL_Error CFWL_CheckBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_CheckBox> pCheckBox(new IFWL_CheckBox( - m_pProperties->MakeWidgetImpProperties(&m_checkboxData))); - FWL_Error ret = pCheckBox->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pCheckBox); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - FWL_Error CFWL_CheckBox::SetCaption(const CFX_WideStringC& wsCaption) { m_checkboxData.m_wsCaption = wsCaption; return FWL_Error::Succeeded; @@ -53,10 +54,6 @@ FWL_Error CFWL_CheckBox::SetCheckState(int32_t iCheck) { return GetWidget()->SetCheckState(iCheck); } -CFWL_CheckBox::CFWL_CheckBox() {} - -CFWL_CheckBox::~CFWL_CheckBox() {} - CFWL_CheckBox::CFWL_CheckBoxDP::CFWL_CheckBoxDP() : m_fBoxHeight(16.0f), m_wsCaption(L"Check box") {} diff --git a/xfa/fwl/core/cfwl_checkbox.h b/xfa/fwl/core/cfwl_checkbox.h index 9daab33150..e17e6b5ef7 100644 --- a/xfa/fwl/core/cfwl_checkbox.h +++ b/xfa/fwl/core/cfwl_checkbox.h @@ -12,13 +12,14 @@ class CFWL_CheckBox : public CFWL_Widget { public: - CFWL_CheckBox(); + CFWL_CheckBox(const IFWL_App*); ~CFWL_CheckBox() override; IFWL_CheckBox* GetWidget() override; const IFWL_CheckBox* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + FWL_Error SetCaption(const CFX_WideStringC& wsCaption); FWL_Error SetBoxSize(FX_FLOAT fHeight); int32_t GetCheckState(); diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp index e00f785ade..825df9c538 100644 --- a/xfa/fwl/core/cfwl_combobox.cpp +++ b/xfa/fwl/core/cfwl_combobox.cpp @@ -11,6 +11,24 @@ #include "xfa/fwl/core/fwl_error.h" #include "xfa/fwl/core/ifwl_widget.h" +CFWL_ComboBox::CFWL_ComboBox(const IFWL_App* app) : CFWL_Widget(app) {} + +CFWL_ComboBox::~CFWL_ComboBox() {} + +void CFWL_ComboBox::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_ComboBox> pComboBox(new IFWL_ComboBox( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_comboBoxData))); + pComboBox->Initialize(); + + m_pIface = std::move(pComboBox); + CFWL_Widget::Initialize(pProperties); +} + IFWL_ComboBox* CFWL_ComboBox::GetWidget() { return static_cast<IFWL_ComboBox*>(m_pIface.get()); } @@ -19,23 +37,6 @@ const IFWL_ComboBox* CFWL_ComboBox::GetWidget() const { return static_cast<IFWL_ComboBox*>(m_pIface.get()); } -FWL_Error CFWL_ComboBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_ComboBox> pComboBox(new IFWL_ComboBox( - m_pProperties->MakeWidgetImpProperties(&m_comboBoxData))); - FWL_Error ret = pComboBox->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pComboBox); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - int32_t CFWL_ComboBox::AddString(const CFX_WideStringC& wsText) { std::unique_ptr<CFWL_ComboBoxItem> pItem(new CFWL_ComboBoxItem); pItem->m_wsText = wsText; @@ -231,10 +232,6 @@ FWL_Error CFWL_ComboBox::EditModifyStylesEx(uint32_t dwStylesExAdded, : FWL_Error::Indefinite; } -CFWL_ComboBox::CFWL_ComboBox() {} - -CFWL_ComboBox::~CFWL_ComboBox() {} - CFWL_ComboBox::CFWL_ComboBoxDP::CFWL_ComboBoxDP() { m_fItemHeight = 0; m_fMaxListHeight = 0; diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h index 6e4988fe8e..bb19e55653 100644 --- a/xfa/fwl/core/cfwl_combobox.h +++ b/xfa/fwl/core/cfwl_combobox.h @@ -20,13 +20,14 @@ class CFWL_ComboBoxItem; class CFWL_ComboBox : public CFWL_Widget { public: - CFWL_ComboBox(); + CFWL_ComboBox(const IFWL_App*); ~CFWL_ComboBox() override; IFWL_ComboBox* GetWidget() override; const IFWL_ComboBox* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + int32_t AddString(const CFX_WideStringC& wsText); int32_t AddString(const CFX_WideStringC& wsText, CFX_DIBitmap* pIcon); bool RemoveAt(int32_t iIndex); // Returns false iff |iIndex| out of range. diff --git a/xfa/fwl/core/cfwl_datetimepicker.cpp b/xfa/fwl/core/cfwl_datetimepicker.cpp index 7d5a1535f1..ebfcee62ba 100644 --- a/xfa/fwl/core/cfwl_datetimepicker.cpp +++ b/xfa/fwl/core/cfwl_datetimepicker.cpp @@ -12,6 +12,25 @@ #include "xfa/fwl/core/ifwl_datetimepicker.h" #include "xfa/fwl/core/ifwl_widget.h" +CFWL_DateTimePicker::CFWL_DateTimePicker(const IFWL_App* app) + : CFWL_Widget(app) {} + +CFWL_DateTimePicker::~CFWL_DateTimePicker() {} + +void CFWL_DateTimePicker::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_DateTimePicker> pDateTimePicker(new IFWL_DateTimePicker( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_DateTimePickerDP))); + pDateTimePicker->Initialize(); + + m_pIface = std::move(pDateTimePicker); + CFWL_Widget::Initialize(pProperties); +} + IFWL_DateTimePicker* CFWL_DateTimePicker::GetWidget() { return static_cast<IFWL_DateTimePicker*>(m_pIface.get()); } @@ -20,24 +39,6 @@ const IFWL_DateTimePicker* CFWL_DateTimePicker::GetWidget() const { return static_cast<IFWL_DateTimePicker*>(m_pIface.get()); } -FWL_Error CFWL_DateTimePicker::Initialize( - const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_DateTimePicker> pDateTimePicker(new IFWL_DateTimePicker( - m_pProperties->MakeWidgetImpProperties(&m_DateTimePickerDP))); - FWL_Error ret = pDateTimePicker->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pDateTimePicker); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - FWL_Error CFWL_DateTimePicker::SetToday(int32_t iYear, int32_t iMonth, int32_t iDay) { @@ -75,10 +76,6 @@ FWL_Error CFWL_DateTimePicker::SetCurSel(int32_t iYear, return GetWidget()->SetCurSel(iYear, iMonth, iDay); } -CFWL_DateTimePicker::CFWL_DateTimePicker() {} - -CFWL_DateTimePicker::~CFWL_DateTimePicker() {} - CFWL_DateTimePicker::CFWL_DateTimePickerDP::CFWL_DateTimePickerDP() { m_iYear = 2011; m_iMonth = 1; diff --git a/xfa/fwl/core/cfwl_datetimepicker.h b/xfa/fwl/core/cfwl_datetimepicker.h index a3299a92a0..2de57add80 100644 --- a/xfa/fwl/core/cfwl_datetimepicker.h +++ b/xfa/fwl/core/cfwl_datetimepicker.h @@ -12,13 +12,14 @@ class CFWL_DateTimePicker : public CFWL_Widget { public: - CFWL_DateTimePicker(); + CFWL_DateTimePicker(const IFWL_App*); ~CFWL_DateTimePicker() override; IFWL_DateTimePicker* GetWidget() override; const IFWL_DateTimePicker* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + FWL_Error SetToday(int32_t iYear, int32_t iMonth, int32_t iDay); FWL_Error GetEditText(CFX_WideString& wsText); FWL_Error SetEditText(const CFX_WideString& wsText); diff --git a/xfa/fwl/core/cfwl_edit.cpp b/xfa/fwl/core/cfwl_edit.cpp index 9e106929bb..d0936a65b7 100644 --- a/xfa/fwl/core/cfwl_edit.cpp +++ b/xfa/fwl/core/cfwl_edit.cpp @@ -9,6 +9,24 @@ #include <memory> #include <vector> +CFWL_Edit::CFWL_Edit(const IFWL_App* app) : CFWL_Widget(app) {} + +CFWL_Edit::~CFWL_Edit() {} + +void CFWL_Edit::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_Edit> pEdit(new IFWL_Edit( + m_pApp, m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); + pEdit->Initialize(); + + m_pIface = std::move(pEdit); + CFWL_Widget::Initialize(pProperties); +} + IFWL_Edit* CFWL_Edit::GetWidget() { return static_cast<IFWL_Edit*>(m_pIface.get()); } @@ -17,23 +35,6 @@ const IFWL_Edit* CFWL_Edit::GetWidget() const { return static_cast<IFWL_Edit*>(m_pIface.get()); } -FWL_Error CFWL_Edit::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_Edit> pEdit( - new IFWL_Edit(m_pProperties->MakeWidgetImpProperties(nullptr), nullptr)); - FWL_Error ret = pEdit->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pEdit); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - FWL_Error CFWL_Edit::SetText(const CFX_WideString& wsText) { if (!GetWidget()) return FWL_Error::Indefinite; @@ -234,7 +235,3 @@ FX_BOOL CFWL_Edit::ReplaceSpellCheckWord(CFX_PointF pointf, const CFX_ByteStringC& bsReplace) { return GetWidget()->ReplaceSpellCheckWord(pointf, bsReplace); } - -CFWL_Edit::CFWL_Edit() {} - -CFWL_Edit::~CFWL_Edit() {} diff --git a/xfa/fwl/core/cfwl_edit.h b/xfa/fwl/core/cfwl_edit.h index 83343ac751..ceeb95f325 100644 --- a/xfa/fwl/core/cfwl_edit.h +++ b/xfa/fwl/core/cfwl_edit.h @@ -17,13 +17,14 @@ class IFDE_TxtEdtDoRecord; class CFWL_Edit : public CFWL_Widget { public: - CFWL_Edit(); + CFWL_Edit(const IFWL_App*); ~CFWL_Edit() override; IFWL_Edit* GetWidget() override; const IFWL_Edit* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + FWL_Error SetText(const CFX_WideString& wsText); int32_t GetTextLength() const; FWL_Error GetText(CFX_WideString& wsText, diff --git a/xfa/fwl/core/cfwl_listbox.cpp b/xfa/fwl/core/cfwl_listbox.cpp index 3884e8c42e..f8a5e199c2 100644 --- a/xfa/fwl/core/cfwl_listbox.cpp +++ b/xfa/fwl/core/cfwl_listbox.cpp @@ -10,6 +10,24 @@ #include "third_party/base/stl_util.h" +CFWL_ListBox::CFWL_ListBox(const IFWL_App* app) : CFWL_Widget(app) {} + +CFWL_ListBox::~CFWL_ListBox() {} + +void CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_ListBox> pListBox(new IFWL_ListBox( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr)); + pListBox->Initialize(); + + m_pIface = std::move(pListBox); + CFWL_Widget::Initialize(pProperties); +} + IFWL_ListBox* CFWL_ListBox::GetWidget() { return static_cast<IFWL_ListBox*>(m_pIface.get()); } @@ -18,23 +36,6 @@ const IFWL_ListBox* CFWL_ListBox::GetWidget() const { return static_cast<IFWL_ListBox*>(m_pIface.get()); } -FWL_Error CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_ListBox> pListBox(new IFWL_ListBox( - m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr)); - FWL_Error ret = pListBox->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pListBox); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - FWL_Error CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, IFWL_ListItem* pItem) { static_cast<CFWL_ListItem*>(pItem)->m_pDIB = pDIB; return FWL_Error::Succeeded; @@ -203,10 +204,6 @@ uint32_t CFWL_ListBox::GetItemStates(IFWL_ListItem* pItem) { return pListItem->m_dwStates | pListItem->m_dwCheckState; } -CFWL_ListBox::CFWL_ListBox() {} - -CFWL_ListBox::~CFWL_ListBox() {} - CFWL_ListBox::CFWL_ListBoxDP::CFWL_ListBoxDP() {} CFWL_ListBox::CFWL_ListBoxDP::~CFWL_ListBoxDP() {} diff --git a/xfa/fwl/core/cfwl_listbox.h b/xfa/fwl/core/cfwl_listbox.h index 52caaeaea9..872ac722db 100644 --- a/xfa/fwl/core/cfwl_listbox.h +++ b/xfa/fwl/core/cfwl_listbox.h @@ -19,13 +19,14 @@ class CFWL_ListItem; class CFWL_ListBox : public CFWL_Widget { public: - CFWL_ListBox(); + CFWL_ListBox(const IFWL_App*); ~CFWL_ListBox() override; IFWL_ListBox* GetWidget() override; const IFWL_ListBox* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + FWL_Error AddDIBitmap(CFX_DIBitmap* pDIB, IFWL_ListItem* pItem); IFWL_ListItem* AddString(const CFX_WideStringC& wsAdd, FX_BOOL bSelect = FALSE); diff --git a/xfa/fwl/core/cfwl_picturebox.cpp b/xfa/fwl/core/cfwl_picturebox.cpp index 92058a9818..8210db2562 100644 --- a/xfa/fwl/core/cfwl_picturebox.cpp +++ b/xfa/fwl/core/cfwl_picturebox.cpp @@ -8,6 +8,24 @@ #include <memory> +CFWL_PictureBox::CFWL_PictureBox(const IFWL_App* app) : CFWL_Widget(app) {} + +CFWL_PictureBox::~CFWL_PictureBox() {} + +void CFWL_PictureBox::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_PictureBox> pPictureBox(new IFWL_PictureBox( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_PictureBoxDP))); + pPictureBox->Initialize(); + + m_pIface = std::move(pPictureBox); + CFWL_Widget::Initialize(pProperties); +} + IFWL_PictureBox* CFWL_PictureBox::GetWidget() { return static_cast<IFWL_PictureBox*>(m_pIface.get()); } @@ -16,24 +34,6 @@ const IFWL_PictureBox* CFWL_PictureBox::GetWidget() const { return static_cast<IFWL_PictureBox*>(m_pIface.get()); } -FWL_Error CFWL_PictureBox::Initialize( - const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_PictureBox> pPictureBox(new IFWL_PictureBox( - m_pProperties->MakeWidgetImpProperties(&m_PictureBoxDP))); - FWL_Error ret = pPictureBox->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pPictureBox); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - CFX_DIBitmap* CFWL_PictureBox::GetPicture() { return m_PictureBoxDP.m_pBitmap; } @@ -97,10 +97,6 @@ FWL_Error CFWL_PictureBox::SetOffset(FX_FLOAT fx, FX_FLOAT fy) { return FWL_Error::Succeeded; } -CFWL_PictureBox::CFWL_PictureBox() {} - -CFWL_PictureBox::~CFWL_PictureBox() {} - CFWL_PictureBox::CFWL_PictureBoxDP::CFWL_PictureBoxDP() : m_pBitmap(nullptr), m_iOpacity(0), diff --git a/xfa/fwl/core/cfwl_picturebox.h b/xfa/fwl/core/cfwl_picturebox.h index 584950f045..2338009cc1 100644 --- a/xfa/fwl/core/cfwl_picturebox.h +++ b/xfa/fwl/core/cfwl_picturebox.h @@ -13,13 +13,14 @@ class CFWL_PictureBox : public CFWL_Widget { public: - CFWL_PictureBox(); + CFWL_PictureBox(const IFWL_App*); ~CFWL_PictureBox() override; IFWL_PictureBox* GetWidget() override; const IFWL_PictureBox* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + CFX_DIBitmap* GetPicture(); FWL_Error SetPicture(CFX_DIBitmap* pBitmap); FX_FLOAT GetRotation(); diff --git a/xfa/fwl/core/cfwl_pushbutton.cpp b/xfa/fwl/core/cfwl_pushbutton.cpp index 8425f5de24..0930f93aa0 100644 --- a/xfa/fwl/core/cfwl_pushbutton.cpp +++ b/xfa/fwl/core/cfwl_pushbutton.cpp @@ -8,6 +8,24 @@ #include <memory> +CFWL_PushButton::CFWL_PushButton(const IFWL_App* app) : CFWL_Widget(app) {} + +CFWL_PushButton::~CFWL_PushButton() {} + +void CFWL_PushButton::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(!m_pIface); + + if (pProperties) + *m_pProperties = *pProperties; + + std::unique_ptr<IFWL_PushButton> pPushButton(new IFWL_PushButton( + m_pApp, m_pProperties->MakeWidgetImpProperties(&m_buttonData))); + pPushButton->Initialize(); + + m_pIface = std::move(pPushButton); + CFWL_Widget::Initialize(pProperties); +} + IFWL_PushButton* CFWL_PushButton::GetWidget() { return static_cast<IFWL_PushButton*>(m_pIface.get()); } @@ -16,24 +34,6 @@ const IFWL_PushButton* CFWL_PushButton::GetWidget() const { return static_cast<IFWL_PushButton*>(m_pIface.get()); } -FWL_Error CFWL_PushButton::Initialize( - const CFWL_WidgetProperties* pProperties) { - if (m_pIface) - return FWL_Error::Indefinite; - if (pProperties) { - *m_pProperties = *pProperties; - } - std::unique_ptr<IFWL_PushButton> pPushButton(new IFWL_PushButton( - m_pProperties->MakeWidgetImpProperties(&m_buttonData))); - FWL_Error ret = pPushButton->Initialize(); - if (ret != FWL_Error::Succeeded) { - return ret; - } - m_pIface = std::move(pPushButton); - CFWL_Widget::Initialize(); - return FWL_Error::Succeeded; -} - FWL_Error CFWL_PushButton::GetCaption(CFX_WideString& wsCaption) { wsCaption = m_buttonData.m_wsCaption; return FWL_Error::Succeeded; @@ -53,10 +53,6 @@ FWL_Error CFWL_PushButton::SetPicture(CFX_DIBitmap* pBitmap) { return FWL_Error::Succeeded; } -CFWL_PushButton::CFWL_PushButton() {} - -CFWL_PushButton::~CFWL_PushButton() {} - FWL_Error CFWL_PushButton::CFWL_PushButtonDP::GetCaption( IFWL_Widget* pWidget, CFX_WideString& wsCaption) { diff --git a/xfa/fwl/core/cfwl_pushbutton.h b/xfa/fwl/core/cfwl_pushbutton.h index 8f11660ce9..44106d3c2c 100644 --- a/xfa/fwl/core/cfwl_pushbutton.h +++ b/xfa/fwl/core/cfwl_pushbutton.h @@ -12,13 +12,14 @@ class CFWL_PushButton : public CFWL_Widget { public: - CFWL_PushButton(); + CFWL_PushButton(const IFWL_App*); ~CFWL_PushButton() override; IFWL_PushButton* GetWidget() override; const IFWL_PushButton* GetWidget() const override; - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + FWL_Error GetCaption(CFX_WideString& wsCaption); FWL_Error SetCaption(const CFX_WideStringC& wsCaption); CFX_DIBitmap* GetPicture(); diff --git a/xfa/fwl/core/cfwl_themetext.h b/xfa/fwl/core/cfwl_themetext.h index b570ca814d..9662414069 100644 --- a/xfa/fwl/core/cfwl_themetext.h +++ b/xfa/fwl/core/cfwl_themetext.h @@ -14,6 +14,7 @@ class CFWL_ThemeText : public CFWL_ThemePart { public: CFWL_ThemeText() : m_pGraphics(nullptr) {} + CFX_WideString m_wsText; uint32_t m_dwTTOStyles; int32_t m_iTTOAlign; diff --git a/xfa/fwl/core/cfwl_widget.cpp b/xfa/fwl/core/cfwl_widget.cpp index 7f6bd3b07c..d7903ea8a8 100644 --- a/xfa/fwl/core/cfwl_widget.cpp +++ b/xfa/fwl/core/cfwl_widget.cpp @@ -18,9 +18,10 @@ #define FWL_WGT_CalcWidth 2048 #define FWL_WGT_CalcMultiLineDefWidth 120.0f -CFWL_Widget::CFWL_Widget() - : m_pDelegate(nullptr), - m_pWidgetMgr(CFWL_WidgetMgr::GetInstance()), +CFWL_Widget::CFWL_Widget(const IFWL_App* app) + : m_pApp(app), + m_pDelegate(nullptr), + m_pWidgetMgr(app->GetWidgetMgr()), m_pProperties(new CFWL_WidgetProperties) { ASSERT(m_pWidgetMgr); } @@ -30,6 +31,11 @@ CFWL_Widget::~CFWL_Widget() { m_pIface->Finalize(); } +void CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) { + ASSERT(m_pIface); + m_pIface->SetAssociateWidget(this); +} + IFWL_Widget* CFWL_Widget::GetWidget() { return m_pIface.get(); } @@ -38,13 +44,6 @@ const IFWL_Widget* CFWL_Widget::GetWidget() const { return m_pIface.get(); } -FWL_Error CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) { - if (!m_pIface) - return FWL_Error::Indefinite; - m_pIface->SetAssociateWidget(this); - return FWL_Error::Succeeded; -} - FWL_Error CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (!m_pIface) return FWL_Error::Indefinite; diff --git a/xfa/fwl/core/cfwl_widget.h b/xfa/fwl/core/cfwl_widget.h index cc6967852f..b96c1ffaec 100644 --- a/xfa/fwl/core/cfwl_widget.h +++ b/xfa/fwl/core/cfwl_widget.h @@ -21,7 +21,7 @@ class CFWL_WidgetMgr; class CFWL_Widget { public: - CFWL_Widget(); + CFWL_Widget(const IFWL_App*); virtual ~CFWL_Widget(); virtual IFWL_Widget* GetWidget(); @@ -54,8 +54,9 @@ class CFWL_Widget { IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate); protected: - FWL_Error Initialize(const CFWL_WidgetProperties* pProperties = nullptr); + void Initialize(const CFWL_WidgetProperties* pProperties); + const IFWL_App* m_pApp; std::unique_ptr<IFWL_Widget> m_pIface; IFWL_WidgetDelegate* m_pDelegate; CFWL_WidgetMgr* const m_pWidgetMgr; diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp index 79d03b701b..bcbc394884 100644 --- a/xfa/fwl/core/cfwl_widgetmgr.cpp +++ b/xfa/fwl/core/cfwl_widgetmgr.cpp @@ -34,12 +34,6 @@ FX_BOOL FWL_UseOffscreen(IFWL_Widget* pWidget) { #endif } -// static -CFWL_WidgetMgr* CFWL_WidgetMgr::GetInstance() { - IFWL_App* pApp = FWL_GetApp(); - return pApp ? pApp->GetWidgetMgr() : nullptr; -} - CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative) : m_dwCapability(0), m_pDelegate(new CFWL_WidgetMgrDelegate(this)), @@ -392,7 +386,7 @@ void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, IFWL_Widget* focus, FX_BOOL& bFind) { - CFWL_WidgetMgr* pMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pMgr = parent->GetOwnerApp()->GetWidgetMgr(); IFWL_Widget* child = pMgr->GetFirstChildWidget(parent); while (child) { if (focus == child) @@ -470,7 +464,7 @@ IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { return pParent; } IFWL_Widget* child = - CFWL_WidgetMgr::GetInstance()->GetFirstChildWidget(pParent); + pParent->GetOwnerApp()->GetWidgetMgr()->GetFirstChildWidget(pParent); while (child) { if ((child->GetClassID() == FWL_Type::PushButton) && (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { @@ -480,7 +474,7 @@ IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { if (find) { return find; } - child = CFWL_WidgetMgr::GetInstance()->GetNextSiblingWidget(child); + child = child->GetOwnerApp()->GetWidgetMgr()->GetNextSiblingWidget(child); } return nullptr; } @@ -573,7 +567,7 @@ void CFWL_WidgetMgrDelegate::OnProcessMessageToForm(CFWL_Message* pMessage) { return; IFWL_Widget* pDstWidget = pMessage->m_pDstTarget; - IFWL_App* pApp = pDstWidget->GetOwnerApp(); + const IFWL_App* pApp = pDstWidget->GetOwnerApp(); if (!pApp) return; @@ -755,7 +749,7 @@ FX_BOOL CFWL_WidgetMgrDelegate::IsNeedRepaint(IFWL_Widget* pWidget, return FALSE; IFWL_Widget* pChild = - CFWL_WidgetMgr::GetInstance()->GetFirstChildWidget(pWidget); + pWidget->GetOwnerApp()->GetWidgetMgr()->GetFirstChildWidget(pWidget); if (!pChild) return TRUE; @@ -813,7 +807,8 @@ FX_BOOL CFWL_WidgetMgrDelegate::IsNeedRepaint(IFWL_Widget* pWidget, if (r.Contains(hitPoint[i].hitPoint)) hitPoint[i].bNotNeedRepaint = true; } - pChild = CFWL_WidgetMgr::GetInstance()->GetNextSiblingWidget(pChild); + pChild = + pChild->GetOwnerApp()->GetWidgetMgr()->GetNextSiblingWidget(pChild); } while (pChild); if (!bChildIntersectWithDirty) diff --git a/xfa/fwl/core/cfwl_widgetmgr.h b/xfa/fwl/core/cfwl_widgetmgr.h index e0188bd600..3c443cbfca 100644 --- a/xfa/fwl/core/cfwl_widgetmgr.h +++ b/xfa/fwl/core/cfwl_widgetmgr.h @@ -46,8 +46,6 @@ class CFWL_WidgetMgrItem { class CFWL_WidgetMgr { public: - static CFWL_WidgetMgr* GetInstance(); - explicit CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative); ~CFWL_WidgetMgr(); @@ -97,6 +95,8 @@ class CFWL_WidgetMgr { CFX_RectF& rtPopup); protected: + friend class CFWL_WidgetMgrDelegate; + int32_t TravelWidgetMgr(CFWL_WidgetMgrItem* pParent, int32_t* pIndex, CFWL_WidgetMgrItem* pItem, @@ -110,7 +110,6 @@ class CFWL_WidgetMgr { #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) CFX_RectF m_rtScreen; #endif - friend class CFWL_WidgetMgrDelegate; }; class CFWL_WidgetMgrDelegate { diff --git a/xfa/fwl/core/fwl_noteimp.cpp b/xfa/fwl/core/fwl_noteimp.cpp index b6e02843e2..318fd9f6fc 100644 --- a/xfa/fwl/core/fwl_noteimp.cpp +++ b/xfa/fwl/core/fwl_noteimp.cpp @@ -21,12 +21,14 @@ FWL_Error CFWL_NoteLoop::Idle(int32_t count) { if (count <= 0) { #endif CFWL_EvtIdle ev; - IFWL_App* pApp = FWL_GetApp(); + const IFWL_App* pApp = m_pForm->GetOwnerApp(); if (!pApp) return FWL_Error::Indefinite; + CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); if (!pDriver) return FWL_Error::Indefinite; + pDriver->SendEvent(&ev); #if (_FX_OS_ == _FX_WIN32_DESKTOP_) } @@ -51,7 +53,7 @@ FWL_Error CFWL_NoteLoop::SetMainForm(IFWL_Widget* pForm) { void CFWL_NoteLoop::GenerateCommondEvent(uint32_t dwCommand) { CFWL_EvtMenuCommand ev; ev.m_iCommand = dwCommand; - IFWL_App* pApp = m_pForm->GetOwnerApp(); + const IFWL_App* pApp = m_pForm->GetOwnerApp(); if (!pApp) return; @@ -115,9 +117,7 @@ FWL_Error CFWL_NoteDriver::UnregisterEventTarget(IFWL_Widget* pListener) { void CFWL_NoteDriver::ClearEventTargets(FX_BOOL bRemoveAll) { ClearInvalidEventTargets(bRemoveAll); } -IFWL_App* CFWL_NoteDriver::GetOwnerApp() const { - return FWL_GetApp(); -} + FWL_Error CFWL_NoteDriver::PushNoteLoop(CFWL_NoteLoop* pNoteLoop) { m_noteLoopQueue.Add(pNoteLoop); return FWL_Error::Succeeded; @@ -151,7 +151,7 @@ FX_BOOL CFWL_NoteDriver::SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify) { } if (pFocus) { IFWL_Widget* pWidget = - CFWL_WidgetMgr::GetInstance()->GetSystemFormWidget(pFocus); + pFocus->GetOwnerApp()->GetWidgetMgr()->GetSystemFormWidget(pFocus); IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); if (pForm) pForm->SetSubFocus(pFocus); @@ -169,10 +169,6 @@ FX_BOOL CFWL_NoteDriver::SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify) { return TRUE; } FWL_Error CFWL_NoteDriver::Run() { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); - if (!pWidgetMgr) - return FWL_Error::Indefinite; - #if (_FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_WIN32_DESKTOP_ || \ _FX_OS_ == _FX_WIN64_) CFWL_NoteLoop* pTopLoop = nullptr; @@ -294,7 +290,8 @@ int32_t CFWL_NoteDriver::CountLoop() { } FX_BOOL CFWL_NoteDriver::ProcessMessage(CFWL_Message* pMessage) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = + pMessage->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); IFWL_Widget* pMessageForm = pWidgetMgr->IsFormDisabled() ? pMessage->m_pDstTarget : GetMessageForm(pMessage->m_pDstTarget); @@ -413,7 +410,7 @@ FX_BOOL CFWL_NoteDriver::DoDeactivate(CFWL_MsgDeactivate* pMsg, } FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); if (pWidgetMgr->IsFormDisabled()) { m_pFocus = pMsg->m_pDstTarget; return TRUE; @@ -434,7 +431,7 @@ FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, } FX_BOOL CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); if (pWidgetMgr->IsFormDisabled()) { if (m_pFocus == pMsg->m_pDstTarget) { m_pFocus = nullptr; @@ -458,7 +455,7 @@ FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { #if (_FX_OS_ != _FX_MACOSX_) if (pMsg->m_dwCmd == FWL_KeyCommand::KeyDown && pMsg->m_dwKeyCode == FWL_VKEY_Tab) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); IFWL_Widget* pForm = GetMessageForm(pMsg->m_pDstTarget); IFWL_Widget* pFocus = m_pFocus; if (m_pFocus) { @@ -483,7 +480,7 @@ FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { if (!m_pFocus) { if (pMsg->m_dwCmd == FWL_KeyCommand::KeyDown && pMsg->m_dwKeyCode == FWL_VKEY_Return) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); IFWL_Widget* defButton = pWidgetMgr->GetDefaultButton(pMessageForm); if (defButton) { pMsg->m_pDstTarget = defButton; @@ -512,7 +509,7 @@ FX_BOOL CFWL_NoteDriver::DoMouse(CFWL_MsgMouse* pMsg, } FX_BOOL CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return FALSE; @@ -526,7 +523,8 @@ FX_BOOL CFWL_NoteDriver::DoWheel(CFWL_MsgMouseWheel* pMsg, return TRUE; } FX_BOOL CFWL_NoteDriver::DoSize(CFWL_MsgSize* pMsg) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = + pMsg->m_pDstTarget->GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return FALSE; pWidgetMgr->NotifySizeChanged(pMsg->m_pDstTarget, (FX_FLOAT)pMsg->m_iWidth, @@ -543,7 +541,7 @@ FX_BOOL CFWL_NoteDriver::DoDragFiles(CFWL_MsgDropFiles* pMsg, } FX_BOOL CFWL_NoteDriver::DoMouseEx(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pMessageForm->GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return FALSE; IFWL_Widget* pTarget = nullptr; @@ -624,7 +622,7 @@ IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { pMessageForm = pDstTarget; } if (!pMessageForm && pDstTarget) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = pDstTarget->GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return nullptr; pMessageForm = pWidgetMgr->GetSystemFormWidget(pDstTarget); diff --git a/xfa/fwl/core/fwl_noteimp.h b/xfa/fwl/core/fwl_noteimp.h index 6e587166c0..85b44c7ed5 100644 --- a/xfa/fwl/core/fwl_noteimp.h +++ b/xfa/fwl/core/fwl_noteimp.h @@ -61,7 +61,6 @@ class CFWL_NoteDriver { uint32_t dwFilter = FWL_EVENT_ALL_MASK); FWL_Error UnregisterEventTarget(IFWL_Widget* pListener); void ClearEventTargets(FX_BOOL bRemoveAll); - IFWL_App* GetOwnerApp() const; FWL_Error PushNoteLoop(CFWL_NoteLoop* pNoteLoop); CFWL_NoteLoop* PopNoteLoop(); IFWL_Widget* GetFocus(); diff --git a/xfa/fwl/core/ifwl_app.cpp b/xfa/fwl/core/ifwl_app.cpp index a47a76e4c0..2612088c79 100644 --- a/xfa/fwl/core/ifwl_app.cpp +++ b/xfa/fwl/core/ifwl_app.cpp @@ -12,39 +12,13 @@ #include "xfa/fwl/core/ifwl_widget.h" #include "xfa/fxfa/app/xfa_fwladapter.h" -CXFA_FWLAdapterWidgetMgr* FWL_GetAdapterWidgetMgr() { - return CFWL_WidgetMgr::GetInstance()->GetAdapterWidgetMgr(); -} - -CXFA_FFApp* FWL_GetAdapterNative() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return nullptr; - return pApp->GetAdapterNative(); -} - -static IFWL_App* g_theApp = nullptr; -IFWL_App* FWL_GetApp() { - return g_theApp; -} - -void FWL_SetApp(IFWL_App* pApp) { - g_theApp = pApp; -} - IFWL_App::IFWL_App(CXFA_FFApp* pAdapter) : m_pAdapterNative(pAdapter), m_pWidgetMgr(pdfium::MakeUnique<CFWL_WidgetMgr>(pAdapter)), - m_pNoteDriver(pdfium::MakeUnique<CFWL_NoteDriver>()) {} + m_pNoteDriver(pdfium::MakeUnique<CFWL_NoteDriver>()) { + ASSERT(m_pAdapterNative); +} IFWL_App::~IFWL_App() { CFWL_ToolTipContainer::DeleteInstance(); } - -CXFA_FFApp* IFWL_App::GetAdapterNative() { - return m_pAdapterNative; -} - -CFWL_WidgetMgr* IFWL_App::GetWidgetMgr() { - return m_pWidgetMgr.get(); -} diff --git a/xfa/fwl/core/ifwl_app.h b/xfa/fwl/core/ifwl_app.h index 35cbbe2ff9..307cb0770f 100644 --- a/xfa/fwl/core/ifwl_app.h +++ b/xfa/fwl/core/ifwl_app.h @@ -32,8 +32,8 @@ class IFWL_App { explicit IFWL_App(CXFA_FFApp* pAdapter); ~IFWL_App(); - CXFA_FFApp* GetAdapterNative(); - CFWL_WidgetMgr* GetWidgetMgr(); + CXFA_FFApp* GetAdapterNative() const { return m_pAdapterNative; } + CFWL_WidgetMgr* GetWidgetMgr() const { return m_pWidgetMgr.get(); } CFWL_NoteDriver* GetNoteDriver() const { return m_pNoteDriver.get(); } private: @@ -42,10 +42,4 @@ class IFWL_App { std::unique_ptr<CFWL_NoteDriver> m_pNoteDriver; }; -IFWL_App* FWL_GetApp(); -void FWL_SetApp(IFWL_App* pApp); - -CXFA_FFApp* FWL_GetAdapterNative(); -CXFA_FWLAdapterWidgetMgr* FWL_GetAdapterWidgetMgr(); - #endif // XFA_FWL_CORE_IFWL_APP_H_ diff --git a/xfa/fwl/core/ifwl_barcode.cpp b/xfa/fwl/core/ifwl_barcode.cpp index a4b210f115..779b44ab3e 100644 --- a/xfa/fwl/core/ifwl_barcode.cpp +++ b/xfa/fwl/core/ifwl_barcode.cpp @@ -12,8 +12,9 @@ #include "xfa/fwl/core/fwl_noteimp.h" #include "xfa/fwl/core/ifwl_themeprovider.h" -IFWL_Barcode::IFWL_Barcode(const CFWL_WidgetImpProperties& properties) - : IFWL_Edit(properties, nullptr), m_dwStatus(0), m_type(BC_UNKNOWN) {} +IFWL_Barcode::IFWL_Barcode(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties) + : IFWL_Edit(app, properties, nullptr), m_dwStatus(0), m_type(BC_UNKNOWN) {} IFWL_Barcode::~IFWL_Barcode() {} @@ -21,13 +22,11 @@ FWL_Type IFWL_Barcode::GetClassID() const { return FWL_Type::Barcode; } -FWL_Error IFWL_Barcode::Initialize() { - if (!m_pDelegate) { +void IFWL_Barcode::Initialize() { + if (!m_pDelegate) m_pDelegate = new CFWL_BarcodeImpDelegate(this); - } - if (IFWL_Edit::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - return FWL_Error::Succeeded; + + IFWL_Edit::Initialize(); } void IFWL_Barcode::Finalize() { diff --git a/xfa/fwl/core/ifwl_barcode.h b/xfa/fwl/core/ifwl_barcode.h index 5bc800d9a1..7ca6dbeb6f 100644 --- a/xfa/fwl/core/ifwl_barcode.h +++ b/xfa/fwl/core/ifwl_barcode.h @@ -58,13 +58,14 @@ class IFWL_BarcodeDP : public IFWL_EditDP { class IFWL_Barcode : public IFWL_Edit { public: - explicit IFWL_Barcode(const CFWL_WidgetImpProperties& properties); + explicit IFWL_Barcode(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_Barcode() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix = nullptr) override; diff --git a/xfa/fwl/core/ifwl_caret.cpp b/xfa/fwl/core/ifwl_caret.cpp index 52269049e2..b6f799633b 100644 --- a/xfa/fwl/core/ifwl_caret.cpp +++ b/xfa/fwl/core/ifwl_caret.cpp @@ -12,10 +12,11 @@ #include "xfa/fwl/core/ifwl_caret.h" #include "xfa/fwl/core/ifwl_themeprovider.h" -IFWL_Caret::IFWL_Caret(const CFWL_WidgetImpProperties& properties, +IFWL_Caret::IFWL_Caret(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Widget(properties, pOuter), - m_pTimer(new CFWL_CaretTimer(this)), + : IFWL_Widget(app, properties, pOuter), + m_pTimer(new IFWL_Caret::Timer(this)), m_pTimerInfo(nullptr), m_dwElapse(400), m_bSetColor(FALSE) { @@ -28,12 +29,9 @@ FWL_Type IFWL_Caret::GetClassID() const { return FWL_Type::Caret; } -FWL_Error IFWL_Caret::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_Caret::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_CaretImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_Caret::Finalize() { @@ -109,17 +107,17 @@ void IFWL_Caret::DrawCaretBK(CFX_Graphics* pGraphics, pTheme->DrawBackground(¶m); } -IFWL_Caret::CFWL_CaretTimer::CFWL_CaretTimer(IFWL_Caret* pCaret) - : m_pCaret(pCaret) {} +IFWL_Caret::Timer::Timer(IFWL_Caret* pCaret) : IFWL_Timer(pCaret) {} -void IFWL_Caret::CFWL_CaretTimer::Run(IFWL_TimerInfo* pTimerInfo) { - bool toggle = !(m_pCaret->GetStates() & FWL_STATE_CAT_HightLight); - m_pCaret->SetStates(FWL_STATE_CAT_HightLight, toggle); +void IFWL_Caret::Timer::Run(IFWL_TimerInfo* pTimerInfo) { + IFWL_Caret* pCaret = static_cast<IFWL_Caret*>(m_pWidget); + bool toggle = !(pCaret->GetStates() & FWL_STATE_CAT_HightLight); + pCaret->SetStates(FWL_STATE_CAT_HightLight, toggle); CFX_RectF rt; - m_pCaret->GetWidgetRect(rt); + pCaret->GetWidgetRect(rt); rt.Set(0, 0, rt.width + 1, rt.height); - m_pCaret->Repaint(&rt); + pCaret->Repaint(&rt); } CFWL_CaretImpDelegate::CFWL_CaretImpDelegate(IFWL_Caret* pOwner) diff --git a/xfa/fwl/core/ifwl_caret.h b/xfa/fwl/core/ifwl_caret.h index c5b6997b45..351c8461a9 100644 --- a/xfa/fwl/core/ifwl_caret.h +++ b/xfa/fwl/core/ifwl_caret.h @@ -21,13 +21,15 @@ class CFWL_CaretImpDelegate; class IFWL_Caret : public IFWL_Widget { public: - IFWL_Caret(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); + IFWL_Caret(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, + IFWL_Widget* pOuter); ~IFWL_Caret() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix = nullptr) override; @@ -38,21 +40,21 @@ class IFWL_Caret : public IFWL_Widget { protected: friend class CFWL_CaretImpDelegate; - friend class CFWL_CaretTimer; - class CFWL_CaretTimer : public IFWL_Timer { + class Timer : public IFWL_Timer { public: - explicit CFWL_CaretTimer(IFWL_Caret* pCaret); - ~CFWL_CaretTimer() override {} + explicit Timer(IFWL_Caret* pCaret); + ~Timer() override {} + void Run(IFWL_TimerInfo* hTimer) override; - IFWL_Caret* const m_pCaret; }; + friend class IFWL_Caret::Timer; void DrawCaretBK(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix); - std::unique_ptr<CFWL_CaretTimer> m_pTimer; + std::unique_ptr<IFWL_Caret::Timer> m_pTimer; IFWL_TimerInfo* m_pTimerInfo; // not owned. uint32_t m_dwElapse; CFX_Color m_crFill; diff --git a/xfa/fwl/core/ifwl_checkbox.cpp b/xfa/fwl/core/ifwl_checkbox.cpp index 2dd8c2d5db..8af413e602 100644 --- a/xfa/fwl/core/ifwl_checkbox.cpp +++ b/xfa/fwl/core/ifwl_checkbox.cpp @@ -13,6 +13,7 @@ #include "xfa/fwl/core/cfwl_themebackground.h" #include "xfa/fwl/core/cfwl_themetext.h" #include "xfa/fwl/core/cfwl_widgetmgr.h" +#include "xfa/fwl/core/ifwl_app.h" #include "xfa/fwl/core/fwl_noteimp.h" #include "xfa/fwl/core/ifwl_checkbox.h" #include "xfa/fwl/core/ifwl_themeprovider.h" @@ -23,8 +24,9 @@ const int kCaptionMargin = 5; } // namespace -IFWL_CheckBox::IFWL_CheckBox(const CFWL_WidgetImpProperties& properties) - : IFWL_Widget(properties, nullptr), +IFWL_CheckBox::IFWL_CheckBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties) + : IFWL_Widget(app, properties, nullptr), m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), m_iTTOAlign(FDE_TTOALIGNMENT_Center), m_bBtnDown(FALSE) { @@ -36,16 +38,9 @@ IFWL_CheckBox::IFWL_CheckBox(const CFWL_WidgetImpProperties& properties) IFWL_CheckBox::~IFWL_CheckBox() {} -FWL_Type IFWL_CheckBox::GetClassID() const { - return FWL_Type::CheckBox; -} - -FWL_Error IFWL_CheckBox::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_CheckBox::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_CheckBoxImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_CheckBox::Finalize() { @@ -54,6 +49,10 @@ void IFWL_CheckBox::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_CheckBox::GetClassID() const { + return FWL_Type::CheckBox; +} + FWL_Error IFWL_CheckBox::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); @@ -353,7 +352,7 @@ void IFWL_CheckBox::NextStates() { if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CKB_RadioButton) { if ((m_pProperties->m_dwStates & FWL_STATE_CKB_CheckMask) == FWL_STATE_CKB_Unchecked) { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr->IsFormDisabled()) { CFX_ArrayTemplate<IFWL_Widget*> radioarr; pWidgetMgr->GetSameGroupRadioButton(this, radioarr); diff --git a/xfa/fwl/core/ifwl_checkbox.h b/xfa/fwl/core/ifwl_checkbox.h index cdf1e91ca3..b290f04839 100644 --- a/xfa/fwl/core/ifwl_checkbox.h +++ b/xfa/fwl/core/ifwl_checkbox.h @@ -57,13 +57,14 @@ class IFWL_CheckBoxDP : public IFWL_DataProvider { class IFWL_CheckBox : public IFWL_Widget { public: - explicit IFWL_CheckBox(const CFWL_WidgetImpProperties& properties); + explicit IFWL_CheckBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_CheckBox() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp index edc430a0f2..dcd2cf850e 100644 --- a/xfa/fwl/core/ifwl_combobox.cpp +++ b/xfa/fwl/core/ifwl_combobox.cpp @@ -20,8 +20,9 @@ #include "xfa/fwl/core/ifwl_formproxy.h" #include "xfa/fwl/core/ifwl_themeprovider.h" -IFWL_ComboBox::IFWL_ComboBox(const CFWL_WidgetImpProperties& properties) - : IFWL_Widget(properties, nullptr), +IFWL_ComboBox::IFWL_ComboBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties) + : IFWL_Widget(app, properties, nullptr), m_pForm(nullptr), m_bLButtonDown(FALSE), m_iCurSel(-1), @@ -35,18 +36,16 @@ IFWL_ComboBox::IFWL_ComboBox(const CFWL_WidgetImpProperties& properties) IFWL_ComboBox::~IFWL_ComboBox() {} -FWL_Type IFWL_ComboBox::GetClassID() const { - return FWL_Type::ComboBox; -} - -FWL_Error IFWL_ComboBox::Initialize() { - if (m_pWidgetMgr->IsFormDisabled()) - return DisForm_Initialize(); +void IFWL_ComboBox::Initialize() { + IFWL_Widget::Initialize(); + m_pDelegate = new CFWL_ComboBoxImpDelegate(this); - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; + if (m_pWidgetMgr->IsFormDisabled()) { + DisForm_InitComboList(); + DisForm_InitComboEdit(); + return; + } - m_pDelegate = new CFWL_ComboBoxImpDelegate(this); CFWL_WidgetImpProperties prop; prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; prop.m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; @@ -54,11 +53,11 @@ FWL_Error IFWL_ComboBox::Initialize() { prop.m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon; prop.m_pDataProvider = m_pProperties->m_pDataProvider; - m_pListBox.reset(new IFWL_ComboList(prop, this)); + m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, prop, this)); m_pListBox->Initialize(); if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) { CFWL_WidgetImpProperties prop2; - m_pEdit.reset(new IFWL_ComboEdit(prop2, this)); + m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, prop2, this)); m_pEdit->Initialize(); m_pEdit->SetOuter(this); } @@ -66,7 +65,6 @@ FWL_Error IFWL_ComboBox::Initialize() { m_pEdit->SetParent(this); SetStates(m_pProperties->m_dwStates); - return FWL_Error::Succeeded; } void IFWL_ComboBox::Finalize() { @@ -79,6 +77,10 @@ void IFWL_ComboBox::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_ComboBox::GetClassID() const { + return FWL_Type::ComboBox; +} + FWL_Error IFWL_ComboBox::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Reset(); @@ -113,7 +115,7 @@ FWL_Error IFWL_ComboBox::ModifyStylesEx(uint32_t dwStylesExAdded, bool bRemoveDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown); if (bAddDropDown && !m_pEdit) { CFWL_WidgetImpProperties prop; - m_pEdit.reset(new IFWL_ComboEdit(prop, nullptr)); + m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, prop, nullptr)); m_pEdit->Initialize(); m_pEdit->SetOuter(this); m_pEdit->SetParent(this); @@ -712,23 +714,13 @@ void IFWL_ComboBox::InitProxyForm() { propForm.m_dwStyles = FWL_WGTSTYLE_Popup; propForm.m_dwStates = FWL_WGTSTATE_Invisible; - m_pForm = new IFWL_FormProxy(propForm, m_pListBox.get()); + m_pForm = new IFWL_FormProxy(m_pOwnerApp, propForm, m_pListBox.get()); m_pForm->Initialize(); m_pListBox->SetParent(m_pForm); m_pListProxyDelegate = new CFWL_ComboProxyImpDelegate(m_pForm, this); m_pForm->SetDelegate(m_pListProxyDelegate); } -FWL_Error IFWL_ComboBox::DisForm_Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - - m_pDelegate = new CFWL_ComboBoxImpDelegate(this); - DisForm_InitComboList(); - DisForm_InitComboEdit(); - return FWL_Error::Succeeded; -} - void IFWL_ComboBox::DisForm_InitComboList() { if (m_pListBox) return; @@ -739,18 +731,18 @@ void IFWL_ComboBox::DisForm_InitComboList() { prop.m_dwStates = FWL_WGTSTATE_Invisible; prop.m_pDataProvider = m_pProperties->m_pDataProvider; prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pListBox.reset(new IFWL_ComboList(prop, this)); + m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, prop, this)); m_pListBox->Initialize(); } void IFWL_ComboBox::DisForm_InitComboEdit() { - if (m_pEdit) { + if (m_pEdit) return; - } + CFWL_WidgetImpProperties prop; prop.m_pParent = this; prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(new IFWL_ComboEdit(prop, this)); + m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, prop, this)); m_pEdit->Initialize(); m_pEdit->SetOuter(this); } @@ -807,9 +799,9 @@ FX_BOOL IFWL_ComboBox::DisForm_IsDropListShowed() { FWL_Error IFWL_ComboBox::DisForm_ModifyStylesEx(uint32_t dwStylesExAdded, uint32_t dwStylesExRemoved) { - if (!m_pEdit) { + if (!m_pEdit) DisForm_InitComboEdit(); - } + bool bAddDropDown = !!(dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown); bool bDelDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown); dwStylesExRemoved &= ~FWL_STYLEEXT_CMB_DropDown; @@ -1376,7 +1368,7 @@ void CFWL_ComboProxyImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, } void CFWL_ComboProxyImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - IFWL_App* pApp = m_pForm->GetOwnerApp(); + const IFWL_App* pApp = m_pForm->GetOwnerApp(); if (!pApp) return; @@ -1397,7 +1389,7 @@ void CFWL_ComboProxyImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { void CFWL_ComboProxyImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { m_bLButtonDown = FALSE; - IFWL_App* pApp = m_pForm->GetOwnerApp(); + const IFWL_App* pApp = m_pForm->GetOwnerApp(); if (!pApp) return; diff --git a/xfa/fwl/core/ifwl_combobox.h b/xfa/fwl/core/ifwl_combobox.h index 15db0490ee..268a4b516b 100644 --- a/xfa/fwl/core/ifwl_combobox.h +++ b/xfa/fwl/core/ifwl_combobox.h @@ -84,13 +84,14 @@ class IFWL_ComboBoxDP : public IFWL_ListBoxDP { class IFWL_ComboBox : public IFWL_Widget { public: - explicit IFWL_ComboBox(const CFWL_WidgetImpProperties& properties); + explicit IFWL_ComboBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_ComboBox() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error ModifyStylesEx(uint32_t dwStylesExAdded, uint32_t dwStylesExRemoved) override; @@ -156,7 +157,6 @@ class IFWL_ComboBox : public IFWL_Widget { void ReSetListItemAlignment(); void ProcessSelChanged(FX_BOOL bLButtonUp); void InitProxyForm(); - FWL_Error DisForm_Initialize(); void DisForm_InitComboList(); void DisForm_InitComboEdit(); void DisForm_ShowDropList(FX_BOOL bActivate); diff --git a/xfa/fwl/core/ifwl_comboedit.cpp b/xfa/fwl/core/ifwl_comboedit.cpp index 62b2d5a1de..fc28536d50 100644 --- a/xfa/fwl/core/ifwl_comboedit.cpp +++ b/xfa/fwl/core/ifwl_comboedit.cpp @@ -9,9 +9,10 @@ #include "xfa/fde/cfde_txtedtengine.h" #include "xfa/fwl/core/ifwl_combobox.h" -IFWL_ComboEdit::IFWL_ComboEdit(const CFWL_WidgetImpProperties& properties, +IFWL_ComboEdit::IFWL_ComboEdit(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Edit(properties, pOuter) { + : IFWL_Edit(app, properties, pOuter) { m_pOuter = static_cast<IFWL_ComboBox*>(pOuter); } diff --git a/xfa/fwl/core/ifwl_comboedit.h b/xfa/fwl/core/ifwl_comboedit.h index fceba2f528..f4a529a186 100644 --- a/xfa/fwl/core/ifwl_comboedit.h +++ b/xfa/fwl/core/ifwl_comboedit.h @@ -15,7 +15,8 @@ class IFWL_ComboBox; class IFWL_ComboEdit : public IFWL_Edit { public: - IFWL_ComboEdit(const CFWL_WidgetImpProperties& properties, + IFWL_ComboEdit(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); void ClearSelected(); diff --git a/xfa/fwl/core/ifwl_combolist.cpp b/xfa/fwl/core/ifwl_combolist.cpp index d34a55bcc2..6538bff20d 100644 --- a/xfa/fwl/core/ifwl_combolist.cpp +++ b/xfa/fwl/core/ifwl_combolist.cpp @@ -9,18 +9,19 @@ #include "xfa/fwl/core/ifwl_combobox.h" #include "xfa/fwl/core/ifwl_comboedit.h" -IFWL_ComboList::IFWL_ComboList(const CFWL_WidgetImpProperties& properties, +IFWL_ComboList::IFWL_ComboList(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_ListBox(properties, pOuter), m_bNotifyOwner(TRUE) { + : IFWL_ListBox(app, properties, pOuter), m_bNotifyOwner(TRUE) { ASSERT(pOuter); } -FWL_Error IFWL_ComboList::Initialize() { - if (IFWL_ListBox::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; +void IFWL_ComboList::Initialize() { + IFWL_ListBox::Initialize(); + + // Delete the delegate that was created by IFWL_ListBox::Initialize ... delete m_pDelegate; m_pDelegate = new CFWL_ComboListImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_ComboList::Finalize() { diff --git a/xfa/fwl/core/ifwl_combolist.h b/xfa/fwl/core/ifwl_combolist.h index d88a5956c2..eaa03e36d4 100644 --- a/xfa/fwl/core/ifwl_combolist.h +++ b/xfa/fwl/core/ifwl_combolist.h @@ -13,11 +13,12 @@ class IFWL_ComboList : public IFWL_ListBox { public: - IFWL_ComboList(const CFWL_WidgetImpProperties& properties, + IFWL_ComboList(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); // IFWL_Widget - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; int32_t MatchItem(const CFX_WideString& wsMatch); diff --git a/xfa/fwl/core/ifwl_dataprovider.h b/xfa/fwl/core/ifwl_dataprovider.h index 9a3634c40e..53c6ec4055 100644 --- a/xfa/fwl/core/ifwl_dataprovider.h +++ b/xfa/fwl/core/ifwl_dataprovider.h @@ -15,6 +15,7 @@ class IFWL_Widget; class IFWL_DataProvider { public: virtual ~IFWL_DataProvider() {} + virtual FWL_Error GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) = 0; }; diff --git a/xfa/fwl/core/ifwl_datetimecalendar.cpp b/xfa/fwl/core/ifwl_datetimecalendar.cpp index 0e095b9424..e85bdfb606 100644 --- a/xfa/fwl/core/ifwl_datetimecalendar.cpp +++ b/xfa/fwl/core/ifwl_datetimecalendar.cpp @@ -11,16 +11,17 @@ #include "xfa/fwl/core/ifwl_formproxy.h" IFWL_DateTimeCalendar::IFWL_DateTimeCalendar( + const IFWL_App* app, const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_MonthCalendar(properties, pOuter) {} + : IFWL_MonthCalendar(app, properties, pOuter) {} -FWL_Error IFWL_DateTimeCalendar::Initialize() { - if (IFWL_MonthCalendar::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; +void IFWL_DateTimeCalendar::Initialize() { + IFWL_MonthCalendar::Initialize(); + + // Delete delegated set by IFWL_MonthCalendar::Initialize. delete m_pDelegate; m_pDelegate = new CFWL_DateTimeCalendarImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_DateTimeCalendar::Finalize() { diff --git a/xfa/fwl/core/ifwl_datetimecalendar.h b/xfa/fwl/core/ifwl_datetimecalendar.h index c106e7f86d..3d856fd578 100644 --- a/xfa/fwl/core/ifwl_datetimecalendar.h +++ b/xfa/fwl/core/ifwl_datetimecalendar.h @@ -11,11 +11,12 @@ class IFWL_DateTimeCalendar : public IFWL_MonthCalendar { public: - IFWL_DateTimeCalendar(const CFWL_WidgetImpProperties& properties, + IFWL_DateTimeCalendar(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); // IFWL_MonthCalendar - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; protected: diff --git a/xfa/fwl/core/ifwl_datetimeedit.cpp b/xfa/fwl/core/ifwl_datetimeedit.cpp index 0097691c42..9d0a08bed6 100644 --- a/xfa/fwl/core/ifwl_datetimeedit.cpp +++ b/xfa/fwl/core/ifwl_datetimeedit.cpp @@ -9,15 +9,17 @@ #include "xfa/fwl/core/cfwl_widgetmgr.h" #include "xfa/fwl/core/ifwl_datetimepicker.h" -IFWL_DateTimeEdit::IFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties, +IFWL_DateTimeEdit::IFWL_DateTimeEdit(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Edit(properties, pOuter) {} + : IFWL_Edit(app, properties, pOuter) {} -FWL_Error IFWL_DateTimeEdit::Initialize() { +void IFWL_DateTimeEdit::Initialize() { + IFWL_Edit::Initialize(); + + // Delete delegate set by IFWL_Edit::Initialize. + delete m_pDelegate; m_pDelegate = new CFWL_DateTimeEditImpDelegate(this); - if (IFWL_Edit::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - return FWL_Error::Succeeded; } void IFWL_DateTimeEdit::Finalize() { diff --git a/xfa/fwl/core/ifwl_datetimeedit.h b/xfa/fwl/core/ifwl_datetimeedit.h index 2429e98a4c..cbb118329a 100644 --- a/xfa/fwl/core/ifwl_datetimeedit.h +++ b/xfa/fwl/core/ifwl_datetimeedit.h @@ -15,11 +15,12 @@ class IFWL_DateTimeEdit : public IFWL_Edit { public: - IFWL_DateTimeEdit(const CFWL_WidgetImpProperties& properties, + IFWL_DateTimeEdit(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); // IFWL_Edit - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; protected: diff --git a/xfa/fwl/core/ifwl_datetimepicker.cpp b/xfa/fwl/core/ifwl_datetimepicker.cpp index ef13d71cf1..9292a5acfa 100644 --- a/xfa/fwl/core/ifwl_datetimepicker.cpp +++ b/xfa/fwl/core/ifwl_datetimepicker.cpp @@ -24,8 +24,9 @@ const int kDateTimePickerHeight = 20; } // namespace IFWL_DateTimePicker::IFWL_DateTimePicker( + const IFWL_App* app, const CFWL_WidgetImpProperties& properties) - : IFWL_Widget(properties, nullptr), + : IFWL_Widget(app, properties, nullptr), m_iBtnState(1), m_iYear(-1), m_iMonth(-1), @@ -36,15 +37,11 @@ IFWL_DateTimePicker::IFWL_DateTimePicker( IFWL_DateTimePicker::~IFWL_DateTimePicker() {} -FWL_Type IFWL_DateTimePicker::GetClassID() const { - return FWL_Type::DateTimePicker; -} - -FWL_Error IFWL_DateTimePicker::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; +void IFWL_DateTimePicker::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_DateTimePickerImpDelegate(this); + m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; CFWL_WidgetImpProperties propMonth; propMonth.m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border; @@ -53,7 +50,7 @@ FWL_Error IFWL_DateTimePicker::Initialize() { propMonth.m_pParent = this; propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pMonthCal.reset(new IFWL_DateTimeCalendar(propMonth, this)); + m_pMonthCal.reset(new IFWL_DateTimeCalendar(m_pOwnerApp, propMonth, this)); m_pMonthCal->Initialize(); CFX_RectF rtMonthCal; m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); @@ -63,11 +60,10 @@ FWL_Error IFWL_DateTimePicker::Initialize() { propEdit.m_pParent = this; propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(new IFWL_DateTimeEdit(propEdit, this)); + m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, propEdit, this)); m_pEdit->Initialize(); RegisterEventTarget(m_pMonthCal.get()); RegisterEventTarget(m_pEdit.get()); - return FWL_Error::Succeeded; } void IFWL_DateTimePicker::Finalize() { @@ -84,6 +80,10 @@ void IFWL_DateTimePicker::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_DateTimePicker::GetClassID() const { + return FWL_Type::DateTimePicker; +} + FWL_Error IFWL_DateTimePicker::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (m_pWidgetMgr->IsFormDisabled()) { @@ -328,7 +328,7 @@ void IFWL_DateTimePicker::DrawDropDownButton(CFX_Graphics* pGraphics, prop.m_dwStyleExes |= FWL_STYLEEXE_SPB_Vert; prop.m_pParent = this; prop.m_rtWidget = m_rtBtn; - IFWL_SpinButton* pSpin = new IFWL_SpinButton(prop); + IFWL_SpinButton* pSpin = new IFWL_SpinButton(m_pOwnerApp, prop); pSpin->Initialize(); } else { CFWL_ThemeBackground param; @@ -463,7 +463,7 @@ void IFWL_DateTimePicker::InitProxyForm() { propForm.m_dwStates = FWL_WGTSTATE_Invisible; propForm.m_pOwner = this; - m_pForm.reset(new IFWL_FormProxy(propForm, m_pMonthCal.get())); + m_pForm.reset(new IFWL_FormProxy(m_pOwnerApp, propForm, m_pMonthCal.get())); m_pForm->Initialize(); m_pMonthCal->SetParent(m_pForm.get()); } @@ -493,7 +493,7 @@ void IFWL_DateTimePicker::DisForm_InitDateTimeCalendar() { propMonth.m_pDataProvider = &m_MonthCalendarDP; propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pMonthCal.reset(new IFWL_DateTimeCalendar(propMonth, this)); + m_pMonthCal.reset(new IFWL_DateTimeCalendar(m_pOwnerApp, propMonth, this)); m_pMonthCal->Initialize(); CFX_RectF rtMonthCal; m_pMonthCal->GetWidgetRect(rtMonthCal, TRUE); @@ -509,7 +509,7 @@ void IFWL_DateTimePicker::DisForm_InitDateTimeEdit() { propEdit.m_pParent = this; propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider; - m_pEdit.reset(new IFWL_DateTimeEdit(propEdit, this)); + m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, propEdit, this)); m_pEdit->Initialize(); } diff --git a/xfa/fwl/core/ifwl_datetimepicker.h b/xfa/fwl/core/ifwl_datetimepicker.h index 4113e9b83e..476eb09b3c 100644 --- a/xfa/fwl/core/ifwl_datetimepicker.h +++ b/xfa/fwl/core/ifwl_datetimepicker.h @@ -62,13 +62,14 @@ class IFWL_DateTimePickerDP : public IFWL_DataProvider { class IFWL_DateTimePicker : public IFWL_Widget { public: - explicit IFWL_DateTimePicker(const CFWL_WidgetImpProperties& properties); + explicit IFWL_DateTimePicker(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_DateTimePicker() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy) override; diff --git a/xfa/fwl/core/ifwl_edit.cpp b/xfa/fwl/core/ifwl_edit.cpp index e911aa0c8b..b826bd2f02 100644 --- a/xfa/fwl/core/ifwl_edit.cpp +++ b/xfa/fwl/core/ifwl_edit.cpp @@ -51,9 +51,10 @@ void AddSquigglyPath(CFX_Path* pPathData, } // namespace -IFWL_Edit::IFWL_Edit(const CFWL_WidgetImpProperties& properties, +IFWL_Edit::IFWL_Edit(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Widget(properties, pOuter), + : IFWL_Widget(app, properties, pOuter), m_fVAlignOffset(0.0f), m_fScrollOffsetX(0.0f), m_fScrollOffsetY(0.0f), @@ -79,21 +80,14 @@ IFWL_Edit::~IFWL_Edit() { ClearRecord(); } -FWL_Type IFWL_Edit::GetClassID() const { - return FWL_Type::Edit; -} - -FWL_Error IFWL_Edit::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; +void IFWL_Edit::Initialize() { + IFWL_Widget::Initialize(); if (!m_pDelegate) m_pDelegate = new CFWL_EditImpDelegate(this); InitCaret(); if (!m_pEdtEngine) InitEngine(); - - return FWL_Error::Succeeded; } void IFWL_Edit::Finalize() { @@ -109,6 +103,10 @@ void IFWL_Edit::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_Edit::GetClassID() const { + return FWL_Type::Edit; +} + FWL_Error IFWL_Edit::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); @@ -1474,7 +1472,7 @@ void IFWL_Edit::InitScrollBar(FX_BOOL bVert) { prop.m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; prop.m_pParent = this; prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; - IFWL_ScrollBar* pScrollBar = new IFWL_ScrollBar(prop, this); + IFWL_ScrollBar* pScrollBar = new IFWL_ScrollBar(m_pOwnerApp, prop, this); pScrollBar->Initialize(); (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)->reset(pScrollBar); } @@ -1572,7 +1570,7 @@ void IFWL_Edit::InitCaret() { if (!m_pCaret) { if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) { CFWL_WidgetImpProperties prop; - m_pCaret.reset(new IFWL_Caret(prop, this)); + m_pCaret.reset(new IFWL_Caret(m_pOwnerApp, prop, this)); m_pCaret->Initialize(); m_pCaret->SetParent(this); m_pCaret->SetStates(m_pProperties->m_dwStates); diff --git a/xfa/fwl/core/ifwl_edit.h b/xfa/fwl/core/ifwl_edit.h index 7c0c451cf9..a03431b6ee 100644 --- a/xfa/fwl/core/ifwl_edit.h +++ b/xfa/fwl/core/ifwl_edit.h @@ -106,13 +106,15 @@ class IFWL_EditDP : public IFWL_DataProvider {}; class IFWL_Edit : public IFWL_Widget { public: - IFWL_Edit(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); + IFWL_Edit(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, + IFWL_Widget* pOuter); ~IFWL_Edit() override; // IFWL_Widget: - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error SetWidgetRect(const CFX_RectF& rect) override; FWL_Error Update() override; diff --git a/xfa/fwl/core/ifwl_form.cpp b/xfa/fwl/core/ifwl_form.cpp index 5aaa566ff4..e46328b634 100644 --- a/xfa/fwl/core/ifwl_form.cpp +++ b/xfa/fwl/core/ifwl_form.cpp @@ -36,9 +36,10 @@ RestoreInfo::RestoreInfo() {} RestoreInfo::~RestoreInfo() {} -IFWL_Form::IFWL_Form(const CFWL_WidgetImpProperties& properties, +IFWL_Form::IFWL_Form(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Widget(properties, pOuter), + : IFWL_Widget(app, properties, pOuter), m_pCloseBox(nullptr), m_pMinBox(nullptr), m_pMaxBox(nullptr), @@ -69,23 +70,12 @@ IFWL_Form::~IFWL_Form() { RemoveSysButtons(); } -FWL_Type IFWL_Form::GetClassID() const { - return FWL_Type::Form; -} +void IFWL_Form::Initialize() { + IFWL_Widget::Initialize(); -FX_BOOL IFWL_Form::IsInstance(const CFX_WideStringC& wsClass) const { - if (wsClass == CFX_WideStringC(FWL_CLASS_Form)) - return TRUE; - return IFWL_Widget::IsInstance(wsClass); -} - -FWL_Error IFWL_Form::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; RegisterForm(); RegisterEventTarget(); m_pDelegate = new CFWL_FormImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_Form::Finalize() { @@ -96,6 +86,16 @@ void IFWL_Form::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_Form::GetClassID() const { + return FWL_Type::Form; +} + +FX_BOOL IFWL_Form::IsInstance(const CFX_WideStringC& wsClass) const { + if (wsClass == CFX_WideStringC(FWL_CLASS_Form)) + return TRUE; + return IFWL_Widget::IsInstance(wsClass); +} + FWL_Error IFWL_Form::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Reset(); @@ -118,7 +118,7 @@ FWL_Error IFWL_Form::GetClientRect(CFX_RectF& rect) { } #ifdef FWL_UseMacSystemBorder rect = m_rtRelative; - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return FWL_Error::Indefinite; @@ -345,7 +345,7 @@ FWL_Error IFWL_Form::SetFormSize(FWL_FORMSIZE eFormSize) { } IFWL_Widget* IFWL_Form::DoModal() { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return nullptr; @@ -376,7 +376,7 @@ FWL_Error IFWL_Form::EndDoModal() { m_bDoModalFlag = FALSE; #if (_FX_OS_ == _FX_MACOSX_) m_pNoteLoop->EndModalLoop(); - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return FWL_Error::Indefinite; @@ -416,7 +416,7 @@ void IFWL_Form::SetSubFocus(IFWL_Widget* pWidget) { } void IFWL_Form::ShowChildWidget(IFWL_Widget* pParent) { - IFWL_App* pApp = FWL_GetApp(); + const IFWL_App* pApp = pParent->GetOwnerApp(); if (!pApp) return; @@ -588,7 +588,7 @@ void IFWL_Form::GetEdgeRect(CFX_RectF& rtEdge) { } void IFWL_Form::SetWorkAreaRect() { m_rtRestore = m_pProperties->m_rtWidget; - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return; m_bSetMaximize = TRUE; @@ -669,7 +669,7 @@ void IFWL_Form::ReSetSysBtn() { } } void IFWL_Form::RegisterForm() { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; @@ -681,7 +681,7 @@ void IFWL_Form::RegisterForm() { pDriver->RegisterForm(this); } void IFWL_Form::UnRegisterForm() { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; @@ -707,7 +707,7 @@ FX_BOOL IFWL_Form::HasIcon() { return !!pData->GetIcon(this, FALSE); } void IFWL_Form::UpdateIcon() { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return; IFWL_FormDP* pData = @@ -720,7 +720,7 @@ void IFWL_Form::UpdateIcon() { m_pSmallIcon = pSmallIcon; } void IFWL_Form::UpdateCaption() { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return; IFWL_DataProvider* pData = m_pProperties->m_pDataProvider; @@ -810,7 +810,7 @@ void CFWL_FormImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { switch (pMessage->GetClassID()) { case CFWL_MessageType::Activate: { m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Deactivated; - IFWL_App* pApp = m_pOwner->GetOwnerApp(); + const IFWL_App* pApp = m_pOwner->GetOwnerApp(); CFWL_NoteDriver* pDriver = static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); IFWL_Widget* pSubFocus = m_pOwner->GetSubFocus(); @@ -822,7 +822,7 @@ void CFWL_FormImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { } case CFWL_MessageType::Deactivate: { m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Deactivated; - IFWL_App* pApp = m_pOwner->GetOwnerApp(); + const IFWL_App* pApp = m_pOwner->GetOwnerApp(); CFWL_NoteDriver* pDriver = static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); IFWL_Widget* pSubFocus = m_pOwner->GetSubFocus(); @@ -872,7 +872,7 @@ void CFWL_FormImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { break; } case CFWL_MessageType::Size: { - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = m_pOwner->GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return; diff --git a/xfa/fwl/core/ifwl_form.h b/xfa/fwl/core/ifwl_form.h index ee1f360629..4203177d11 100644 --- a/xfa/fwl/core/ifwl_form.h +++ b/xfa/fwl/core/ifwl_form.h @@ -85,15 +85,16 @@ class IFWL_FormDP : public IFWL_DataProvider { class IFWL_Form : public IFWL_Widget { public: - IFWL_Form(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); + IFWL_Form(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, + IFWL_Widget* pOuter); ~IFWL_Form() override; // IFWL_Widget + void Initialize() override; + void Finalize() override; FWL_Type GetClassID() const override; FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const override; - FWL_Error Initialize() override; - void Finalize() override; - FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error GetClientRect(CFX_RectF& rect) override; FWL_Error Update() override; diff --git a/xfa/fwl/core/ifwl_formproxy.cpp b/xfa/fwl/core/ifwl_formproxy.cpp index 9a00bf3e8f..16cd90813d 100644 --- a/xfa/fwl/core/ifwl_formproxy.cpp +++ b/xfa/fwl/core/ifwl_formproxy.cpp @@ -8,12 +8,24 @@ #include "xfa/fwl/core/fwl_noteimp.h" -IFWL_FormProxy::IFWL_FormProxy(const CFWL_WidgetImpProperties& properties, +IFWL_FormProxy::IFWL_FormProxy(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Form(properties, pOuter) {} + : IFWL_Form(app, properties, pOuter) {} IFWL_FormProxy::~IFWL_FormProxy() {} +void IFWL_FormProxy::Initialize() { + IFWL_Widget::Initialize(); + m_pDelegate = new CFWL_FormProxyImpDelegate(this); +} + +void IFWL_FormProxy::Finalize() { + delete m_pDelegate; + m_pDelegate = nullptr; + IFWL_Widget::Finalize(); +} + FWL_Type IFWL_FormProxy::GetClassID() const { return FWL_Type::FormProxy; } @@ -25,19 +37,6 @@ FX_BOOL IFWL_FormProxy::IsInstance(const CFX_WideStringC& wsClass) const { return IFWL_Form::IsInstance(wsClass); } -FWL_Error IFWL_FormProxy::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - m_pDelegate = new CFWL_FormProxyImpDelegate(this); - return FWL_Error::Succeeded; -} - -void IFWL_FormProxy::Finalize() { - delete m_pDelegate; - m_pDelegate = nullptr; - IFWL_Widget::Finalize(); -} - FWL_Error IFWL_FormProxy::Update() { return FWL_Error::Succeeded; } diff --git a/xfa/fwl/core/ifwl_formproxy.h b/xfa/fwl/core/ifwl_formproxy.h index 3bc614c4d4..15288ce62f 100644 --- a/xfa/fwl/core/ifwl_formproxy.h +++ b/xfa/fwl/core/ifwl_formproxy.h @@ -14,15 +14,16 @@ class CFWL_FormProxyImpDelegate; class IFWL_FormProxy : public IFWL_Form { public: - IFWL_FormProxy(const CFWL_WidgetImpProperties& properties, + IFWL_FormProxy(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); ~IFWL_FormProxy() override; // IFWL_Widget + void Initialize() override; + void Finalize() override; FWL_Type GetClassID() const override; FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const override; - FWL_Error Initialize() override; - void Finalize() override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix = nullptr) override; diff --git a/xfa/fwl/core/ifwl_listbox.cpp b/xfa/fwl/core/ifwl_listbox.cpp index bb6d86d384..05cc64bb90 100644 --- a/xfa/fwl/core/ifwl_listbox.cpp +++ b/xfa/fwl/core/ifwl_listbox.cpp @@ -20,9 +20,10 @@ const int kItemTextMargin = 2; } // namespace -IFWL_ListBox::IFWL_ListBox(const CFWL_WidgetImpProperties& properties, +IFWL_ListBox::IFWL_ListBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Widget(properties, pOuter), + : IFWL_Widget(app, properties, pOuter), m_dwTTOStyles(0), m_iTTOAligns(0), m_hAnchor(nullptr), @@ -36,16 +37,9 @@ IFWL_ListBox::IFWL_ListBox(const CFWL_WidgetImpProperties& properties, IFWL_ListBox::~IFWL_ListBox() {} -FWL_Type IFWL_ListBox::GetClassID() const { - return FWL_Type::ListBox; -} - -FWL_Error IFWL_ListBox::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_ListBox::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_ListBoxImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_ListBox::Finalize() { @@ -59,6 +53,10 @@ void IFWL_ListBox::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_ListBox::GetClassID() const { + return FWL_Type::ListBox; +} + FWL_Error IFWL_ListBox::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); @@ -898,7 +896,7 @@ void IFWL_ListBox::InitScrollBar(FX_BOOL bVert) { prop.m_dwStates = FWL_WGTSTATE_Invisible; prop.m_pParent = this; prop.m_pThemeProvider = m_pScrollBarTP; - IFWL_ScrollBar* pScrollBar = new IFWL_ScrollBar(prop, this); + IFWL_ScrollBar* pScrollBar = new IFWL_ScrollBar(m_pOwnerApp, prop, this); pScrollBar->Initialize(); (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)->reset(pScrollBar); } diff --git a/xfa/fwl/core/ifwl_listbox.h b/xfa/fwl/core/ifwl_listbox.h index 036aee2d62..a5efceb5b0 100644 --- a/xfa/fwl/core/ifwl_listbox.h +++ b/xfa/fwl/core/ifwl_listbox.h @@ -102,13 +102,15 @@ class IFWL_ListBoxCompare { class IFWL_ListBox : public IFWL_Widget { public: - IFWL_ListBox(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); + IFWL_ListBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, + IFWL_Widget* pOuter); ~IFWL_ListBox() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy) override; diff --git a/xfa/fwl/core/ifwl_monthcalendar.cpp b/xfa/fwl/core/ifwl_monthcalendar.cpp index 69e7588245..43e90a23a5 100644 --- a/xfa/fwl/core/ifwl_monthcalendar.cpp +++ b/xfa/fwl/core/ifwl_monthcalendar.cpp @@ -118,9 +118,10 @@ CFX_WideString* GetCapacityForMonth(IFWL_ThemeProvider* pTheme, } // namespace IFWL_MonthCalendar::IFWL_MonthCalendar( + const IFWL_App* app, const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Widget(properties, pOuter), + : IFWL_Widget(app, properties, pOuter), m_bInit(FALSE), m_pDateTime(new CFX_DateTime), m_iCurYear(2011), @@ -151,16 +152,9 @@ IFWL_MonthCalendar::~IFWL_MonthCalendar() { m_arrSelDays.RemoveAll(); } -FWL_Type IFWL_MonthCalendar::GetClassID() const { - return FWL_Type::MonthCalendar; -} - -FWL_Error IFWL_MonthCalendar::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_MonthCalendar::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_MonthCalendarImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_MonthCalendar::Finalize() { @@ -169,6 +163,10 @@ void IFWL_MonthCalendar::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_MonthCalendar::GetClassID() const { + return FWL_Type::MonthCalendar; +} + FWL_Error IFWL_MonthCalendar::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { diff --git a/xfa/fwl/core/ifwl_monthcalendar.h b/xfa/fwl/core/ifwl_monthcalendar.h index b9376b82c3..793eaa8eea 100644 --- a/xfa/fwl/core/ifwl_monthcalendar.h +++ b/xfa/fwl/core/ifwl_monthcalendar.h @@ -52,14 +52,15 @@ class IFWL_MonthCalendarDP : public IFWL_DataProvider { class IFWL_MonthCalendar : public IFWL_Widget { public: - IFWL_MonthCalendar(const CFWL_WidgetImpProperties& properties, + IFWL_MonthCalendar(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); ~IFWL_MonthCalendar() override; // FWL_WidgetImp - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, diff --git a/xfa/fwl/core/ifwl_picturebox.cpp b/xfa/fwl/core/ifwl_picturebox.cpp index 9e0e0b8623..20ab54a37c 100644 --- a/xfa/fwl/core/ifwl_picturebox.cpp +++ b/xfa/fwl/core/ifwl_picturebox.cpp @@ -9,8 +9,9 @@ #include "xfa/fwl/core/cfwl_picturebox.h" #include "xfa/fwl/core/fwl_noteimp.h" -IFWL_PictureBox::IFWL_PictureBox(const CFWL_WidgetImpProperties& properties) - : IFWL_Widget(properties, nullptr), +IFWL_PictureBox::IFWL_PictureBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties) + : IFWL_Widget(app, properties, nullptr), m_bTop(FALSE), m_bVCenter(FALSE), m_bButton(FALSE) { @@ -21,16 +22,9 @@ IFWL_PictureBox::IFWL_PictureBox(const CFWL_WidgetImpProperties& properties) IFWL_PictureBox::~IFWL_PictureBox() {} -FWL_Type IFWL_PictureBox::GetClassID() const { - return FWL_Type::PictureBox; -} - -FWL_Error IFWL_PictureBox::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_PictureBox::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_PictureBoxImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_PictureBox::Finalize() { @@ -39,6 +33,10 @@ void IFWL_PictureBox::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_PictureBox::GetClassID() const { + return FWL_Type::PictureBox; +} + FWL_Error IFWL_PictureBox::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); diff --git a/xfa/fwl/core/ifwl_picturebox.h b/xfa/fwl/core/ifwl_picturebox.h index 434b3cff29..24c6e7edfd 100644 --- a/xfa/fwl/core/ifwl_picturebox.h +++ b/xfa/fwl/core/ifwl_picturebox.h @@ -44,13 +44,14 @@ class IFWL_PictureBoxDP : public IFWL_DataProvider { class IFWL_PictureBox : public IFWL_Widget { public: - explicit IFWL_PictureBox(const CFWL_WidgetImpProperties& properties); + explicit IFWL_PictureBox(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_PictureBox() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, diff --git a/xfa/fwl/core/ifwl_pushbutton.cpp b/xfa/fwl/core/ifwl_pushbutton.cpp index 6040ae1117..b9d11d9e5a 100644 --- a/xfa/fwl/core/ifwl_pushbutton.cpp +++ b/xfa/fwl/core/ifwl_pushbutton.cpp @@ -14,8 +14,9 @@ #include "xfa/fwl/core/ifwl_pushbutton.h" #include "xfa/fwl/core/ifwl_themeprovider.h" -IFWL_PushButton::IFWL_PushButton(const CFWL_WidgetImpProperties& properties) - : IFWL_Widget(properties, nullptr), +IFWL_PushButton::IFWL_PushButton(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties) + : IFWL_Widget(app, properties, nullptr), m_bBtnDown(FALSE), m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), m_iTTOAlign(FDE_TTOALIGNMENT_Center) { @@ -25,16 +26,9 @@ IFWL_PushButton::IFWL_PushButton(const CFWL_WidgetImpProperties& properties) IFWL_PushButton::~IFWL_PushButton() {} -FWL_Type IFWL_PushButton::GetClassID() const { - return FWL_Type::PushButton; -} - -FWL_Error IFWL_PushButton::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_PushButton::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_PushButtonImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_PushButton::Finalize() { @@ -43,6 +37,10 @@ void IFWL_PushButton::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_PushButton::GetClassID() const { + return FWL_Type::PushButton; +} + FWL_Error IFWL_PushButton::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); diff --git a/xfa/fwl/core/ifwl_pushbutton.h b/xfa/fwl/core/ifwl_pushbutton.h index 8906aa898f..6a4d28ddba 100644 --- a/xfa/fwl/core/ifwl_pushbutton.h +++ b/xfa/fwl/core/ifwl_pushbutton.h @@ -40,13 +40,14 @@ class IFWL_PushButtonDP : public IFWL_DataProvider { class IFWL_PushButton : public IFWL_Widget { public: - IFWL_PushButton(const CFWL_WidgetImpProperties& properties); + IFWL_PushButton(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_PushButton() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; void SetStates(uint32_t dwStates, FX_BOOL bSet = TRUE) override; FWL_Error Update() override; diff --git a/xfa/fwl/core/ifwl_scrollbar.cpp b/xfa/fwl/core/ifwl_scrollbar.cpp index a8e277324f..27a131f45d 100644 --- a/xfa/fwl/core/ifwl_scrollbar.cpp +++ b/xfa/fwl/core/ifwl_scrollbar.cpp @@ -16,9 +16,10 @@ #define FWL_SCROLLBAR_Elapse 500 #define FWL_SCROLLBAR_MinThumb 5 -IFWL_ScrollBar::IFWL_ScrollBar(const CFWL_WidgetImpProperties& properties, +IFWL_ScrollBar::IFWL_ScrollBar(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Widget(properties, pOuter), + : IFWL_Widget(app, properties, pOuter), m_pTimerInfo(nullptr), m_fRangeMin(0), m_fRangeMax(-1), @@ -42,7 +43,8 @@ IFWL_ScrollBar::IFWL_ScrollBar(const CFWL_WidgetImpProperties& properties, m_fButtonLen(0), m_bMinSize(FALSE), m_bCustomLayout(false), - m_fMinThumb(FWL_SCROLLBAR_MinThumb) { + m_fMinThumb(FWL_SCROLLBAR_MinThumb), + m_Timer(this) { m_rtClient.Reset(); m_rtThumb.Reset(); m_rtMinBtn.Reset(); @@ -53,16 +55,9 @@ IFWL_ScrollBar::IFWL_ScrollBar(const CFWL_WidgetImpProperties& properties, IFWL_ScrollBar::~IFWL_ScrollBar() {} -FWL_Type IFWL_ScrollBar::GetClassID() const { - return FWL_Type::ScrollBar; -} - -FWL_Error IFWL_ScrollBar::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_ScrollBar::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_ScrollBarImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_ScrollBar::Finalize() { @@ -71,6 +66,10 @@ void IFWL_ScrollBar::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_ScrollBar::GetClassID() const { + return FWL_Type::ScrollBar; +} + FWL_Error IFWL_ScrollBar::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); @@ -196,14 +195,6 @@ FX_BOOL IFWL_ScrollBar::DoScroll(uint32_t dwCode, FX_FLOAT fPos) { return OnScroll(dwCode, fPos); } -void IFWL_ScrollBar::Run(IFWL_TimerInfo* pTimerInfo) { - if (m_pTimerInfo) - m_pTimerInfo->StopTimer(); - - if (!SendEvent()) - m_pTimerInfo = StartTimer(0, true); -} - FWL_Error IFWL_ScrollBar::SetOuter(IFWL_Widget* pOuter) { m_pOuter = pOuter; return FWL_Error::Succeeded; @@ -660,7 +651,8 @@ void CFWL_ScrollBarImpDelegate::OnLButtonDown(uint32_t dwFlags, } } if (!m_pOwner->SendEvent()) - m_pOwner->m_pTimerInfo = m_pOwner->StartTimer(FWL_SCROLLBAR_Elapse, true); + m_pOwner->m_pTimerInfo = + m_pOwner->m_Timer.StartTimer(FWL_SCROLLBAR_Elapse, true); } void CFWL_ScrollBarImpDelegate::OnLButtonUp(uint32_t dwFlags, @@ -774,3 +766,15 @@ void CFWL_ScrollBarImpDelegate::DoMouseHover(int32_t iItem, iState = CFWL_PartState_Hovered; m_pOwner->Repaint(&rtItem); } + +IFWL_ScrollBar::Timer::Timer(IFWL_ScrollBar* pToolTip) : IFWL_Timer(pToolTip) {} + +void IFWL_ScrollBar::Timer::Run(IFWL_TimerInfo* pTimerInfo) { + IFWL_ScrollBar* pButton = static_cast<IFWL_ScrollBar*>(m_pWidget); + + if (pButton->m_pTimerInfo) + pButton->m_pTimerInfo->StopTimer(); + + if (!pButton->SendEvent()) + pButton->m_pTimerInfo = StartTimer(0, true); +} diff --git a/xfa/fwl/core/ifwl_scrollbar.h b/xfa/fwl/core/ifwl_scrollbar.h index 95fe7739fe..346649c11d 100644 --- a/xfa/fwl/core/ifwl_scrollbar.h +++ b/xfa/fwl/core/ifwl_scrollbar.h @@ -36,24 +36,22 @@ enum FWL_SCBCODE { class IFWL_ScrollBarDP : public IFWL_DataProvider {}; -class IFWL_ScrollBar : public IFWL_Widget, public IFWL_Timer { +class IFWL_ScrollBar : public IFWL_Widget { public: - IFWL_ScrollBar(const CFWL_WidgetImpProperties& properties, + IFWL_ScrollBar(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); ~IFWL_ScrollBar() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix = nullptr) override; - // IFWL_Timer - void Run(IFWL_TimerInfo* pTimerInfo) override; - FX_BOOL IsVertical(); FWL_Error GetRange(FX_FLOAT& fMin, FX_FLOAT& fMax); FWL_Error SetRange(FX_FLOAT fMin, FX_FLOAT fMax); @@ -71,6 +69,16 @@ class IFWL_ScrollBar : public IFWL_Widget, public IFWL_Timer { protected: friend class CFWL_ScrollBarImpDelegate; + class Timer : public IFWL_Timer { + public: + explicit Timer(IFWL_ScrollBar* pToolTip); + ~Timer() override {} + + void Run(IFWL_TimerInfo* pTimerInfo) override; + }; + friend class IFWL_ScrollBar::Timer; + + IFWL_ScrollBar(); void DrawTrack(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, FX_BOOL bLower = TRUE, @@ -124,9 +132,7 @@ class IFWL_ScrollBar : public IFWL_Widget, public IFWL_Timer { CFX_RectF m_rtMaxTrack; bool m_bCustomLayout; FX_FLOAT m_fMinThumb; - - protected: - IFWL_ScrollBar(); + IFWL_ScrollBar::Timer m_Timer; }; class CFWL_ScrollBarImpDelegate : public CFWL_WidgetImpDelegate { diff --git a/xfa/fwl/core/ifwl_spinbutton.cpp b/xfa/fwl/core/ifwl_spinbutton.cpp index d94a240e59..992ea7358c 100644 --- a/xfa/fwl/core/ifwl_spinbutton.cpp +++ b/xfa/fwl/core/ifwl_spinbutton.cpp @@ -23,13 +23,15 @@ const int kElapseTime = 200; } // namespace -IFWL_SpinButton::IFWL_SpinButton(const CFWL_WidgetImpProperties& properties) - : IFWL_Widget(properties, nullptr), +IFWL_SpinButton::IFWL_SpinButton(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties) + : IFWL_Widget(app, properties, nullptr), m_dwUpState(CFWL_PartState_Normal), m_dwDnState(CFWL_PartState_Normal), m_iButtonIndex(0), m_bLButtonDwn(FALSE), - m_pTimerInfo(nullptr) { + m_pTimerInfo(nullptr), + m_Timer(this) { m_rtClient.Reset(); m_rtUpButton.Reset(); m_rtDnButton.Reset(); @@ -38,16 +40,9 @@ IFWL_SpinButton::IFWL_SpinButton(const CFWL_WidgetImpProperties& properties) IFWL_SpinButton::~IFWL_SpinButton() {} -FWL_Type IFWL_SpinButton::GetClassID() const { - return FWL_Type::SpinButton; -} - -FWL_Error IFWL_SpinButton::Initialize() { - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; - +void IFWL_SpinButton::Initialize() { + IFWL_Widget::Initialize(); m_pDelegate = new CFWL_SpinButtonImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_SpinButton::Finalize() { @@ -56,6 +51,10 @@ void IFWL_SpinButton::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_SpinButton::GetClassID() const { + return FWL_Type::SpinButton; +} + FWL_Error IFWL_SpinButton::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, kMinWidth, kMinHeight); @@ -123,16 +122,6 @@ FWL_Error IFWL_SpinButton::DrawWidget(CFX_Graphics* pGraphics, return FWL_Error::Succeeded; } -void IFWL_SpinButton::Run(IFWL_TimerInfo* pTimerInfo) { - if (!m_pTimerInfo) - return; - - CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = this; - wmPosChanged.m_bUp = m_iButtonIndex == 0; - DispatchEvent(&wmPosChanged); -} - FWL_Error IFWL_SpinButton::EnableButton(FX_BOOL bEnable, FX_BOOL bUp) { if (bUp) { if (bEnable) { @@ -283,7 +272,7 @@ void CFWL_SpinButtonImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { m_pOwner->DispatchEvent(&wmPosChanged); m_pOwner->Repaint(bUpPress ? &m_pOwner->m_rtUpButton : &m_pOwner->m_rtDnButton); - m_pOwner->m_pTimerInfo = m_pOwner->StartTimer(kElapseTime, true); + m_pOwner->m_pTimerInfo = m_pOwner->m_Timer.StartTimer(kElapseTime, true); } void CFWL_SpinButtonImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { @@ -421,3 +410,18 @@ void CFWL_SpinButtonImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { m_pOwner->Repaint(bUpEnable ? &m_pOwner->m_rtUpButton : &m_pOwner->m_rtDnButton); } + +IFWL_SpinButton::Timer::Timer(IFWL_SpinButton* pToolTip) + : IFWL_Timer(pToolTip) {} + +void IFWL_SpinButton::Timer::Run(IFWL_TimerInfo* pTimerInfo) { + IFWL_SpinButton* pButton = static_cast<IFWL_SpinButton*>(m_pWidget); + + if (!pButton->m_pTimerInfo) + return; + + CFWL_EvtSpbClick wmPosChanged; + wmPosChanged.m_pSrcTarget = pButton; + wmPosChanged.m_bUp = pButton->m_iButtonIndex == 0; + pButton->DispatchEvent(&wmPosChanged); +} diff --git a/xfa/fwl/core/ifwl_spinbutton.h b/xfa/fwl/core/ifwl_spinbutton.h index e5e6211917..ad03098dc6 100644 --- a/xfa/fwl/core/ifwl_spinbutton.h +++ b/xfa/fwl/core/ifwl_spinbutton.h @@ -20,30 +20,37 @@ class CFWL_WidgetImpProperties; FWL_EVENT_DEF(CFWL_EvtSpbClick, CFWL_EventType::Click, FX_BOOL m_bUp;) -class IFWL_SpinButton : public IFWL_Widget, public IFWL_Timer { +class IFWL_SpinButton : public IFWL_Widget { public: - explicit IFWL_SpinButton(const CFWL_WidgetImpProperties& properties); + explicit IFWL_SpinButton(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties); ~IFWL_SpinButton() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy) override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix = nullptr) override; - // IFWL_Timer - void Run(IFWL_TimerInfo* pTimerInfo) override; - FWL_Error EnableButton(FX_BOOL bEnable, FX_BOOL bUp = TRUE); FX_BOOL IsButtonEnable(FX_BOOL bUp = TRUE); protected: friend class CFWL_SpinButtonImpDelegate; + class Timer : public IFWL_Timer { + public: + explicit Timer(IFWL_SpinButton* pToolTip); + ~Timer() override {} + + void Run(IFWL_TimerInfo* pTimerInfo) override; + }; + friend class IFWL_SpinButton::Timer; + void DrawUpButton(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix); @@ -59,6 +66,7 @@ class IFWL_SpinButton : public IFWL_Widget, public IFWL_Timer { int32_t m_iButtonIndex; FX_BOOL m_bLButtonDwn; IFWL_TimerInfo* m_pTimerInfo; + IFWL_SpinButton::Timer m_Timer; }; class CFWL_SpinButtonImpDelegate : public CFWL_WidgetImpDelegate { diff --git a/xfa/fwl/core/ifwl_themeprovider.h b/xfa/fwl/core/ifwl_themeprovider.h index d64b6f038d..166d8a72ca 100644 --- a/xfa/fwl/core/ifwl_themeprovider.h +++ b/xfa/fwl/core/ifwl_themeprovider.h @@ -20,6 +20,7 @@ class IFWL_Widget; class IFWL_ThemeProvider { public: virtual ~IFWL_ThemeProvider() {} + virtual void DrawBackground(CFWL_ThemeBackground* pParams) = 0; virtual void DrawText(CFWL_ThemeText* pParams) = 0; virtual void* GetCapacity(CFWL_ThemePart* pThemePart, diff --git a/xfa/fwl/core/ifwl_timer.cpp b/xfa/fwl/core/ifwl_timer.cpp index 941113e7ca..3f81eec476 100644 --- a/xfa/fwl/core/ifwl_timer.cpp +++ b/xfa/fwl/core/ifwl_timer.cpp @@ -7,10 +7,15 @@ #include "xfa/fwl/core/ifwl_adaptertimermgr.h" #include "xfa/fwl/core/ifwl_app.h" #include "xfa/fwl/core/ifwl_timer.h" +#include "xfa/fwl/core/ifwl_widget.h" #include "xfa/fxfa/xfa_ffapp.h" IFWL_TimerInfo* IFWL_Timer::StartTimer(uint32_t dwElapse, bool bImmediately) { - CXFA_FFApp* pAdapterNative = FWL_GetAdapterNative(); + const IFWL_App* pApp = m_pWidget->GetOwnerApp(); + if (!pApp) + return nullptr; + + CXFA_FFApp* pAdapterNative = pApp->GetAdapterNative(); if (!pAdapterNative) return nullptr; @@ -24,13 +29,5 @@ IFWL_TimerInfo* IFWL_Timer::StartTimer(uint32_t dwElapse, bool bImmediately) { } FWL_Error IFWL_TimerInfo::StopTimer() { - CXFA_FFApp* pAdapterNative = FWL_GetAdapterNative(); - if (!pAdapterNative) - return FWL_Error::Indefinite; - - IFWL_AdapterTimerMgr* pAdapterTimerMgr = pAdapterNative->GetTimerMgr(); - if (!pAdapterTimerMgr) - return FWL_Error::Indefinite; - - return pAdapterTimerMgr->Stop(this); + return m_pMgr->Stop(this); } diff --git a/xfa/fwl/core/ifwl_timer.h b/xfa/fwl/core/ifwl_timer.h index 9c1c56dd73..7562085060 100644 --- a/xfa/fwl/core/ifwl_timer.h +++ b/xfa/fwl/core/ifwl_timer.h @@ -10,19 +10,33 @@ #include "core/fxcrt/fx_system.h" #include "xfa/fwl/core/fwl_error.h" +class IFWL_AdapterTimerMgr; class IFWL_TimerInfo; +class IFWL_Widget; class IFWL_Timer { public: + explicit IFWL_Timer(IFWL_Widget* parent) : m_pWidget(parent) {} virtual ~IFWL_Timer() {} + virtual void Run(IFWL_TimerInfo* hTimer) = 0; IFWL_TimerInfo* StartTimer(uint32_t dwElapse, bool bImmediately); + + protected: + IFWL_Widget* m_pWidget; // Not owned. }; class IFWL_TimerInfo { public: + explicit IFWL_TimerInfo(IFWL_AdapterTimerMgr* mgr) : m_pMgr(mgr) { + ASSERT(mgr); + } virtual ~IFWL_TimerInfo() {} + FWL_Error StopTimer(); + + protected: + IFWL_AdapterTimerMgr* m_pMgr; // Not owned. }; #endif // XFA_FWL_CORE_IFWL_TIMER_H_ diff --git a/xfa/fwl/core/ifwl_tooltip.cpp b/xfa/fwl/core/ifwl_tooltip.cpp index a9b9085010..815670ed75 100644 --- a/xfa/fwl/core/ifwl_tooltip.cpp +++ b/xfa/fwl/core/ifwl_tooltip.cpp @@ -15,35 +15,31 @@ #include "xfa/fwl/core/ifwl_tooltip.h" #include "xfa/fwl/theme/cfwl_widgettp.h" -IFWL_ToolTip::IFWL_ToolTip(const CFWL_WidgetImpProperties& properties, +IFWL_ToolTip::IFWL_ToolTip(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_Form(properties, pOuter), + : IFWL_Form(app, properties, pOuter), m_bBtnDown(FALSE), m_dwTTOStyles(FDE_TTOSTYLE_SingleLine), m_iTTOAlign(FDE_TTOALIGNMENT_Center), m_pTimerInfoShow(nullptr), - m_pTimerInfoHide(nullptr) { + m_pTimerInfoHide(nullptr), + m_TimerShow(this), + m_TimerHide(this) { m_rtClient.Set(0, 0, 0, 0); m_rtCaption.Set(0, 0, 0, 0); m_rtAnchor.Set(0, 0, 0, 0); - m_TimerShow.m_pToolTip = this; - m_TimerHide.m_pToolTip = this; } IFWL_ToolTip::~IFWL_ToolTip() {} -FWL_Type IFWL_ToolTip::GetClassID() const { - return FWL_Type::ToolTip; -} +void IFWL_ToolTip::Initialize() { + IFWL_Widget::Initialize(); -FWL_Error IFWL_ToolTip::Initialize() { m_pProperties->m_dwStyles |= FWL_WGTSTYLE_Popup; m_pProperties->m_dwStyles &= ~FWL_WGTSTYLE_Child; - if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) - return FWL_Error::Indefinite; m_pDelegate = new CFWL_ToolTipImpDelegate(this); - return FWL_Error::Succeeded; } void IFWL_ToolTip::Finalize() { @@ -52,6 +48,10 @@ void IFWL_ToolTip::Finalize() { IFWL_Widget::Finalize(); } +FWL_Type IFWL_ToolTip::GetClassID() const { + return FWL_Type::ToolTip; +} + FWL_Error IFWL_ToolTip::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { if (bAutoSize) { rect.Set(0, 0, 0, 0); @@ -238,25 +238,24 @@ void IFWL_ToolTip::RefreshToolTipPos() { } } -IFWL_ToolTip::CFWL_ToolTipTimer::CFWL_ToolTipTimer(IFWL_ToolTip* pToolTip) - : m_pToolTip(pToolTip) {} +IFWL_ToolTip::Timer::Timer(IFWL_ToolTip* pToolTip) : IFWL_Timer(pToolTip) {} + +void IFWL_ToolTip::Timer::Run(IFWL_TimerInfo* pTimerInfo) { + IFWL_ToolTip* pToolTip = static_cast<IFWL_ToolTip*>(m_pWidget); -void IFWL_ToolTip::CFWL_ToolTipTimer::Run(IFWL_TimerInfo* pTimerInfo) { - if (m_pToolTip->m_pTimerInfoShow == pTimerInfo && - m_pToolTip->m_pTimerInfoShow) { - if (m_pToolTip->GetStates() & FWL_WGTSTATE_Invisible) { - m_pToolTip->SetStates(FWL_WGTSTATE_Invisible, FALSE); - m_pToolTip->RefreshToolTipPos(); - m_pToolTip->m_pTimerInfoShow->StopTimer(); - m_pToolTip->m_pTimerInfoShow = nullptr; + if (pToolTip->m_pTimerInfoShow == pTimerInfo && pToolTip->m_pTimerInfoShow) { + if (pToolTip->GetStates() & FWL_WGTSTATE_Invisible) { + pToolTip->SetStates(FWL_WGTSTATE_Invisible, FALSE); + pToolTip->RefreshToolTipPos(); + pToolTip->m_pTimerInfoShow->StopTimer(); + pToolTip->m_pTimerInfoShow = nullptr; return; } } - if (m_pToolTip->m_pTimerInfoHide == pTimerInfo && - m_pToolTip->m_pTimerInfoHide) { - m_pToolTip->SetStates(FWL_WGTSTATE_Invisible, TRUE); - m_pToolTip->m_pTimerInfoHide->StopTimer(); - m_pToolTip->m_pTimerInfoHide = nullptr; + if (pToolTip->m_pTimerInfoHide == pTimerInfo && pToolTip->m_pTimerInfoHide) { + pToolTip->SetStates(FWL_WGTSTATE_Invisible, TRUE); + pToolTip->m_pTimerInfoHide->StopTimer(); + pToolTip->m_pTimerInfoHide = nullptr; } } diff --git a/xfa/fwl/core/ifwl_tooltip.h b/xfa/fwl/core/ifwl_tooltip.h index 4aed7d8f7f..fcf1637714 100644 --- a/xfa/fwl/core/ifwl_tooltip.h +++ b/xfa/fwl/core/ifwl_tooltip.h @@ -34,13 +34,15 @@ class IFWL_ToolTipDP : public IFWL_DataProvider { class IFWL_ToolTip : public IFWL_Form { public: - IFWL_ToolTip(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); + IFWL_ToolTip(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, + IFWL_Widget* pOuter); ~IFWL_ToolTip() override; // IFWL_Widget - FWL_Type GetClassID() const override; - FWL_Error Initialize() override; + void Initialize() override; void Finalize() override; + FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE) override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, @@ -54,18 +56,15 @@ class IFWL_ToolTip : public IFWL_Form { protected: friend class CFWL_ToolTipImpDelegate; - friend class CFWL_ToolTipTimer; - class CFWL_ToolTipTimer : public IFWL_Timer { + class Timer : public IFWL_Timer { public: - CFWL_ToolTipTimer() {} - explicit CFWL_ToolTipTimer(IFWL_ToolTip* pToolTip); - ~CFWL_ToolTipTimer() override {} + explicit Timer(IFWL_ToolTip* pToolTip); + ~Timer() override {} void Run(IFWL_TimerInfo* pTimerInfo) override; - - IFWL_ToolTip* m_pToolTip; }; + friend class IFWL_ToolTip::Timer; void DrawBkground(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, @@ -84,8 +83,8 @@ class IFWL_ToolTip : public IFWL_Form { CFX_RectF m_rtAnchor; IFWL_TimerInfo* m_pTimerInfoShow; IFWL_TimerInfo* m_pTimerInfoHide; - CFWL_ToolTipTimer m_TimerShow; - CFWL_ToolTipTimer m_TimerHide; + IFWL_ToolTip::Timer m_TimerShow; + IFWL_ToolTip::Timer m_TimerHide; }; class CFWL_ToolTipImpDelegate : public CFWL_WidgetImpDelegate { diff --git a/xfa/fwl/core/ifwl_widget.cpp b/xfa/fwl/core/ifwl_widget.cpp index 5ec738f8cc..eb8b1281e9 100644 --- a/xfa/fwl/core/ifwl_widget.cpp +++ b/xfa/fwl/core/ifwl_widget.cpp @@ -24,9 +24,11 @@ #define FWL_STYLEEXT_MNU_Vert (1L << 0) -IFWL_Widget::IFWL_Widget(const CFWL_WidgetImpProperties& properties, +IFWL_Widget::IFWL_Widget(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : m_pWidgetMgr(CFWL_WidgetMgr::GetInstance()), + : m_pOwnerApp(app), + m_pWidgetMgr(app->GetWidgetMgr()), m_pProperties(new CFWL_WidgetImpProperties(properties)), m_pDelegate(nullptr), m_pCurDelegate(nullptr), @@ -40,17 +42,7 @@ IFWL_Widget::IFWL_Widget(const CFWL_WidgetImpProperties& properties, IFWL_Widget::~IFWL_Widget() {} -FWL_Error IFWL_Widget::Initialize() { - IFWL_App* pApp = FWL_GetApp(); - if (!pApp) - return FWL_Error::Indefinite; - - CXFA_FFApp* pAdapter = pApp->GetAdapterNative(); - if (!pAdapter) - return FWL_Error::Indefinite; - - SetOwnerApp(FWL_GetApp()); - +void IFWL_Widget::Initialize() { IFWL_Widget* pParent = m_pProperties->m_pParent; m_pWidgetMgr->InsertWidget(pParent, this); if (!IsChild()) { @@ -58,7 +50,6 @@ FWL_Error IFWL_Widget::Initialize() { if (pOwner) m_pWidgetMgr->SetOwner(pOwner, this); } - return FWL_Error::Succeeded; } void IFWL_Widget::Finalize() { @@ -198,7 +189,7 @@ void IFWL_Widget::SetStates(uint32_t dwStates, FX_BOOL bSet) { CFWL_NoteDriver* noteDriver = static_cast<CFWL_NoteDriver*>(GetOwnerApp()->GetNoteDriver()); - CFWL_WidgetMgr* widgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* widgetMgr = GetOwnerApp()->GetWidgetMgr(); noteDriver->NotifyTargetHide(this); IFWL_Widget* child = widgetMgr->GetFirstChildWidget(this); while (child) { @@ -374,15 +365,10 @@ IFWL_WidgetDelegate* IFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { return pOldDelegate; } -IFWL_App* IFWL_Widget::GetOwnerApp() const { +const IFWL_App* IFWL_Widget::GetOwnerApp() const { return m_pOwnerApp; } -FWL_Error IFWL_Widget::SetOwnerApp(IFWL_App* pOwnerApp) { - m_pOwnerApp = pOwnerApp; - return FWL_Error::Succeeded; -} - uint32_t IFWL_Widget::GetEventKey() const { return m_nEventKey; } @@ -570,7 +556,7 @@ void IFWL_Widget::SetFocus(FX_BOOL bFocus) { if (m_pWidgetMgr->IsFormDisabled()) return; - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; @@ -588,7 +574,7 @@ void IFWL_Widget::SetFocus(FX_BOOL bFocus) { } void IFWL_Widget::SetGrab(FX_BOOL bSet) { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; CFWL_NoteDriver* pDriver = @@ -704,7 +690,7 @@ FX_BOOL IFWL_Widget::GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy) { void IFWL_Widget::RegisterEventTarget(IFWL_Widget* pEventSource, uint32_t dwFilter) { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; @@ -716,7 +702,7 @@ void IFWL_Widget::RegisterEventTarget(IFWL_Widget* pEventSource, } void IFWL_Widget::UnregisterEventTarget() { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; @@ -745,7 +731,7 @@ void IFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { pDelegate->OnProcessEvent(pEvent); return; } - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; CFWL_NoteDriver* pNoteDriver = pApp->GetNoteDriver(); @@ -817,7 +803,7 @@ void IFWL_Widget::DrawEdge(CFX_Graphics* pGraphics, } void IFWL_Widget::NotifyDriver() { - IFWL_App* pApp = GetOwnerApp(); + const IFWL_App* pApp = GetOwnerApp(); if (!pApp) return; @@ -833,7 +819,7 @@ CFX_SizeF IFWL_Widget::GetOffsetFromParent(IFWL_Widget* pParent) { if (pParent == this) return CFX_SizeF(); - CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); + CFWL_WidgetMgr* pWidgetMgr = GetOwnerApp()->GetWidgetMgr(); if (!pWidgetMgr) return CFX_SizeF(); diff --git a/xfa/fwl/core/ifwl_widget.h b/xfa/fwl/core/ifwl_widget.h index 6cb241d363..38a8d337f6 100644 --- a/xfa/fwl/core/ifwl_widget.h +++ b/xfa/fwl/core/ifwl_widget.h @@ -66,7 +66,7 @@ class IFWL_Widget { public: virtual ~IFWL_Widget(); - virtual FWL_Error Initialize(); + virtual void Initialize(); virtual void Finalize(); virtual FWL_Type GetClassID() const = 0; virtual FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; @@ -114,9 +114,9 @@ class IFWL_Widget { virtual IFWL_ThemeProvider* GetThemeProvider(); virtual FWL_Error SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); virtual IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate); - virtual IFWL_App* GetOwnerApp() const; - FWL_Error SetOwnerApp(IFWL_App* pOwnerApp); + const IFWL_App* GetOwnerApp() const; + CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent); uint32_t GetEventKey() const; @@ -130,7 +130,9 @@ class IFWL_Widget { protected: friend class CFWL_WidgetImpDelegate; - IFWL_Widget(const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter); + IFWL_Widget(const IFWL_App* app, + const CFWL_WidgetImpProperties& properties, + IFWL_Widget* pOuter); FX_BOOL IsEnabled() const; FX_BOOL IsVisible() const; @@ -199,8 +201,8 @@ class IFWL_Widget { FX_BOOL IsParent(IFWL_Widget* pParent); + const IFWL_App* const m_pOwnerApp; CFWL_WidgetMgr* const m_pWidgetMgr; - IFWL_App* m_pOwnerApp; std::unique_ptr<CFWL_WidgetImpProperties> m_pProperties; IFWL_WidgetDelegate* m_pDelegate; IFWL_WidgetDelegate* m_pCurDelegate; diff --git a/xfa/fwl/core/ifwl_widgetdelegate.h b/xfa/fwl/core/ifwl_widgetdelegate.h index 820fb6b1c4..b013375da8 100644 --- a/xfa/fwl/core/ifwl_widgetdelegate.h +++ b/xfa/fwl/core/ifwl_widgetdelegate.h @@ -19,6 +19,7 @@ class CFX_Matrix; class IFWL_WidgetDelegate { public: virtual ~IFWL_WidgetDelegate() {} + virtual void OnProcessMessage(CFWL_Message* pMessage) = 0; virtual void OnProcessEvent(CFWL_Event* pEvent) = 0; virtual void OnDrawWidget(CFX_Graphics* pGraphics, diff --git a/xfa/fxfa/app/xfa_ffapp.cpp b/xfa/fxfa/app/xfa_ffapp.cpp index 06cad02253..0924fb9e05 100644 --- a/xfa/fxfa/app/xfa_ffapp.cpp +++ b/xfa/fxfa/app/xfa_ffapp.cpp @@ -10,6 +10,7 @@ #include <utility> #include "xfa/fgas/font/fgas_stdfontmgr.h" +#include "xfa/fwl/core/fwl_noteimp.h" #include "xfa/fwl/core/cfwl_widgetmgr.h" #include "xfa/fxfa/app/xfa_fwladapter.h" #include "xfa/fxfa/app/xfa_fwltheme.h" @@ -73,7 +74,6 @@ CXFA_FFApp::CXFA_FFApp(IXFA_AppProvider* pProvider) : m_pProvider(pProvider), m_pWidgetMgrDelegate(nullptr), m_pFWLApp(new IFWL_App(this)) { - FWL_SetApp(m_pFWLApp.get()); CXFA_TimeZoneProvider::Create(); } @@ -147,3 +147,7 @@ CXFA_FWLAdapterWidgetMgr* CXFA_FFApp::GetWidgetMgr( IFWL_AdapterTimerMgr* CXFA_FFApp::GetTimerMgr() const { return m_pProvider->GetTimerMgr(); } + +void CXFA_FFApp::ClearEventTargets() { + m_pFWLApp->GetNoteDriver()->ClearEventTargets(FALSE); +} diff --git a/xfa/fxfa/app/xfa_ffbarcode.cpp b/xfa/fxfa/app/xfa_ffbarcode.cpp index 6a5478049b..e684d9c8b9 100644 --- a/xfa/fxfa/app/xfa_ffbarcode.cpp +++ b/xfa/fxfa/app/xfa_ffbarcode.cpp @@ -119,15 +119,17 @@ XFA_LPCBARCODETYPEENUMINFO XFA_GetBarcodeTypeByName( CXFA_FFBarcode::CXFA_FFBarcode(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) : CXFA_FFTextEdit(pPageView, pDataAcc) {} + CXFA_FFBarcode::~CXFA_FFBarcode() {} + FX_BOOL CXFA_FFBarcode::LoadWidget() { - CFWL_Barcode* pFWLBarcode = new CFWL_Barcode; - pFWLBarcode->Initialize(); + CFWL_Barcode* pFWLBarcode = new CFWL_Barcode(GetFWLApp()); + pFWLBarcode->Initialize(nullptr); m_pNormalWidget = pFWLBarcode; m_pNormalWidget->SetLayoutItem(this); IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); diff --git a/xfa/fxfa/app/xfa_ffcheckbutton.cpp b/xfa/fxfa/app/xfa_ffcheckbutton.cpp index cde99183d7..7756506975 100644 --- a/xfa/fxfa/app/xfa_ffcheckbutton.cpp +++ b/xfa/fxfa/app/xfa_ffcheckbutton.cpp @@ -23,14 +23,17 @@ CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView, : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) { m_rtCheckBox.Set(0, 0, 0, 0); } + CXFA_FFCheckButton::~CXFA_FFCheckButton() {} + FX_BOOL CXFA_FFCheckButton::LoadWidget() { - CFWL_CheckBox* pCheckBox = new CFWL_CheckBox; - pCheckBox->Initialize(); + CFWL_CheckBox* pCheckBox = new CFWL_CheckBox(GetFWLApp()); + pCheckBox->Initialize(nullptr); m_pNormalWidget = pCheckBox; m_pNormalWidget->SetLayoutItem(this); + IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); if (m_pDataAcc->IsRadioButton()) { diff --git a/xfa/fxfa/app/xfa_ffchoicelist.cpp b/xfa/fxfa/app/xfa_ffchoicelist.cpp index 699f890d52..26efee94b1 100644 --- a/xfa/fxfa/app/xfa_ffchoicelist.cpp +++ b/xfa/fxfa/app/xfa_ffchoicelist.cpp @@ -22,22 +22,25 @@ CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) {} + CXFA_FFListBox::~CXFA_FFListBox() { if (m_pNormalWidget) { IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->UnregisterEventTarget(pWidget); } } + FX_BOOL CXFA_FFListBox::LoadWidget() { - CFWL_ListBox* pListBox = new CFWL_ListBox; - pListBox->Initialize(); + CFWL_ListBox* pListBox = new CFWL_ListBox(GetFWLApp()); + pListBox->Initialize(nullptr); pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground, 0xFFFFFFFF); m_pNormalWidget = (CFWL_Widget*)pListBox; m_pNormalWidget->SetLayoutItem(this); + IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); @@ -227,12 +230,13 @@ FX_BOOL CXFA_FFComboBox::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) { return FALSE; } FX_BOOL CXFA_FFComboBox::LoadWidget() { - CFWL_ComboBox* pComboBox = new CFWL_ComboBox; - pComboBox->Initialize(); + CFWL_ComboBox* pComboBox = new CFWL_ComboBox(GetFWLApp()); + pComboBox->Initialize(nullptr); m_pNormalWidget = (CFWL_Widget*)pComboBox; m_pNormalWidget->SetLayoutItem(this); + IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp index 494091b2f9..cfb5e9fc47 100644 --- a/xfa/fxfa/app/xfa_ffdoc.cpp +++ b/xfa/fxfa/app/xfa_ffdoc.cpp @@ -359,8 +359,7 @@ FX_BOOL CXFA_FFDoc::CloseDoc() { delete pair.second.pDibSource; m_HashToDibDpiMap.clear(); - - FWL_GetApp()->GetNoteDriver()->ClearEventTargets(FALSE); + m_pApp->ClearEventTargets(); return TRUE; } void CXFA_FFDoc::SetDocType(uint32_t dwType) { diff --git a/xfa/fxfa/app/xfa_ffimageedit.cpp b/xfa/fxfa/app/xfa_ffimageedit.cpp index da56d3e052..e8dd6fde79 100644 --- a/xfa/fxfa/app/xfa_ffimageedit.cpp +++ b/xfa/fxfa/app/xfa_ffimageedit.cpp @@ -23,14 +23,13 @@ CXFA_FFImageEdit::~CXFA_FFImageEdit() { CXFA_FFImageEdit::UnloadWidget(); } FX_BOOL CXFA_FFImageEdit::LoadWidget() { - CFWL_PictureBox* pPictureBox = new CFWL_PictureBox; - if (pPictureBox) { - pPictureBox->Initialize(); - } + CFWL_PictureBox* pPictureBox = new CFWL_PictureBox(GetFWLApp()); + pPictureBox->Initialize(nullptr); m_pNormalWidget = pPictureBox; m_pNormalWidget->SetLayoutItem(this); + IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pOldDelegate = pPictureBox->SetDelegate(this); CXFA_FFField::LoadWidget(); diff --git a/xfa/fxfa/app/xfa_ffpushbutton.cpp b/xfa/fxfa/app/xfa_ffpushbutton.cpp index a7f0c46792..0b00a7b12b 100644 --- a/xfa/fxfa/app/xfa_ffpushbutton.cpp +++ b/xfa/fxfa/app/xfa_ffpushbutton.cpp @@ -52,14 +52,14 @@ void CXFA_FFPushButton::RenderWidget(CFX_Graphics* pGS, } FX_BOOL CXFA_FFPushButton::LoadWidget() { ASSERT(!m_pNormalWidget); - CFWL_PushButton* pPushButton = new CFWL_PushButton; - pPushButton->Initialize(); + CFWL_PushButton* pPushButton = new CFWL_PushButton(GetFWLApp()); + pPushButton->Initialize(nullptr); m_pOldDelegate = pPushButton->SetDelegate(this); m_pNormalWidget = pPushButton; m_pNormalWidget->SetLayoutItem(this); IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pNormalWidget->LockUpdate(); UpdateWidgetProperty(); diff --git a/xfa/fxfa/app/xfa_fftextedit.cpp b/xfa/fxfa/app/xfa_fftextedit.cpp index eb2a55898d..8bb6ea4c03 100644 --- a/xfa/fxfa/app/xfa_fftextedit.cpp +++ b/xfa/fxfa/app/xfa_fftextedit.cpp @@ -27,20 +27,23 @@ CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) {} + CXFA_FFTextEdit::~CXFA_FFTextEdit() { if (m_pNormalWidget) { IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->UnregisterEventTarget(pWidget); } } + FX_BOOL CXFA_FFTextEdit::LoadWidget() { - CFWL_Edit* pFWLEdit = new CFWL_Edit; - pFWLEdit->Initialize(); + CFWL_Edit* pFWLEdit = new CFWL_Edit(GetFWLApp()); + pFWLEdit->Initialize(nullptr); m_pNormalWidget = pFWLEdit; m_pNormalWidget->SetLayoutItem(this); + IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pWidget, pWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); @@ -436,12 +439,13 @@ CXFA_FFNumericEdit::CXFA_FFNumericEdit(CXFA_FFPageView* pPageView, : CXFA_FFTextEdit(pPageView, pDataAcc) {} CXFA_FFNumericEdit::~CXFA_FFNumericEdit() {} FX_BOOL CXFA_FFNumericEdit::LoadWidget() { - CFWL_Edit* pWidget = new CFWL_Edit; - pWidget->Initialize(); + CFWL_Edit* pWidget = new CFWL_Edit(GetFWLApp()); + pWidget->Initialize(nullptr); m_pNormalWidget = pWidget; + IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); m_pNormalWidget->SetLayoutItem(this); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); @@ -508,14 +512,17 @@ FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget, CXFA_FFPasswordEdit::CXFA_FFPasswordEdit(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) : CXFA_FFTextEdit(pPageView, pDataAcc) {} + CXFA_FFPasswordEdit::~CXFA_FFPasswordEdit() {} + FX_BOOL CXFA_FFPasswordEdit::LoadWidget() { - CFWL_Edit* pWidget = new CFWL_Edit; - pWidget->Initialize(); + CFWL_Edit* pWidget = new CFWL_Edit(GetFWLApp()); + pWidget->Initialize(nullptr); m_pNormalWidget = pWidget; m_pNormalWidget->SetLayoutItem(this); + IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); @@ -576,12 +583,12 @@ FX_BOOL CXFA_FFDateTimeEdit::PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) { return FALSE; } FX_BOOL CXFA_FFDateTimeEdit::LoadWidget() { - CFWL_DateTimePicker* pWidget = new CFWL_DateTimePicker; - pWidget->Initialize(); + CFWL_DateTimePicker* pWidget = new CFWL_DateTimePicker(GetFWLApp()); + pWidget->Initialize(nullptr); m_pNormalWidget = pWidget; m_pNormalWidget->SetLayoutItem(this); IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); - CFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); + CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver(); pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); m_pOldDelegate = m_pNormalWidget->SetDelegate(this); m_pNormalWidget->LockUpdate(); diff --git a/xfa/fxfa/app/xfa_ffwidget.cpp b/xfa/fxfa/app/xfa_ffwidget.cpp index c0c559aaf5..a21fbcab62 100644 --- a/xfa/fxfa/app/xfa_ffwidget.cpp +++ b/xfa/fxfa/app/xfa_ffwidget.cpp @@ -44,6 +44,11 @@ CXFA_FFPageView* CXFA_FFWidget::GetPageView() { void CXFA_FFWidget::SetPageView(CXFA_FFPageView* pPageView) { m_pPageView = pPageView; } + +const IFWL_App* CXFA_FFWidget::GetFWLApp() { + return GetPageView()->GetDocView()->GetDoc()->GetApp()->GetFWLApp(); +} + void CXFA_FFWidget::GetWidgetRect(CFX_RectF& rtWidget) { if ((m_dwStatus & XFA_WidgetStatus_RectCached) == 0) { m_dwStatus |= XFA_WidgetStatus_RectCached; diff --git a/xfa/fxfa/xfa_ffapp.h b/xfa/fxfa/xfa_ffapp.h index 543d78c2ee..7d4893e827 100644 --- a/xfa/fxfa/xfa_ffapp.h +++ b/xfa/fxfa/xfa_ffapp.h @@ -56,12 +56,15 @@ class CXFA_FFApp { CXFA_FWLTheme* GetFWLTheme(); IXFA_AppProvider* GetAppProvider() const { return m_pProvider; } + const IFWL_App* GetFWLApp() const { return m_pFWLApp.get(); } IFWL_AdapterTimerMgr* GetTimerMgr() const; CXFA_FontMgr* GetXFAFontMgr() const; CFWL_WidgetMgrDelegate* GetWidgetMgrDelegate() const { return m_pWidgetMgrDelegate; } + void ClearEventTargets(); + protected: std::unique_ptr<CXFA_FFDocHandler> m_pDocHandler; IXFA_AppProvider* const m_pProvider; diff --git a/xfa/fxfa/xfa_ffwidget.h b/xfa/fxfa/xfa_ffwidget.h index 1a09ad1fbd..c8c954d8b9 100644 --- a/xfa/fxfa/xfa_ffwidget.h +++ b/xfa/fxfa/xfa_ffwidget.h @@ -11,6 +11,7 @@ #include "core/fxcodec/fx_codec_def.h" #include "core/fxge/cfx_graphstatedata.h" +#include "xfa/fwl/core/ifwl_app.h" #include "xfa/fxfa/fxfa.h" #include "xfa/fxfa/parser/cxfa_contentlayoutitem.h" @@ -123,6 +124,7 @@ class CXFA_FFWidget : public CXFA_ContentLayoutItem { FX_BOOL IsLayoutRectEmpty(); CXFA_FFWidget* GetParent(); FX_BOOL IsAncestorOf(CXFA_FFWidget* pWidget); + const IFWL_App* GetFWLApp(); protected: virtual FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy); |