diff options
Diffstat (limited to 'xfa/fwl/core/ifwl_pushbutton.cpp')
-rw-r--r-- | xfa/fwl/core/ifwl_pushbutton.cpp | 95 |
1 files changed, 45 insertions, 50 deletions
diff --git a/xfa/fwl/core/ifwl_pushbutton.cpp b/xfa/fwl/core/ifwl_pushbutton.cpp index 03bc7060d7..387a01af1f 100644 --- a/xfa/fwl/core/ifwl_pushbutton.cpp +++ b/xfa/fwl/core/ifwl_pushbutton.cpp @@ -33,29 +33,31 @@ FWL_Type IFWL_PushButton::GetClassID() const { } void IFWL_PushButton::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { - if (bAutoSize) { - rect.Set(0, 0, 0, 0); - if (!m_pProperties->m_pThemeProvider) { - m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } - CFX_WideString wsCaption; - IFWL_PushButtonDP* pData = - static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); - if (pData) { - pData->GetCaption(this, wsCaption); - } - int32_t iLen = wsCaption.GetLength(); - if (iLen > 0) { - CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); - rect.Set(0, 0, sz.x, sz.y); - } - FX_FLOAT* fcaption = - static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::Margin)); - rect.Inflate(*fcaption, *fcaption); - IFWL_Widget::GetWidgetRect(rect, true); - } else { + if (!bAutoSize) { rect = m_pProperties->m_rtWidget; + return; + } + + rect.Set(0, 0, 0, 0); + if (!m_pProperties->m_pThemeProvider) + m_pProperties->m_pThemeProvider = GetAvailableTheme(); + + CFX_WideString wsCaption; + IFWL_PushButtonDP* pData = + static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); + if (pData) + pData->GetCaption(this, wsCaption); + + int32_t iLen = wsCaption.GetLength(); + if (iLen > 0) { + CFX_SizeF sz = CalcTextSize(wsCaption, m_pProperties->m_pThemeProvider); + rect.Set(0, 0, sz.x, sz.y); } + + FX_FLOAT* fcaption = + static_cast<FX_FLOAT*>(GetThemeCapacity(CFWL_WidgetCapacity::Margin)); + rect.Inflate(*fcaption, *fcaption); + IFWL_Widget::GetWidgetRect(rect, true); } void IFWL_PushButton::SetStates(uint32_t dwStates, bool bSet) { @@ -67,12 +69,11 @@ void IFWL_PushButton::SetStates(uint32_t dwStates, bool bSet) { } void IFWL_PushButton::Update() { - if (IsLocked()) { + if (IsLocked()) return; - } - if (!m_pProperties->m_pThemeProvider) { + if (!m_pProperties->m_pThemeProvider) m_pProperties->m_pThemeProvider = GetAvailableTheme(); - } + UpdateTextOutStyles(); GetClientRect(m_rtClient); m_rtCaption = m_rtClient; @@ -87,6 +88,7 @@ void IFWL_PushButton::DrawWidget(CFX_Graphics* pGraphics, return; if (!m_pProperties->m_pThemeProvider) return; + IFWL_PushButtonDP* pData = static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; @@ -103,9 +105,9 @@ void IFWL_PushButton::DrawWidget(CFX_Graphics* pGraphics, matrix.Concat(*pMatrix); CFX_WideString wsCaption; - if (pData) { + if (pData) pData->GetCaption(this, wsCaption); - } + CFX_RectF rtText; rtText.Set(0, 0, 0, 0); if (!wsCaption.IsEmpty()) @@ -129,13 +131,11 @@ void IFWL_PushButton::DrawBkground(CFX_Graphics* pGraphics, param.m_iPart = CFWL_Part::Background; param.m_dwStates = GetPartStates(); param.m_pGraphics = pGraphics; - if (pMatrix) { + if (pMatrix) param.m_matrix.Concat(*pMatrix); - } param.m_rtPart = m_rtClient; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { + if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) param.m_pData = &m_rtCaption; - } pTheme->DrawBackground(¶m); } @@ -144,19 +144,19 @@ void IFWL_PushButton::DrawText(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!m_pProperties->m_pDataProvider) return; + CFX_WideString wsCaption; m_pProperties->m_pDataProvider->GetCaption(this, wsCaption); - if (wsCaption.IsEmpty()) { + if (wsCaption.IsEmpty()) return; - } + CFWL_ThemeText param; param.m_pWidget = this; param.m_iPart = CFWL_Part::Caption; param.m_dwStates = GetPartStates(); param.m_pGraphics = pGraphics; - if (pMatrix) { + if (pMatrix) param.m_matrix.Concat(*pMatrix); - } param.m_rtPart = m_rtCaption; param.m_wsText = wsCaption; param.m_dwTTOStyles = m_dwTTOStyles; @@ -166,23 +166,20 @@ void IFWL_PushButton::DrawText(CFX_Graphics* pGraphics, uint32_t IFWL_PushButton::GetPartStates() { uint32_t dwStates = CFWL_PartState_Normal; - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) { + if (m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) dwStates |= CFWL_PartState_Focused; - } - if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) { + if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) dwStates = CFWL_PartState_Disabled; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) { + else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Pressed) dwStates |= CFWL_PartState_Pressed; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) { + else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Hovered) dwStates |= CFWL_PartState_Hovered; - } else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Default) { + else if (m_pProperties->m_dwStates & FWL_STATE_PSB_Default) dwStates |= CFWL_PartState_Default; - } return dwStates; } void IFWL_PushButton::UpdateTextOutStyles() { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; switch (m_pProperties->m_dwStyleExes & (FWL_STYLEEXT_PSB_HLayoutMask | FWL_STYLEEXT_PSB_VLayoutMask)) { case FWL_STYLEEXT_PSB_Left | FWL_STYLEEXT_PSB_Top: { @@ -201,10 +198,6 @@ void IFWL_PushButton::UpdateTextOutStyles() { m_iTTOAlign = FDE_TTOALIGNMENT_CenterLeft; break; } - case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_VCenter: { - m_iTTOAlign = FDE_TTOALIGNMENT_Center; - break; - } case FWL_STYLEEXT_PSB_Right | FWL_STYLEEXT_PSB_VCenter: { m_iTTOAlign = FDE_TTOALIGNMENT_CenterRight; break; @@ -221,13 +214,15 @@ void IFWL_PushButton::UpdateTextOutStyles() { m_iTTOAlign = FDE_TTOALIGNMENT_BottomRight; break; } - default: + case FWL_STYLEEXT_PSB_Center | FWL_STYLEEXT_PSB_VCenter: + default: { + m_iTTOAlign = FDE_TTOALIGNMENT_Center; break; + } } m_dwTTOStyles = FDE_TTOSTYLE_SingleLine; - if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) { + if (m_pProperties->m_dwStyleExes & FWL_WGTSTYLE_RTLReading) m_dwTTOStyles |= FDE_TTOSTYLE_RTL; - } } void IFWL_PushButton::OnProcessMessage(CFWL_Message* pMessage) { |