diff options
Diffstat (limited to 'xfa/fwl/core')
24 files changed, 218 insertions, 315 deletions
diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp index 70f863504d..2d59b7d5ec 100644 --- a/xfa/fwl/core/cfwl_combobox.cpp +++ b/xfa/fwl/core/cfwl_combobox.cpp @@ -300,11 +300,9 @@ void CFWL_ComboBox::SetEditText(const CFX_WideString& wsText) { m_pEdit->Update(); } -CFX_WideString CFWL_ComboBox::GetEditText(int32_t nStart, - int32_t nCount) const { - if (m_pEdit) { - return m_pEdit->GetText(nStart, nCount); - } +CFX_WideString CFWL_ComboBox::GetEditText() const { + if (m_pEdit) + return m_pEdit->GetText(); if (!m_pListBox) return L""; @@ -624,7 +622,7 @@ void CFWL_ComboBox::DisForm_ShowDropList(bool bActivate) { pComboList->ChangeSelected(m_iCurSel); FX_FLOAT fItemHeight = pComboList->CalcItemHeight(); - FX_FLOAT fBorder = GetBorderSize(); + FX_FLOAT fBorder = GetBorderSize(true); FX_FLOAT fPopupMin = 0.0f; if (iItems > 3) fPopupMin = fItemHeight * 3 + fBorder * 2; diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h index dda83486a6..812a6d0a29 100644 --- a/xfa/fwl/core/cfwl_combobox.h +++ b/xfa/fwl/core/cfwl_combobox.h @@ -77,7 +77,7 @@ class CFWL_ComboBox : public CFWL_Widget { void RemoveAll(); void SetEditText(const CFX_WideString& wsText); - CFX_WideString GetEditText(int32_t nStart = 0, int32_t nCount = -1) const; + CFX_WideString GetEditText() const; void OpenDropDownList(bool bActivate); @@ -127,6 +127,14 @@ class CFWL_ComboBox : public CFWL_Widget { void ResetEditAlignment(); void ResetListItemAlignment(); void InitProxyForm(); + void OnFocusChanged(CFWL_Message* pMsg, bool bSet); + void OnLButtonDown(CFWL_MsgMouse* pMsg); + void OnLButtonUp(CFWL_MsgMouse* pMsg); + void OnMouseMove(CFWL_MsgMouse* pMsg); + void OnMouseLeave(CFWL_MsgMouse* pMsg); + void OnKey(CFWL_MsgKey* pMsg); + void DoSubCtrlKey(CFWL_MsgKey* pMsg); + void DisForm_InitComboList(); void DisForm_InitComboEdit(); void DisForm_ShowDropList(bool bActivate); @@ -137,20 +145,12 @@ class CFWL_ComboBox : public CFWL_Widget { uint32_t dwStylesExRemoved); void DisForm_Update(); FWL_WidgetHit DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy); - void DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = nullptr); + void DisForm_DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix); void DisForm_GetBBox(CFX_RectF& rect) const; void DisForm_Layout(); - void OnFocusChanged(CFWL_Message* pMsg, bool bSet = true); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); - void OnKey(CFWL_MsgKey* pMsg); - void DoSubCtrlKey(CFWL_MsgKey* pMsg); void DisForm_OnProcessMessage(CFWL_Message* pMessage); void DisForm_OnLButtonDown(CFWL_MsgMouse* pMsg); - void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet = true); + void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet); void DisForm_OnKey(CFWL_MsgKey* pMsg); CFX_RectF m_rtClient; diff --git a/xfa/fwl/core/cfwl_datetimepicker.cpp b/xfa/fwl/core/cfwl_datetimepicker.cpp index 29aaaf0a2e..5207c9a492 100644 --- a/xfa/fwl/core/cfwl_datetimepicker.cpp +++ b/xfa/fwl/core/cfwl_datetimepicker.cpp @@ -196,9 +196,8 @@ void CFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) { DispatchEvent(&ev); } -CFX_WideString CFWL_DateTimePicker::GetEditText(int32_t nStart, - int32_t nCount) const { - return m_pEdit ? m_pEdit->GetText(nStart, nCount) : L""; +CFX_WideString CFWL_DateTimePicker::GetEditText() const { + return m_pEdit ? m_pEdit->GetText() : L""; } void CFWL_DateTimePicker::GetBBox(CFX_RectF& rect) const { diff --git a/xfa/fwl/core/cfwl_datetimepicker.h b/xfa/fwl/core/cfwl_datetimepicker.h index 985627441d..d6d47ebb2f 100644 --- a/xfa/fwl/core/cfwl_datetimepicker.h +++ b/xfa/fwl/core/cfwl_datetimepicker.h @@ -55,10 +55,10 @@ class CFWL_DateTimePicker : public CFWL_Widget { void SetCurSel(int32_t iYear, int32_t iMonth, int32_t iDay); void SetEditText(const CFX_WideString& wsText); - CFX_WideString GetEditText(int32_t nStart = 0, int32_t nCount = -1) const; + CFX_WideString GetEditText() const; int32_t CountSelRanges() const { return m_pEdit->CountSelRanges(); } - int32_t GetSelRange(int32_t nIndex, int32_t& nStart) const { + int32_t GetSelRange(int32_t nIndex, int32_t* nStart) const { return m_pEdit->GetSelRange(nIndex, nStart); } @@ -82,6 +82,11 @@ class CFWL_DateTimePicker : public CFWL_Widget { CFX_WideString& wsText); void ResetEditAlignment(); void InitProxyForm(); + void OnFocusChanged(CFWL_Message* pMsg, bool bSet); + void OnLButtonDown(CFWL_MsgMouse* pMsg); + void OnLButtonUp(CFWL_MsgMouse* pMsg); + void OnMouseMove(CFWL_MsgMouse* pMsg); + void OnMouseLeave(CFWL_MsgMouse* pMsg); bool DisForm_IsMonthCalendarVisible() const; void DisForm_ShowMonthCalendar(bool bActivate); @@ -90,14 +95,8 @@ class CFWL_DateTimePicker : public CFWL_Widget { void DisForm_Update(); void DisForm_GetWidgetRect(CFX_RectF& rect, bool bAutoSize); void DisForm_GetBBox(CFX_RectF& rect) const; - void DisForm_DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = nullptr); + void DisForm_DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix); void DisForm_OnFocusChanged(CFWL_Message* pMsg, bool bSet); - void OnFocusChanged(CFWL_Message* pMsg, bool bSet); - void OnLButtonDown(CFWL_MsgMouse* pMsg); - void OnLButtonUp(CFWL_MsgMouse* pMsg); - void OnMouseMove(CFWL_MsgMouse* pMsg); - void OnMouseLeave(CFWL_MsgMouse* pMsg); CFX_RectF m_rtBtn; CFX_RectF m_rtClient; diff --git a/xfa/fwl/core/cfwl_edit.cpp b/xfa/fwl/core/cfwl_edit.cpp index a2fee2a4e1..c5c69a3a94 100644 --- a/xfa/fwl/core/cfwl_edit.cpp +++ b/xfa/fwl/core/cfwl_edit.cpp @@ -113,7 +113,7 @@ void CFWL_Edit::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { int32_t iTextLen = m_EdtEngine.GetTextLength(); if (iTextLen > 0) { - CFX_WideString wsText = m_EdtEngine.GetText(0); + CFX_WideString wsText = m_EdtEngine.GetText(0, -1); CFX_SizeF sz = CalcTextSize( wsText, m_pProperties->m_pThemeProvider, !!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_MultiLine)); @@ -297,23 +297,23 @@ int32_t CFWL_Edit::GetTextLength() const { return m_EdtEngine.GetTextLength(); } -CFX_WideString CFWL_Edit::GetText(int32_t nStart, int32_t nCount) const { - return m_EdtEngine.GetText(nStart, nCount); +CFX_WideString CFWL_Edit::GetText() const { + return m_EdtEngine.GetText(0, -1); } void CFWL_Edit::ClearText() { m_EdtEngine.ClearText(); } -void CFWL_Edit::AddSelRange(int32_t nStart, int32_t nCount) { - m_EdtEngine.AddSelRange(nStart, nCount); +void CFWL_Edit::AddSelRange(int32_t nStart) { + m_EdtEngine.AddSelRange(nStart, -1); } int32_t CFWL_Edit::CountSelRanges() const { return m_EdtEngine.CountSelRanges(); } -int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t& nStart) const { +int32_t CFWL_Edit::GetSelRange(int32_t nIndex, int32_t* nStart) const { return m_EdtEngine.GetSelRange(nIndex, nStart); } @@ -340,13 +340,11 @@ bool CFWL_Edit::Copy(CFX_WideString& wsCopy) { return false; wsCopy.clear(); - CFX_WideString wsTemp; - int32_t nStart, nLength; + int32_t nStart; + int32_t nLength; for (int32_t i = 0; i < nCount; i++) { - nLength = m_EdtEngine.GetSelRange(i, nStart); - wsTemp = m_EdtEngine.GetText(nStart, nLength); - wsCopy += wsTemp; - wsTemp.clear(); + nLength = m_EdtEngine.GetSelRange(i, &nStart); + wsCopy += m_EdtEngine.GetText(nStart, nLength); } return true; } @@ -360,7 +358,7 @@ bool CFWL_Edit::Cut(CFX_WideString& wsCut) { CFX_WideString wsTemp; int32_t nStart, nLength; for (int32_t i = 0; i < nCount; i++) { - nLength = m_EdtEngine.GetSelRange(i, nStart); + nLength = m_EdtEngine.GetSelRange(i, &nStart); wsTemp = m_EdtEngine.GetText(nStart, nLength); wsCut += wsTemp; wsTemp.clear(); @@ -416,9 +414,7 @@ void CFWL_Edit::SetOuter(CFWL_Widget* pOuter) { m_pOuter = pOuter; } -void CFWL_Edit::On_CaretChanged(CFDE_TxtEdtEngine* pEdit, - int32_t nPage, - bool bVisible) { +void CFWL_Edit::OnCaretChanged() { if (m_rtEngine.IsEmpty()) return; if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) @@ -443,8 +439,7 @@ void CFWL_Edit::On_CaretChanged(CFDE_TxtEdtEngine* pEdit, } } -void CFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { +void CFWL_Edit::OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo) { if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask) UpdateVAlignment(); @@ -459,15 +454,13 @@ void CFWL_Edit::On_TextChanged(CFDE_TxtEdtEngine* pEdit, Repaint(&rtTemp); } -void CFWL_Edit::On_SelChanged(CFDE_TxtEdtEngine* pEdit) { +void CFWL_Edit::OnSelChanged() { CFX_RectF rtTemp; GetClientRect(rtTemp); Repaint(&rtTemp); } -bool CFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) { +bool CFWL_Edit::OnPageLoad(int32_t nPageIndex) { IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); if (!pPage) return false; @@ -476,9 +469,7 @@ bool CFWL_Edit::On_PageLoad(CFDE_TxtEdtEngine* pEdit, return true; } -bool CFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose) { +bool CFWL_Edit::OnPageUnload(int32_t nPageIndex) { IFDE_TxtEdtPage* pPage = m_EdtEngine.GetPage(nPageIndex); if (!pPage) return false; @@ -487,12 +478,11 @@ bool CFWL_Edit::On_PageUnload(CFDE_TxtEdtEngine* pEdit, return true; } -void CFWL_Edit::On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, - IFDE_TxtEdtDoRecord* pRecord) { - AddDoRecord(pRecord); +void CFWL_Edit::OnAddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord) { + AddDoRecord(std::move(pRecord)); } -bool CFWL_Edit::On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText) { +bool CFWL_Edit::OnValidate(const CFX_WideString& wsText) { CFWL_Widget* pDst = GetOuter(); if (!pDst) pDst = this; @@ -583,7 +573,7 @@ void CFWL_Edit::DrawContent(CFX_Graphics* pGraphics, CFX_RectFArray rectArr; int32_t i = 0; for (i = 0; i < nSelCount; i++) { - nCharCount = m_EdtEngine.GetSelRange(i, nCharStart); + nCharCount = m_EdtEngine.GetSelRange(i, &nCharStart); int32_t nCharEnd = nCharStart + nCharCount - 1; if (nCharEnd < nPageCharStart || nCharStart > nPageCharEnd) continue; @@ -991,7 +981,7 @@ bool CFWL_Edit::IsContentHeightOverflow() { return pPage->GetContentsBox().height > m_rtEngine.height + 1.0f; } -int32_t CFWL_Edit::AddDoRecord(IFDE_TxtEdtDoRecord* pRecord) { +int32_t CFWL_Edit::AddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord) { int32_t nCount = pdfium::CollectionSize<int32_t>(m_DoRecords); if (m_iCurRecord == nCount - 1) { if (nCount == m_iMaxRecord) { @@ -1003,7 +993,7 @@ int32_t CFWL_Edit::AddDoRecord(IFDE_TxtEdtDoRecord* pRecord) { m_DoRecords.end()); } - m_DoRecords.push_back(std::unique_ptr<IFDE_TxtEdtDoRecord>(pRecord)); + m_DoRecords.push_back(std::move(pRecord)); m_iCurRecord = pdfium::CollectionSize<int32_t>(m_DoRecords) - 1; return m_iCurRecord; } @@ -1039,7 +1029,7 @@ void CFWL_Edit::Layout() { bool bShowVertScrollbar = IsShowScrollBar(true); bool bShowHorzScrollbar = IsShowScrollBar(false); if (bShowVertScrollbar) { - InitScrollBar(); + InitVerticalScrollBar(); CFX_RectF rtVertScr; if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { @@ -1061,7 +1051,7 @@ void CFWL_Edit::Layout() { } if (bShowHorzScrollbar) { - InitScrollBar(false); + InitHorizontalScrollBar(); CFX_RectF rtHoriScr; if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { @@ -1096,7 +1086,7 @@ void CFWL_Edit::LayoutScrollBar() { pfWidth = static_cast<FX_FLOAT*>( GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; - InitScrollBar(); + InitVerticalScrollBar(); CFX_RectF rtVertScr; if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { rtVertScr.Set(m_rtClient.right() + kEditMargin, m_rtClient.top, fWidth, @@ -1123,7 +1113,7 @@ void CFWL_Edit::LayoutScrollBar() { } FX_FLOAT fWidth = pfWidth ? *pfWidth : 0; - InitScrollBar(false); + InitHorizontalScrollBar(); CFX_RectF rtHoriScr; if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_OuterScrollbar) { rtHoriScr.Set(m_rtClient.left, m_rtClient.bottom() + kEditMargin, @@ -1150,21 +1140,30 @@ void CFWL_Edit::DeviceToEngine(CFX_PointF& pt) { pt.y += m_fScrollOffsetY - m_rtEngine.top - m_fVAlignOffset; } -void CFWL_Edit::InitScrollBar(bool bVert) { - if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) +void CFWL_Edit::InitVerticalScrollBar() { + if (m_pVertScrollBar) return; auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); - prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; + prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Vert; prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; prop->m_pParent = this; prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; + m_pVertScrollBar = + pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); +} - CFWL_ScrollBar* sb = new CFWL_ScrollBar(m_pOwnerApp, std::move(prop), this); - if (bVert) - m_pVertScrollBar.reset(sb); - else - m_pHorzScrollBar.reset(sb); +void CFWL_Edit::InitHorizontalScrollBar() { + if (m_pHorzScrollBar) + return; + + auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); + prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Horz; + prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible; + prop->m_pParent = this; + prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; + m_pHorzScrollBar = + pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); } void CFWL_Edit::ShowCaret(CFX_RectF* pRect) { @@ -1232,7 +1231,7 @@ bool CFWL_Edit::ValidateNumberChar(FX_WCHAR cNum) { if (!m_bSetRange) return true; - CFX_WideString wsText = m_EdtEngine.GetText(0); + CFX_WideString wsText = m_EdtEngine.GetText(0, -1); if (wsText.IsEmpty()) { if (cNum == L'0') return false; diff --git a/xfa/fwl/core/cfwl_edit.h b/xfa/fwl/core/cfwl_edit.h index 0e5f0dcbaf..8143c7d5ed 100644 --- a/xfa/fwl/core/cfwl_edit.h +++ b/xfa/fwl/core/cfwl_edit.h @@ -79,12 +79,12 @@ class CFWL_Edit : public CFWL_Widget { virtual void SetText(const CFX_WideString& wsText); int32_t GetTextLength() const; - CFX_WideString GetText(int32_t nStart = 0, int32_t nCount = -1) const; + CFX_WideString GetText() const; void ClearText(); - void AddSelRange(int32_t nStart, int32_t nCount = -1); + void AddSelRange(int32_t nStart); int32_t CountSelRanges() const; - int32_t GetSelRange(int32_t nIndex, int32_t& nStart) const; + int32_t GetSelRange(int32_t nIndex, int32_t* nStart) const; void ClearSelections(); int32_t GetLimit() const; void SetLimit(int32_t nLimit); @@ -101,20 +101,13 @@ class CFWL_Edit : public CFWL_Widget { void SetOuter(CFWL_Widget* pOuter); - void On_CaretChanged(CFDE_TxtEdtEngine* pEdit, - int32_t nPage, - bool bVisible = true); - void On_TextChanged(CFDE_TxtEdtEngine* pEdit, - FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo); - void On_SelChanged(CFDE_TxtEdtEngine* pEdit); - bool On_PageLoad(CFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose); - bool On_PageUnload(CFDE_TxtEdtEngine* pEdit, - int32_t nPageIndex, - int32_t nPurpose); - void On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, IFDE_TxtEdtDoRecord* pRecord); - bool On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText); + void OnCaretChanged(); + void OnTextChanged(const FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo); + void OnSelChanged(); + bool OnPageLoad(int32_t nPageIndex); + bool OnPageUnload(int32_t nPageIndex); + void OnAddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord); + bool OnValidate(const CFX_WideString& wsText); void SetScrollOffset(FX_FLOAT fScrollOffset); protected: @@ -126,10 +119,12 @@ class CFWL_Edit : public CFWL_Widget { private: void DrawTextBk(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void DrawContent(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); + void DrawSpellCheck(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix); + void UpdateEditEngine(); void UpdateEditParams(); void UpdateEditLayout(); @@ -141,23 +136,22 @@ class CFWL_Edit : public CFWL_Widget { void Layout(); void LayoutScrollBar(); void DeviceToEngine(CFX_PointF& pt); - void InitScrollBar(bool bVert = true); + void InitVerticalScrollBar(); + void InitHorizontalScrollBar(); void InitEngine(); - bool ValidateNumberChar(FX_WCHAR cNum); void InitCaret(); + bool ValidateNumberChar(FX_WCHAR cNum); void ClearRecord(); bool IsShowScrollBar(bool bVert); bool IsContentHeightOverflow(); - int32_t AddDoRecord(IFDE_TxtEdtDoRecord* pRecord); + int32_t AddDoRecord(std::unique_ptr<IFDE_TxtEdtDoRecord> pRecord); void ProcessInsertError(int32_t iError); - - void DrawSpellCheck(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = nullptr); void AddSpellCheckObj(CFX_Path& PathData, int32_t nStart, int32_t nCount, FX_FLOAT fOffSetX, FX_FLOAT fOffSetY); + void DoButtonDown(CFWL_MsgMouse* pMsg); void OnFocusChanged(CFWL_Message* pMsg, bool bSet); void OnLButtonDown(CFWL_MsgMouse* pMsg); diff --git a/xfa/fwl/core/cfwl_form.cpp b/xfa/fwl/core/cfwl_form.cpp index 1fe5e90b87..60f0de3862 100644 --- a/xfa/fwl/core/cfwl_form.cpp +++ b/xfa/fwl/core/cfwl_form.cpp @@ -385,7 +385,7 @@ int32_t CFWL_Form::GetSysBtnIndex(CFWL_SysBtn* pBtn) { void CFWL_Form::GetEdgeRect(CFX_RectF& rtEdge) { rtEdge = m_rtRelative; if (m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border) { - FX_FLOAT fCX = GetBorderSize(); + FX_FLOAT fCX = GetBorderSize(true); FX_FLOAT fCY = GetBorderSize(false); rtEdge.Deflate(fCX, fCY, fCX, fCY); } @@ -549,7 +549,7 @@ void CFWL_Form::OnLButtonUp(CFWL_MsgMouse* pMsg) { if (m_bMaximized) { SetWidgetRect(m_rtRestore); Update(); - Repaint(); + Repaint(nullptr); } else { SetWorkAreaRect(); Update(); diff --git a/xfa/fwl/core/cfwl_listbox.cpp b/xfa/fwl/core/cfwl_listbox.cpp index 7589623e51..48f8c262f5 100644 --- a/xfa/fwl/core/cfwl_listbox.cpp +++ b/xfa/fwl/core/cfwl_listbox.cpp @@ -90,7 +90,7 @@ void CFWL_ListBox::Update() { m_dwTTOStyles |= FDE_TTOSTYLE_SingleLine; m_fScorllBarWidth = GetScrollWidth(); - CalcSize(); + CalcSize(false); } FWL_WidgetHit CFWL_ListBox::HitTest(FX_FLOAT fx, FX_FLOAT fy) { @@ -622,7 +622,7 @@ CFX_SizeF CFWL_ListBox::CalcSize(bool bAutoSize) { CFX_SizeF szRange; if (bShowVertScr) { if (!m_pVertScrollBar) - InitScrollBar(); + InitVerticalScrollBar(); CFX_RectF rtScrollBar; rtScrollBar.Set(m_rtClient.right() - m_fScorllBarWidth, m_rtClient.top, @@ -655,7 +655,7 @@ CFX_SizeF CFWL_ListBox::CalcSize(bool bAutoSize) { } if (bShowHorzScr) { if (!m_pHorzScrollBar) - InitScrollBar(false); + InitHorizontalScrollBar(); CFX_RectF rtScrollBar; rtScrollBar.Set(m_rtClient.left, m_rtClient.bottom() - m_fScorllBarWidth, @@ -718,7 +718,7 @@ FX_FLOAT CFWL_ListBox::GetMaxTextWidth() { continue; CFX_WideString wsText = GetItemText(this, pItem); - CFX_SizeF sz = CalcTextSize(wsText, m_pProperties->m_pThemeProvider); + CFX_SizeF sz = CalcTextSize(wsText, m_pProperties->m_pThemeProvider, false); fRet = std::max(fRet, sz.x); } return fRet; @@ -740,20 +740,30 @@ FX_FLOAT CFWL_ListBox::CalcItemHeight() { return *pfFont + 2 * kItemTextMargin; } -void CFWL_ListBox::InitScrollBar(bool bVert) { - if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) +void CFWL_ListBox::InitVerticalScrollBar() { + if (m_pVertScrollBar) return; auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); - prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz; + prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Vert; prop->m_dwStates = FWL_WGTSTATE_Invisible; prop->m_pParent = this; prop->m_pThemeProvider = m_pScrollBarTP; - CFWL_ScrollBar* sb = new CFWL_ScrollBar(m_pOwnerApp, std::move(prop), this); - if (bVert) - m_pVertScrollBar.reset(sb); - else - m_pHorzScrollBar.reset(sb); + m_pVertScrollBar = + pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); +} + +void CFWL_ListBox::InitHorizontalScrollBar() { + if (m_pHorzScrollBar) + return; + + auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); + prop->m_dwStyleExes = FWL_STYLEEXT_SCB_Horz; + prop->m_dwStates = FWL_WGTSTATE_Invisible; + prop->m_pParent = this; + prop->m_pThemeProvider = m_pScrollBarTP; + m_pHorzScrollBar = + pdfium::MakeUnique<CFWL_ScrollBar>(m_pOwnerApp, std::move(prop), this); } bool CFWL_ListBox::IsShowScrollBar(bool bVert) { @@ -1093,12 +1103,11 @@ void CFWL_ListBox::SetItemCheckState(CFWL_Widget* pWidget, static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState = dwCheckState; } -CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, - bool bSelect) { +CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd) { auto pItem = pdfium::MakeUnique<CFWL_ListItem>(); pItem->m_dwStates = 0; pItem->m_wsText = wsAdd; - pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; + pItem->m_dwStates = 0; m_ItemArray.push_back(std::move(pItem)); return m_ItemArray.back().get(); } diff --git a/xfa/fwl/core/cfwl_listbox.h b/xfa/fwl/core/cfwl_listbox.h index e9e59ebc10..0cfe1f0367 100644 --- a/xfa/fwl/core/cfwl_listbox.h +++ b/xfa/fwl/core/cfwl_listbox.h @@ -84,7 +84,7 @@ class CFWL_ListBox : public CFWL_Widget { void SetItemCheckState(CFWL_Widget* pWidget, CFWL_ListItem* pItem, uint32_t dwCheckState); - CFWL_ListItem* AddString(const CFX_WideStringC& wsAdd, bool bSelect = false); + CFWL_ListItem* AddString(const CFX_WideStringC& wsAdd); bool RemoveAt(int32_t iIndex); bool DeleteString(CFWL_ListItem* pItem); void DeleteAll(); @@ -92,7 +92,7 @@ class CFWL_ListBox : public CFWL_Widget { int32_t CountSelItems(); CFWL_ListItem* GetSelItem(int32_t nIndexSel); int32_t GetSelIndex(int32_t nIndex); - void SetSelItem(CFWL_ListItem* hItem, bool bSelect = true); + void SetSelItem(CFWL_ListItem* hItem, bool bSelect); CFX_WideString GetDataProviderItemText(CFWL_ListItem* hItem); FX_FLOAT GetItemHeight() const { return m_fItemHeight; } @@ -103,7 +103,8 @@ class CFWL_ListBox : public CFWL_Widget { void SetSelection(CFWL_ListItem* hStart, CFWL_ListItem* hEnd, bool bSelected); CFWL_ListItem* GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy); bool ScrollToVisible(CFWL_ListItem* hItem); - void InitScrollBar(bool bVert = true); + void InitVerticalScrollBar(); + void InitHorizontalScrollBar(); bool IsShowScrollBar(bool bVert); CFWL_ScrollBar* GetVertScrollBar() const { return m_pVertScrollBar.get(); } const CFX_RectF& GetRTClient() const { return m_rtClient; } @@ -121,27 +122,27 @@ class CFWL_ListBox : public CFWL_Widget { bool GetItemChecked(CFWL_ListItem* hItem); void DrawBkground(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void DrawItems(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void DrawItem(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, CFWL_ListItem* hItem, int32_t Index, const CFX_RectF& rtItem, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void DrawStatic(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme); - CFX_SizeF CalcSize(bool bAutoSize = false); + CFX_SizeF CalcSize(bool bAutoSize); void GetItemSize(CFX_SizeF& size, CFWL_ListItem* hItem, FX_FLOAT fWidth, FX_FLOAT fHeight, - bool bAutoSize = false); + bool bAutoSize); FX_FLOAT GetMaxTextWidth(); FX_FLOAT GetScrollWidth(); - void OnFocusChanged(CFWL_Message* pMsg, bool bSet = true); + void OnFocusChanged(CFWL_Message* pMsg, bool bSet); void OnLButtonDown(CFWL_MsgMouse* pMsg); void OnLButtonUp(CFWL_MsgMouse* pMsg); void OnMouseWheel(CFWL_MsgMouseWheel* pMsg); diff --git a/xfa/fwl/core/cfwl_message.cpp b/xfa/fwl/core/cfwl_message.cpp index b20cf0e6a1..a8d13fc740 100644 --- a/xfa/fwl/core/cfwl_message.cpp +++ b/xfa/fwl/core/cfwl_message.cpp @@ -17,7 +17,6 @@ CFWL_Message::CFWL_Message(Type type, CFWL_Widget* pDstTarget) : m_pSrcTarget(pSrcTarget), m_pDstTarget(pDstTarget), - m_dwExtend(0), m_type(type) {} CFWL_Message::~CFWL_Message() {} diff --git a/xfa/fwl/core/cfwl_message.h b/xfa/fwl/core/cfwl_message.h index a1545b1013..0c980066cc 100644 --- a/xfa/fwl/core/cfwl_message.h +++ b/xfa/fwl/core/cfwl_message.h @@ -30,7 +30,6 @@ class CFWL_Message { CFWL_Widget* m_pSrcTarget; CFWL_Widget* m_pDstTarget; - uint32_t m_dwExtend; private: Type m_type; diff --git a/xfa/fwl/core/cfwl_monthcalendar.cpp b/xfa/fwl/core/cfwl_monthcalendar.cpp index 76426cd5be..7b5c171a3a 100644 --- a/xfa/fwl/core/cfwl_monthcalendar.cpp +++ b/xfa/fwl/core/cfwl_monthcalendar.cpp @@ -166,7 +166,7 @@ void CFWL_MonthCalendar::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { return; } - CFX_SizeF fs = CalcSize(true); + CFX_SizeF fs = CalcSize(); rect.Set(0, 0, fs.x, fs.y); CFWL_Widget::GetWidgetRect(rect, true); } @@ -297,7 +297,8 @@ void CFWL_MonthCalendar::DrawCaption(CFX_Graphics* pGraphics, CFX_WideString wsCation; GetHeadText(iYear, iMonth, wsCation); textParam.m_wsText = wsCation; - m_szHead = CalcTextSize(textParam.m_wsText, m_pProperties->m_pThemeProvider); + m_szHead = + CalcTextSize(textParam.m_wsText, m_pProperties->m_pThemeProvider, false); CalcHeadSize(); textParam.m_rtPart = m_rtHeadText; textParam.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; @@ -442,7 +443,8 @@ void CFWL_MonthCalendar::DrawToday(CFX_Graphics* pGraphics, GetTodayText(m_iYear, m_iMonth, m_iDay, wsText); params.m_wsText = *wsDay + wsText; - m_szToday = CalcTextSize(params.m_wsText, m_pProperties->m_pThemeProvider); + m_szToday = + CalcTextSize(params.m_wsText, m_pProperties->m_pThemeProvider, false); CalcTodaySize(); params.m_rtPart = m_rtToday; params.m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; @@ -515,13 +517,9 @@ void CFWL_MonthCalendar::DrawDatesInCircle(CFX_Graphics* pGraphics, pTheme->DrawBackground(¶ms); } -CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) { +CFX_SizeF CFWL_MonthCalendar::CalcSize() { if (!m_pProperties->m_pThemeProvider) return CFX_SizeF(); - if (!bAutoSize) { - GetClientRect(m_rtClient); - return CFX_SizeF(m_rtClient.width, m_rtClient.height); - } CFX_SizeF fs; CFWL_ThemePart params; @@ -532,7 +530,7 @@ CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) { for (uint32_t i = 0; i < 7; ++i) { CFX_SizeF sz = CalcTextSize(*GetCapacityForDay(pTheme, params, i), - m_pProperties->m_pThemeProvider); + m_pProperties->m_pThemeProvider, false); fMaxWeekW = (fMaxWeekW >= sz.x) ? fMaxWeekW : sz.x; fMaxWeekH = (fMaxWeekH >= sz.y) ? fMaxWeekH : sz.y; } @@ -542,7 +540,7 @@ CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) { for (int day = 10; day <= 31; day++) { CFX_WideString wsDay; wsDay.Format(L"%d", day); - CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider); + CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider, false); fDayMaxW = (fDayMaxW >= sz.x) ? fDayMaxW : sz.x; fDayMaxH = (fDayMaxH >= sz.y) ? fDayMaxH : sz.y; } @@ -557,7 +555,7 @@ CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) { for (uint32_t i = 0; i < 12; ++i) { CFX_SizeF sz = CalcTextSize(*GetCapacityForMonth(pTheme, params, i), - m_pProperties->m_pThemeProvider); + m_pProperties->m_pThemeProvider, false); fMonthMaxW = (fMonthMaxW >= sz.x) ? fMonthMaxW : sz.x; fMonthMaxH = (fMonthMaxH >= sz.y) ? fMonthMaxH : sz.y; } @@ -565,7 +563,8 @@ CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) { CFX_WideString wsYear; GetHeadText(m_iYear, m_iMonth, wsYear); - CFX_SizeF szYear = CalcTextSize(wsYear, m_pProperties->m_pThemeProvider); + CFX_SizeF szYear = + CalcTextSize(wsYear, m_pProperties->m_pThemeProvider, false); fMonthMaxH = std::max(fMonthMaxH, szYear.y); m_szHead = CFX_SizeF(fMonthMaxW + szYear.x, fMonthMaxH); fMonthMaxW = m_szHead.x + MONTHCAL_HEADER_BTN_HMARGIN * 2 + m_szCell.x * 2; @@ -576,7 +575,7 @@ CFX_SizeF CFWL_MonthCalendar::CalcSize(bool bAutoSize) { CFX_WideString* wsText = static_cast<CFX_WideString*>( pTheme->GetCapacity(¶ms, CFWL_WidgetCapacity::Today)); m_wsToday = *wsText + wsToday; - m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider); + m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider, false); m_szToday.y = (m_szToday.y >= m_szCell.y) ? m_szToday.y : m_szCell.y; fs.y = m_szCell.x + m_szCell.y * (MONTHCAL_ROWS - 2) + m_szToday.y + MONTHCAL_VMARGIN * MONTHCAL_ROWS * 2 + MONTHCAL_HEADER_BTN_VMARGIN * 4; @@ -811,34 +810,18 @@ void CFWL_MonthCalendar::ChangeToMonth(int32_t iYear, int32_t iMonth) { GetHeadText(m_iCurYear, m_iCurMonth, m_wsHead); } -void CFWL_MonthCalendar::RemoveSelDay(int32_t iDay, bool bAll) { - if (iDay == -1 && !bAll) - return; - if (bAll) { - int32_t iCount = m_arrSelDays.GetSize(); - int32_t iDatesCount = m_arrDates.GetSize(); - for (int32_t i = 0; i < iCount; i++) { - int32_t iSelDay = m_arrSelDays.GetAt(i); - if (iSelDay <= iDatesCount) { - DATEINFO* pDateInfo = m_arrDates.GetAt(iSelDay - 1); - pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; - } - } - m_arrSelDays.RemoveAll(); - return; - } - - int32_t index = m_arrSelDays.Find(iDay); - if (index == -1) - return; - - int32_t iSelDay = m_arrSelDays.GetAt(iDay); +void CFWL_MonthCalendar::RemoveSelDay() { + int32_t iCount = m_arrSelDays.GetSize(); int32_t iDatesCount = m_arrDates.GetSize(); - if (iSelDay <= iDatesCount) { - DATEINFO* pDateInfo = m_arrDates.GetAt(iSelDay - 1); - pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; + for (int32_t i = 0; i < iCount; i++) { + int32_t iSelDay = m_arrSelDays.GetAt(i); + if (iSelDay <= iDatesCount) { + DATEINFO* pDateInfo = m_arrDates.GetAt(iSelDay - 1); + pDateInfo->dwStates &= ~FWL_ITEMSTATE_MCD_Selected; + } } - m_arrSelDays.RemoveAt(index); + m_arrSelDays.RemoveAll(); + return; } void CFWL_MonthCalendar::AddSelDay(int32_t iDay) { @@ -849,7 +832,7 @@ void CFWL_MonthCalendar::AddSelDay(int32_t iDay) { if (m_arrSelDays.Find(iDay) != -1) return; - RemoveSelDay(-1, true); + RemoveSelDay(); if (iDay <= m_arrDates.GetSize()) { DATEINFO* pDateInfo = m_arrDates.GetAt(iDay - 1); pDateInfo->dwStates |= FWL_ITEMSTATE_MCD_Selected; diff --git a/xfa/fwl/core/cfwl_monthcalendar.h b/xfa/fwl/core/cfwl_monthcalendar.h index 1a983abdfb..15912e59c3 100644 --- a/xfa/fwl/core/cfwl_monthcalendar.h +++ b/xfa/fwl/core/cfwl_monthcalendar.h @@ -136,7 +136,7 @@ class CFWL_MonthCalendar : public CFWL_Widget { void DrawDatesInCircle(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix); - CFX_SizeF CalcSize(bool bAutoSize = false); + CFX_SizeF CalcSize(); void Layout(); void CalcHeadSize(); void CalcTodaySize(); @@ -148,7 +148,7 @@ class CFWL_MonthCalendar : public CFWL_Widget { void NextMonth(); void PrevMonth(); void ChangeToMonth(int32_t iYear, int32_t iMonth); - void RemoveSelDay(int32_t iDay, bool bAll = false); + void RemoveSelDay(); void AddSelDay(int32_t iDay); void JumpToToday(); void GetHeadText(int32_t iYear, int32_t iMonth, CFX_WideString& wsHead); diff --git a/xfa/fwl/core/cfwl_notedriver.cpp b/xfa/fwl/core/cfwl_notedriver.cpp index 00a0b3e4b7..8402b2b90c 100644 --- a/xfa/fwl/core/cfwl_notedriver.cpp +++ b/xfa/fwl/core/cfwl_notedriver.cpp @@ -84,19 +84,17 @@ CFWL_NoteLoop* CFWL_NoteDriver::PopNoteLoop() { return p; } -bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus, bool bNotify) { +bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus) { if (m_pFocus == pFocus) return true; CFWL_Widget* pPrev = m_pFocus; m_pFocus = pFocus; if (pPrev) { - CFWL_MsgKillFocus ms(pPrev, pPrev); - if (bNotify) - ms.m_dwExtend = 1; - - if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) + if (IFWL_WidgetDelegate* pDelegate = pPrev->GetDelegate()) { + CFWL_MsgKillFocus ms(pPrev, pPrev); pDelegate->OnProcessMessage(&ms); + } } if (pFocus) { CFWL_Widget* pWidget = @@ -105,11 +103,10 @@ bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus, bool bNotify) { if (pForm) pForm->SetSubFocus(pFocus); - CFWL_MsgSetFocus ms(nullptr, pFocus); - if (bNotify) - ms.m_dwExtend = 1; - if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) + if (IFWL_WidgetDelegate* pDelegate = pFocus->GetDelegate()) { + CFWL_MsgSetFocus ms(nullptr, pFocus); pDelegate->OnProcessMessage(&ms); + } } return true; } diff --git a/xfa/fwl/core/cfwl_notedriver.h b/xfa/fwl/core/cfwl_notedriver.h index 9fdb3427ab..47f11daec3 100644 --- a/xfa/fwl/core/cfwl_notedriver.h +++ b/xfa/fwl/core/cfwl_notedriver.h @@ -36,7 +36,7 @@ class CFWL_NoteDriver { CFWL_NoteLoop* PopNoteLoop(); CFWL_Widget* GetFocus() const { return m_pFocus; } - bool SetFocus(CFWL_Widget* pFocus, bool bNotify = false); + bool SetFocus(CFWL_Widget* pFocus); void SetGrab(CFWL_Widget* pGrab, bool bSet) { m_pGrab = bSet ? pGrab : nullptr; } diff --git a/xfa/fwl/core/cfwl_scrollbar.cpp b/xfa/fwl/core/cfwl_scrollbar.cpp index 490940491c..46068dc89c 100644 --- a/xfa/fwl/core/cfwl_scrollbar.cpp +++ b/xfa/fwl/core/cfwl_scrollbar.cpp @@ -309,46 +309,6 @@ FX_FLOAT CFWL_ScrollBar::GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy) { return std::min(std::max(fPos, m_fRangeMin), m_fRangeMax); } -void CFWL_ScrollBar::GetTrackRect(CFX_RectF& rect, bool bLower) { - bool bDisabled = !!(m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled); - if (bDisabled) { - rect = bLower ? m_rtMinTrack : m_rtMaxTrack; - return; - } - - FX_FLOAT fW = m_rtThumb.width / 2; - FX_FLOAT fH = m_rtThumb.height / 2; - bool bVert = IsVertical(); - if (bLower) { - if (bVert) { - FX_FLOAT fMinTrackHeight = m_rtMinTrack.height - fH - m_rtMinBtn.height; - fMinTrackHeight = (fMinTrackHeight >= 0.0f) ? fMinTrackHeight : 0.0f; - rect.Set(m_rtMinTrack.left, m_rtMinTrack.top + m_rtMinBtn.height, - m_rtMinTrack.width, fMinTrackHeight); - return; - } - - FX_FLOAT fMinTrackWidth = m_rtMinTrack.width - fW - m_rtMinBtn.width + 2; - fMinTrackWidth = (fMinTrackWidth >= 0.0f) ? fMinTrackWidth : 0.0f; - rect.Set(m_rtMinTrack.left + m_rtMinBtn.width - 1, m_rtMinTrack.top, - fMinTrackWidth, m_rtMinTrack.height); - return; - } - - if (bVert) { - FX_FLOAT fMaxTrackHeight = m_rtMaxTrack.height - fH - m_rtMaxBtn.height; - fMaxTrackHeight = (fMaxTrackHeight >= 0.0f) ? fMaxTrackHeight : 0.0f; - rect.Set(m_rtMaxTrack.left, m_rtMaxTrack.top + fH, m_rtMaxTrack.width, - fMaxTrackHeight); - return; - } - - FX_FLOAT fMaxTrackWidth = m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2; - fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f; - rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth, - m_rtMaxTrack.height); -} - bool CFWL_ScrollBar::SendEvent() { if (m_iMinButtonState == CFWL_PartState_Pressed) { DoScroll(CFWL_EvtScroll::Code::StepBackward, m_fTrackPos); diff --git a/xfa/fwl/core/cfwl_scrollbar.h b/xfa/fwl/core/cfwl_scrollbar.h index 5e9c0b5df2..fb44af6908 100644 --- a/xfa/fwl/core/cfwl_scrollbar.h +++ b/xfa/fwl/core/cfwl_scrollbar.h @@ -69,15 +69,15 @@ class CFWL_ScrollBar : public CFWL_Widget { } void DrawTrack(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - bool bLower = true, - const CFX_Matrix* pMatrix = nullptr); + bool bLower, + const CFX_Matrix* pMatrix); void DrawArrowBtn(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - bool bMinBtn = true, - const CFX_Matrix* pMatrix = nullptr); + bool bMinBtn, + const CFX_Matrix* pMatrix); void DrawThumb(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void Layout(); void CalcButtonLen(); void CalcMinButtonRect(CFX_RectF& rect); @@ -86,7 +86,7 @@ class CFWL_ScrollBar : public CFWL_Widget { void CalcMinTrackRect(CFX_RectF& rect); void CalcMaxTrackRect(CFX_RectF& rect); FX_FLOAT GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy); - void GetTrackRect(CFX_RectF& rect, bool bLower = true); + bool SendEvent(); bool OnScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos); void OnLButtonDown(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy); @@ -98,7 +98,7 @@ class CFWL_ScrollBar : public CFWL_Widget { uint32_t dwFlags, FX_FLOAT fDeltaX, FX_FLOAT fDeltaY); - bool DoScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos = 0.0f); + bool DoScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos); void DoMouseDown(int32_t iItem, const CFX_RectF& rtItem, int32_t& iState, diff --git a/xfa/fwl/core/cfwl_spinbutton.cpp b/xfa/fwl/core/cfwl_spinbutton.cpp index e66b92e701..8780fed1a9 100644 --- a/xfa/fwl/core/cfwl_spinbutton.cpp +++ b/xfa/fwl/core/cfwl_spinbutton.cpp @@ -114,17 +114,16 @@ void CFWL_SpinButton::DrawWidget(CFX_Graphics* pGraphics, DrawDownButton(pGraphics, pTheme, pMatrix); } -void CFWL_SpinButton::EnableButton(bool bEnable, bool bUp) { - if (bUp) - m_dwUpState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; - else - m_dwDnState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; +void CFWL_SpinButton::DisableButton() { + m_dwDnState = CFWL_PartState_Disabled; +} + +bool CFWL_SpinButton::IsUpButtonEnabled() { + return m_dwUpState != CFWL_PartState_Disabled; } -bool CFWL_SpinButton::IsButtonEnabled(bool bUp) { - if (bUp) - return (m_dwUpState != CFWL_PartState_Disabled); - return (m_dwDnState != CFWL_PartState_Disabled); +bool CFWL_SpinButton::IsDownButtonEnabled() { + return m_dwDnState != CFWL_PartState_Disabled; } void CFWL_SpinButton::DrawUpButton(CFX_Graphics* pGraphics, @@ -222,9 +221,9 @@ void CFWL_SpinButton::OnLButtonDown(CFWL_MsgMouse* pMsg) { SetFocus(true); bool bUpPress = - (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(true)); + (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsUpButtonEnabled()); bool bDnPress = - (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnabled(false)); + (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsDownButtonEnabled()); if (!bUpPress && !bDnPress) return; if (bUpPress) { @@ -256,11 +255,11 @@ void CFWL_SpinButton::OnLButtonUp(CFWL_MsgMouse* pMsg) { } bool bRepaint = false; CFX_RectF rtInvalidate; - if (m_dwUpState == CFWL_PartState_Pressed && IsButtonEnabled(true)) { + if (m_dwUpState == CFWL_PartState_Pressed && IsUpButtonEnabled()) { m_dwUpState = CFWL_PartState_Normal; bRepaint = true; rtInvalidate = m_rtUpButton; - } else if (m_dwDnState == CFWL_PartState_Pressed && IsButtonEnabled(false)) { + } else if (m_dwDnState == CFWL_PartState_Pressed && IsDownButtonEnabled()) { m_dwDnState = CFWL_PartState_Normal; bRepaint = true; rtInvalidate = m_rtDnButton; @@ -277,13 +276,13 @@ void CFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) { CFX_RectF rtInvlidate; rtInvlidate.Reset(); if (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (IsButtonEnabled(true)) { + if (IsUpButtonEnabled()) { if (m_dwUpState == CFWL_PartState_Hovered) { m_dwUpState = CFWL_PartState_Hovered; bRepaint = true; rtInvlidate = m_rtUpButton; } - if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnabled(false)) { + if (m_dwDnState != CFWL_PartState_Normal && IsDownButtonEnabled()) { m_dwDnState = CFWL_PartState_Normal; if (bRepaint) rtInvlidate.Union(m_rtDnButton); @@ -293,17 +292,17 @@ void CFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) { bRepaint = true; } } - if (!IsButtonEnabled(false)) - EnableButton(false, false); + if (!IsDownButtonEnabled()) + DisableButton(); } else if (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (IsButtonEnabled(false)) { + if (IsDownButtonEnabled()) { if (m_dwDnState != CFWL_PartState_Hovered) { m_dwDnState = CFWL_PartState_Hovered; bRepaint = true; rtInvlidate = m_rtDnButton; } - if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnabled(true)) { + if (m_dwUpState != CFWL_PartState_Normal && IsUpButtonEnabled()) { m_dwUpState = CFWL_PartState_Normal; if (bRepaint) rtInvlidate.Union(m_rtUpButton); @@ -336,9 +335,9 @@ void CFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) { void CFWL_SpinButton::OnMouseLeave(CFWL_MsgMouse* pMsg) { if (!pMsg) return; - if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnabled(true)) + if (m_dwUpState != CFWL_PartState_Normal && IsUpButtonEnabled()) m_dwUpState = CFWL_PartState_Normal; - if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnabled(false)) + if (m_dwDnState != CFWL_PartState_Normal && IsDownButtonEnabled()) m_dwDnState = CFWL_PartState_Normal; Repaint(&m_rtClient); @@ -352,8 +351,8 @@ void CFWL_SpinButton::OnKeyDown(CFWL_MsgKey* pMsg) { if (!bUp && !bDown) return; - bool bUpEnable = IsButtonEnabled(true); - bool bDownEnable = IsButtonEnabled(false); + bool bUpEnable = IsUpButtonEnabled(); + bool bDownEnable = IsDownButtonEnabled(); if (!bUpEnable && !bDownEnable) return; diff --git a/xfa/fwl/core/cfwl_spinbutton.h b/xfa/fwl/core/cfwl_spinbutton.h index 2993663a58..fd2f02e998 100644 --- a/xfa/fwl/core/cfwl_spinbutton.h +++ b/xfa/fwl/core/cfwl_spinbutton.h @@ -44,8 +44,9 @@ class CFWL_SpinButton : public CFWL_Widget { }; friend class CFWL_SpinButton::Timer; - void EnableButton(bool bEnable, bool bUp = true); - bool IsButtonEnabled(bool bUp = true); + void DisableButton(); + bool IsUpButtonEnabled(); + bool IsDownButtonEnabled(); void DrawUpButton(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix); diff --git a/xfa/fwl/core/cfwl_widget.cpp b/xfa/fwl/core/cfwl_widget.cpp index 8989563112..2dff10adc7 100644 --- a/xfa/fwl/core/cfwl_widget.cpp +++ b/xfa/fwl/core/cfwl_widget.cpp @@ -76,7 +76,7 @@ void CFWL_Widget::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { rect.Inflate(fEdge, fEdge); } if (HasBorder()) { - FX_FLOAT fBorder = GetBorderSize(); + FX_FLOAT fBorder = GetBorderSize(true); rect.Inflate(fBorder, fBorder); } } @@ -317,7 +317,7 @@ void CFWL_Widget::GetEdgeRect(CFX_RectF& rtEdge) { rtEdge = m_pProperties->m_rtWidget; rtEdge.left = rtEdge.top = 0; if (HasBorder()) { - FX_FLOAT fCX = GetBorderSize(); + FX_FLOAT fCX = GetBorderSize(true); FX_FLOAT fCY = GetBorderSize(false); rtEdge.Deflate(fCX, fCY); } @@ -399,8 +399,7 @@ CFWL_Widget* CFWL_Widget::GetRootOuter() { CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText, IFWL_ThemeProvider* pTheme, - bool bMultiLine, - int32_t iLineWidth) { + bool bMultiLine) { if (!pTheme) return CFX_SizeF(); @@ -411,10 +410,8 @@ CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText, bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; CFX_RectF rect; - FX_FLOAT fWidth = bMultiLine - ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth - : FWL_WGT_CalcMultiLineDefWidth) - : FWL_WGT_CalcWidth; + FX_FLOAT fWidth = + bMultiLine ? FWL_WGT_CalcMultiLineDefWidth : FWL_WGT_CalcWidth; rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); pTheme->CalcTextRect(&calPart, rect); return CFX_SizeF(rect.width, rect.height); diff --git a/xfa/fwl/core/cfwl_widget.h b/xfa/fwl/core/cfwl_widget.h index a17c623b53..4961055954 100644 --- a/xfa/fwl/core/cfwl_widget.h +++ b/xfa/fwl/core/cfwl_widget.h @@ -67,7 +67,7 @@ class CFWL_Widget : public IFWL_WidgetDelegate { void OnProcessMessage(CFWL_Message* pMessage) override; void OnProcessEvent(CFWL_Event* pEvent) override; void OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = nullptr) override; + const CFX_Matrix* pMatrix) override; void SetWidgetRect(const CFX_RectF& rect); @@ -88,7 +88,7 @@ class CFWL_Widget : public IFWL_WidgetDelegate { } void TransformTo(CFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy); - void GetMatrix(CFX_Matrix& matrix, bool bGlobal = false); + void GetMatrix(CFX_Matrix& matrix, bool bGlobal); IFWL_ThemeProvider* GetThemeProvider() const; void SetDelegate(IFWL_WidgetDelegate* delegate) { m_pDelegate = delegate; } @@ -107,7 +107,7 @@ class CFWL_Widget : public IFWL_WidgetDelegate { void SetLayoutItem(void* pItem) { m_pLayoutItem = pItem; } void SetFocus(bool bFocus); - void Repaint(const CFX_RectF* pRect = nullptr); + void Repaint(const CFX_RectF* pRect); protected: CFWL_Widget(const CFWL_App* app, @@ -120,15 +120,14 @@ class CFWL_Widget : public IFWL_WidgetDelegate { bool HasBorder() const; bool HasEdge() const; void GetEdgeRect(CFX_RectF& rtEdge); - FX_FLOAT GetBorderSize(bool bCX = true); + FX_FLOAT GetBorderSize(bool bCX); FX_FLOAT GetEdgeWidth(); void GetRelativeRect(CFX_RectF& rect); void* GetThemeCapacity(CFWL_WidgetCapacity dwCapacity); IFWL_ThemeProvider* GetAvailableTheme(); CFX_SizeF CalcTextSize(const CFX_WideString& wsText, IFWL_ThemeProvider* pTheme, - bool bMultiLine = false, - int32_t iLineWidth = -1); + bool bMultiLine); void CalcTextRect(const CFX_WideString& wsText, IFWL_ThemeProvider* pTheme, uint32_t dwTTOStyles, @@ -145,11 +144,11 @@ class CFWL_Widget : public IFWL_WidgetDelegate { void DrawBorder(CFX_Graphics* pGraphics, CFWL_Part iPartBorder, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void DrawEdge(CFX_Graphics* pGraphics, CFWL_Part iPartEdge, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); const CFWL_App* const m_pOwnerApp; CFWL_WidgetMgr* const m_pWidgetMgr; @@ -183,7 +182,7 @@ class CFWL_Widget : public IFWL_WidgetDelegate { void DrawBackground(CFX_Graphics* pGraphics, CFWL_Part iPartBk, IFWL_ThemeProvider* pTheme, - const CFX_Matrix* pMatrix = nullptr); + const CFX_Matrix* pMatrix); void NotifyDriver(); bool IsParent(CFWL_Widget* pParent); diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp index fc9f150ac3..1649ee76b9 100644 --- a/xfa/fwl/core/cfwl_widgetmgr.cpp +++ b/xfa/fwl/core/cfwl_widgetmgr.cpp @@ -104,7 +104,7 @@ CFWL_Widget* CFWL_WidgetMgr::GetSystemFormWidget(CFWL_Widget* pWidget) const { return nullptr; } -void CFWL_WidgetMgr::SetWidgetIndex(CFWL_Widget* pWidget, int32_t nIndex) { +void CFWL_WidgetMgr::AppendWidget(CFWL_Widget* pWidget) { Item* pItem = GetWidgetMgrItem(pWidget); if (!pItem) return; @@ -115,8 +115,6 @@ void CFWL_WidgetMgr::SetWidgetIndex(CFWL_Widget* pWidget, int32_t nIndex) { int32_t i = 0; while (pChild) { if (pChild == pItem) { - if (i == nIndex) - return; if (pChild->pPrevious) pChild->pPrevious->pNext = pChild->pNext; if (pChild->pNext) @@ -137,40 +135,16 @@ void CFWL_WidgetMgr::SetWidgetIndex(CFWL_Widget* pWidget, int32_t nIndex) { pChild = pItem->pParent->pChild; if (pChild) { - if (nIndex < 0) { - while (pChild->pNext) - pChild = pChild->pNext; - - pChild->pNext = pItem; - pItem->pPrevious = pChild; - pItem->pNext = nullptr; - return; - } - - i = 0; - while (i < nIndex && pChild->pNext) { + while (pChild->pNext) pChild = pChild->pNext; - ++i; - } - if (!pChild->pNext) { - pChild->pNext = pItem; - pItem->pPrevious = pChild; - pItem->pNext = nullptr; - return; - } - if (pChild->pPrevious) { - pItem->pPrevious = pChild->pPrevious; - pChild->pPrevious->pNext = pItem; - } - pChild->pPrevious = pItem; - pItem->pNext = pChild; - if (pItem->pParent->pChild == pChild) - pItem->pParent->pChild = pItem; + + pChild->pNext = pItem; + pItem->pPrevious = pChild; } else { pItem->pParent->pChild = pItem; pItem->pPrevious = nullptr; - pItem->pNext = nullptr; } + pItem->pNext = nullptr; } void CFWL_WidgetMgr::RepaintWidget(CFWL_Widget* pWidget, @@ -201,9 +175,7 @@ void CFWL_WidgetMgr::RepaintWidget(CFWL_Widget* pWidget, m_pAdapter->RepaintWidget(pNative, &rect); } -void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent, - CFWL_Widget* pChild, - int32_t nIndex) { +void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild) { Item* pParentItem = GetWidgetMgrItem(pParent); if (!pParentItem) { auto item = pdfium::MakeUnique<Item>(pParent); @@ -211,7 +183,7 @@ void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent, m_mapWidgetItem[pParent] = std::move(item); pParentItem->pParent = GetWidgetMgrItem(nullptr); - SetWidgetIndex(pParent, -1); + AppendWidget(pParent); } Item* pItem = GetWidgetMgrItem(pChild); @@ -229,7 +201,7 @@ void CFWL_WidgetMgr::InsertWidget(CFWL_Widget* pParent, pItem->pParent->pChild = pItem->pNext; } pItem->pParent = pParentItem; - SetWidgetIndex(pChild, nIndex); + AppendWidget(pChild); } void CFWL_WidgetMgr::RemoveWidget(CFWL_Widget* pWidget) { @@ -260,7 +232,7 @@ void CFWL_WidgetMgr::SetOwner(CFWL_Widget* pOwner, CFWL_Widget* pOwned) { m_mapWidgetItem[pOwner] = std::move(item); pParentItem->pParent = GetWidgetMgrItem(nullptr); - SetWidgetIndex(pOwner, -1); + AppendWidget(pOwner); } Item* pItem = GetWidgetMgrItem(pOwned); @@ -288,7 +260,7 @@ void CFWL_WidgetMgr::SetParent(CFWL_Widget* pParent, CFWL_Widget* pChild) { pItem->pPrevious = nullptr; } pItem->pParent = pParentItem; - SetWidgetIndex(pChild, -1); + AppendWidget(pChild); } void CFWL_WidgetMgr::SetWidgetRect_Native(CFWL_Widget* pWidget, @@ -327,7 +299,7 @@ CFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(CFWL_Widget* parent, x1 = x; y1 = y; CFX_Matrix matrixOnParent; - child->GetMatrix(matrixOnParent); + child->GetMatrix(matrixOnParent, false); CFX_Matrix m; m.SetIdentity(); m.SetReverse(matrixOnParent); diff --git a/xfa/fwl/core/cfwl_widgetmgr.h b/xfa/fwl/core/cfwl_widgetmgr.h index 70d8b7ec7c..5b72d44577 100644 --- a/xfa/fwl/core/cfwl_widgetmgr.h +++ b/xfa/fwl/core/cfwl_widgetmgr.h @@ -42,11 +42,9 @@ class CFWL_WidgetMgr : public CFWL_WidgetMgrDelegate { CFWL_Widget* GetFirstChildWidget(CFWL_Widget* pWidget) const; CFWL_Widget* GetSystemFormWidget(CFWL_Widget* pWidget) const; - void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF* pRect = nullptr); + void RepaintWidget(CFWL_Widget* pWidget, const CFX_RectF* pRect); - void InsertWidget(CFWL_Widget* pParent, - CFWL_Widget* pChild, - int32_t nIndex = -1); + void InsertWidget(CFWL_Widget* pParent, CFWL_Widget* pChild); void RemoveWidget(CFWL_Widget* pWidget); void SetOwner(CFWL_Widget* pOwner, CFWL_Widget* pOwned); void SetParent(CFWL_Widget* pParent, CFWL_Widget* pChild); @@ -99,7 +97,7 @@ class CFWL_WidgetMgr : public CFWL_WidgetMgrDelegate { CFWL_Widget* GetLastChildWidget(CFWL_Widget* pWidget) const; Item* GetWidgetMgrItem(CFWL_Widget* pWidget) const; - void SetWidgetIndex(CFWL_Widget* pWidget, int32_t nIndex); + void AppendWidget(CFWL_Widget* pWidget); int32_t CountRadioButtonGroup(CFWL_Widget* pFirst) const; CFWL_Widget* GetRadioButtonGroupHeader(CFWL_Widget* pRadioButton) const; diff --git a/xfa/fwl/core/ifwl_widgetdelegate.h b/xfa/fwl/core/ifwl_widgetdelegate.h index 7de14824c5..042679359c 100644 --- a/xfa/fwl/core/ifwl_widgetdelegate.h +++ b/xfa/fwl/core/ifwl_widgetdelegate.h @@ -21,7 +21,7 @@ class IFWL_WidgetDelegate { virtual void OnProcessMessage(CFWL_Message* pMessage) = 0; virtual void OnProcessEvent(CFWL_Event* pEvent) = 0; virtual void OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix = nullptr) = 0; + const CFX_Matrix* pMatrix) = 0; }; #endif // XFA_FWL_CORE_IFWL_WIDGETDELEGATE_H_ |