diff options
Diffstat (limited to 'xfa/fwl/core/ifwl_spinbutton.cpp')
-rw-r--r-- | xfa/fwl/core/ifwl_spinbutton.cpp | 297 |
1 files changed, 133 insertions, 164 deletions
diff --git a/xfa/fwl/core/ifwl_spinbutton.cpp b/xfa/fwl/core/ifwl_spinbutton.cpp index 81cff6722b..1ad5f0a969 100644 --- a/xfa/fwl/core/ifwl_spinbutton.cpp +++ b/xfa/fwl/core/ifwl_spinbutton.cpp @@ -37,8 +37,6 @@ IFWL_SpinButton::IFWL_SpinButton(const IFWL_App* app, m_rtUpButton.Reset(); m_rtDnButton.Reset(); m_pProperties->m_dwStyleExes |= FWL_STYLEEXE_SPB_Vert; - - SetDelegate(pdfium::MakeUnique<CFWL_SpinButtonImpDelegate>(this)); } IFWL_SpinButton::~IFWL_SpinButton() {} @@ -98,43 +96,34 @@ FWL_Error IFWL_SpinButton::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!pGraphics) return FWL_Error::Indefinite; + CFX_RectF rtClip(m_rtClient); - if (pMatrix) { + if (pMatrix) pMatrix->TransformRect(rtClip); - } + IFWL_ThemeProvider* pTheme = GetAvailableTheme(); - if (HasBorder()) { + if (HasBorder()) DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); - } - if (HasEdge()) { + if (HasEdge()) DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); - } + DrawUpButton(pGraphics, pTheme, pMatrix); DrawDownButton(pGraphics, pTheme, pMatrix); return FWL_Error::Succeeded; } FWL_Error IFWL_SpinButton::EnableButton(FX_BOOL bEnable, FX_BOOL bUp) { - if (bUp) { - if (bEnable) { - m_dwUpState = CFWL_PartState_Normal; - } else { - m_dwUpState = CFWL_PartState_Disabled; - } - } else { - if (bEnable) { - m_dwDnState = CFWL_PartState_Normal; - } else { - m_dwDnState = CFWL_PartState_Disabled; - } - } + if (bUp) + m_dwUpState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; + else + m_dwDnState = bEnable ? CFWL_PartState_Normal : CFWL_PartState_Disabled; + return FWL_Error::Succeeded; } FX_BOOL IFWL_SpinButton::IsButtonEnable(FX_BOOL bUp) { - if (bUp) { + if (bUp) return (m_dwUpState != CFWL_PartState_Disabled); - } return (m_dwDnState != CFWL_PartState_Disabled); } @@ -146,9 +135,9 @@ void IFWL_SpinButton::DrawUpButton(CFX_Graphics* pGraphics, params.m_iPart = CFWL_Part::UpButton; params.m_pGraphics = pGraphics; params.m_dwStates = m_dwUpState + 1; - if (pMatrix) { + if (pMatrix) params.m_matrix.Concat(*pMatrix); - } + params.m_rtPart = m_rtUpButton; pTheme->DrawBackground(¶ms); } @@ -161,17 +150,14 @@ void IFWL_SpinButton::DrawDownButton(CFX_Graphics* pGraphics, params.m_iPart = CFWL_Part::DownButton; params.m_pGraphics = pGraphics; params.m_dwStates = m_dwDnState + 1; - if (pMatrix) { + if (pMatrix) params.m_matrix.Concat(*pMatrix); - } + params.m_rtPart = m_rtDnButton; pTheme->DrawBackground(¶ms); } -CFWL_SpinButtonImpDelegate::CFWL_SpinButtonImpDelegate(IFWL_SpinButton* pOwner) - : m_pOwner(pOwner) {} - -void CFWL_SpinButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { +void IFWL_SpinButton::OnProcessMessage(CFWL_Message* pMessage) { if (!pMessage) return; @@ -188,22 +174,18 @@ void CFWL_SpinButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { case CFWL_MessageType::Mouse: { CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); switch (pMsg->m_dwCmd) { - case FWL_MouseCommand::LeftButtonDown: { + case FWL_MouseCommand::LeftButtonDown: OnLButtonDown(pMsg); break; - } - case FWL_MouseCommand::LeftButtonUp: { + case FWL_MouseCommand::LeftButtonUp: OnLButtonUp(pMsg); break; - } - case FWL_MouseCommand::Move: { + case FWL_MouseCommand::Move: OnMouseMove(pMsg); break; - } - case FWL_MouseCommand::Leave: { + case FWL_MouseCommand::Leave: OnMouseLeave(pMsg); break; - } default: break; } @@ -215,192 +197,179 @@ void CFWL_SpinButtonImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { OnKeyDown(pKey); break; } - default: { break; } + default: + break; } - CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); + IFWL_Widget::OnProcessMessage(pMessage); } -void CFWL_SpinButtonImpDelegate::OnProcessEvent(CFWL_Event* pEvent) {} - -void CFWL_SpinButtonImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - m_pOwner->DrawWidget(pGraphics, pMatrix); +void IFWL_SpinButton::OnDrawWidget(CFX_Graphics* pGraphics, + const CFX_Matrix* pMatrix) { + DrawWidget(pGraphics, pMatrix); } -void CFWL_SpinButtonImpDelegate::OnFocusChanged(CFWL_Message* pMsg, - FX_BOOL bSet) { - if (bSet) { - m_pOwner->m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); - } else { - m_pOwner->m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); +void IFWL_SpinButton::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) { + if (bSet) + m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); + else + m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); + + Repaint(&m_rtClient); } -void CFWL_SpinButtonImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { - m_pOwner->m_bLButtonDwn = TRUE; - m_pOwner->SetGrab(TRUE); - m_pOwner->SetFocus(TRUE); - if (!m_pOwner->m_pProperties->m_pDataProvider) +void IFWL_SpinButton::OnLButtonDown(CFWL_MsgMouse* pMsg) { + m_bLButtonDwn = TRUE; + SetGrab(TRUE); + SetFocus(TRUE); + if (!m_pProperties->m_pDataProvider) return; - FX_BOOL bUpPress = (m_pOwner->m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pOwner->IsButtonEnable(TRUE)); - FX_BOOL bDnPress = (m_pOwner->m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && - m_pOwner->IsButtonEnable(FALSE)); - if (!bUpPress && !bDnPress) { + + FX_BOOL bUpPress = + (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnable(TRUE)); + FX_BOOL bDnPress = + (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy) && IsButtonEnable(FALSE)); + if (!bUpPress && !bDnPress) return; - } if (bUpPress) { - m_pOwner->m_iButtonIndex = 0; - m_pOwner->m_dwUpState = CFWL_PartState_Pressed; + m_iButtonIndex = 0; + m_dwUpState = CFWL_PartState_Pressed; } if (bDnPress) { - m_pOwner->m_iButtonIndex = 1; - m_pOwner->m_dwDnState = CFWL_PartState_Pressed; + m_iButtonIndex = 1; + m_dwDnState = CFWL_PartState_Pressed; } CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pOwner; + wmPosChanged.m_pSrcTarget = this; wmPosChanged.m_bUp = bUpPress; - m_pOwner->DispatchEvent(&wmPosChanged); - m_pOwner->Repaint(bUpPress ? &m_pOwner->m_rtUpButton - : &m_pOwner->m_rtDnButton); - m_pOwner->m_pTimerInfo = m_pOwner->m_Timer.StartTimer(kElapseTime, true); + DispatchEvent(&wmPosChanged); + Repaint(bUpPress ? &m_rtUpButton : &m_rtDnButton); + m_pTimerInfo = m_Timer.StartTimer(kElapseTime, true); } -void CFWL_SpinButtonImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStates & CFWL_PartState_Disabled) { +void IFWL_SpinButton::OnLButtonUp(CFWL_MsgMouse* pMsg) { + if (m_pProperties->m_dwStates & CFWL_PartState_Disabled) return; - } - m_pOwner->m_bLButtonDwn = FALSE; - m_pOwner->SetGrab(FALSE); - m_pOwner->SetFocus(FALSE); - if (m_pOwner->m_pTimerInfo) { - m_pOwner->m_pTimerInfo->StopTimer(); - m_pOwner->m_pTimerInfo = nullptr; + + m_bLButtonDwn = FALSE; + SetGrab(FALSE); + SetFocus(FALSE); + if (m_pTimerInfo) { + m_pTimerInfo->StopTimer(); + m_pTimerInfo = nullptr; } FX_BOOL bRepaint = FALSE; CFX_RectF rtInvalidate; - if (m_pOwner->m_dwUpState == CFWL_PartState_Pressed && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = CFWL_PartState_Normal; + if (m_dwUpState == CFWL_PartState_Pressed && IsButtonEnable(TRUE)) { + m_dwUpState = CFWL_PartState_Normal; bRepaint = TRUE; - rtInvalidate = m_pOwner->m_rtUpButton; - } else if (m_pOwner->m_dwDnState == CFWL_PartState_Pressed && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = CFWL_PartState_Normal; + rtInvalidate = m_rtUpButton; + } else if (m_dwDnState == CFWL_PartState_Pressed && IsButtonEnable(FALSE)) { + m_dwDnState = CFWL_PartState_Normal; bRepaint = TRUE; - rtInvalidate = m_pOwner->m_rtDnButton; - } - if (bRepaint) { - m_pOwner->Repaint(&rtInvalidate); + rtInvalidate = m_rtDnButton; } + if (bRepaint) + Repaint(&rtInvalidate); } -void CFWL_SpinButtonImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { - if (!m_pOwner->m_pProperties->m_pDataProvider) +void IFWL_SpinButton::OnMouseMove(CFWL_MsgMouse* pMsg) { + if (!m_pProperties->m_pDataProvider) return; - if (m_pOwner->m_bLButtonDwn) { + if (m_bLButtonDwn) return; - } + FX_BOOL bRepaint = FALSE; CFX_RectF rtInvlidate; rtInvlidate.Reset(); - if (m_pOwner->m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsButtonEnable(TRUE)) { - if (m_pOwner->m_dwUpState == CFWL_PartState_Hovered) { - m_pOwner->m_dwUpState = CFWL_PartState_Hovered; + if (m_rtUpButton.Contains(pMsg->m_fx, pMsg->m_fy)) { + if (IsButtonEnable(TRUE)) { + if (m_dwUpState == CFWL_PartState_Hovered) { + m_dwUpState = CFWL_PartState_Hovered; bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtUpButton; + rtInvlidate = m_rtUpButton; } - if (m_pOwner->m_dwDnState != CFWL_PartState_Normal && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = CFWL_PartState_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtDnButton); - } else { - rtInvlidate = m_pOwner->m_rtDnButton; - } + if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnable(FALSE)) { + m_dwDnState = CFWL_PartState_Normal; + if (bRepaint) + rtInvlidate.Union(m_rtDnButton); + else + rtInvlidate = m_rtDnButton; + bRepaint = TRUE; } } - if (!m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->EnableButton(FALSE, FALSE); - } - } else if (m_pOwner->m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { - if (m_pOwner->IsButtonEnable(FALSE)) { - if (m_pOwner->m_dwDnState != CFWL_PartState_Hovered) { - m_pOwner->m_dwDnState = CFWL_PartState_Hovered; + if (!IsButtonEnable(FALSE)) + EnableButton(FALSE, FALSE); + + } else if (m_rtDnButton.Contains(pMsg->m_fx, pMsg->m_fy)) { + if (IsButtonEnable(FALSE)) { + if (m_dwDnState != CFWL_PartState_Hovered) { + m_dwDnState = CFWL_PartState_Hovered; bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtDnButton; + rtInvlidate = m_rtDnButton; } - if (m_pOwner->m_dwUpState != CFWL_PartState_Normal && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = CFWL_PartState_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtUpButton); - } else { - rtInvlidate = m_pOwner->m_rtUpButton; - } + if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnable(TRUE)) { + m_dwUpState = CFWL_PartState_Normal; + if (bRepaint) + rtInvlidate.Union(m_rtUpButton); + else + rtInvlidate = m_rtUpButton; bRepaint = TRUE; } } - } else if (m_pOwner->m_dwUpState != CFWL_PartState_Normal || - m_pOwner->m_dwDnState != CFWL_PartState_Normal) { - if (m_pOwner->m_dwUpState != CFWL_PartState_Normal) { - m_pOwner->m_dwUpState = CFWL_PartState_Normal; + } else if (m_dwUpState != CFWL_PartState_Normal || + m_dwDnState != CFWL_PartState_Normal) { + if (m_dwUpState != CFWL_PartState_Normal) { + m_dwUpState = CFWL_PartState_Normal; bRepaint = TRUE; - rtInvlidate = m_pOwner->m_rtUpButton; + rtInvlidate = m_rtUpButton; } - if (m_pOwner->m_dwDnState != CFWL_PartState_Normal) { - m_pOwner->m_dwDnState = CFWL_PartState_Normal; - if (bRepaint) { - rtInvlidate.Union(m_pOwner->m_rtDnButton); - } else { - rtInvlidate = m_pOwner->m_rtDnButton; - } + if (m_dwDnState != CFWL_PartState_Normal) { + m_dwDnState = CFWL_PartState_Normal; + if (bRepaint) + rtInvlidate.Union(m_rtDnButton); + else + rtInvlidate = m_rtDnButton; + bRepaint = TRUE; } } - if (bRepaint) { - m_pOwner->Repaint(&rtInvlidate); - } + if (bRepaint) + Repaint(&rtInvlidate); } -void CFWL_SpinButtonImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { +void IFWL_SpinButton::OnMouseLeave(CFWL_MsgMouse* pMsg) { if (!pMsg) return; - if (m_pOwner->m_dwUpState != CFWL_PartState_Normal && - m_pOwner->IsButtonEnable(TRUE)) { - m_pOwner->m_dwUpState = CFWL_PartState_Normal; - } - if (m_pOwner->m_dwDnState != CFWL_PartState_Normal && - m_pOwner->IsButtonEnable(FALSE)) { - m_pOwner->m_dwDnState = CFWL_PartState_Normal; - } - m_pOwner->Repaint(&m_pOwner->m_rtClient); + if (m_dwUpState != CFWL_PartState_Normal && IsButtonEnable(TRUE)) + m_dwUpState = CFWL_PartState_Normal; + if (m_dwDnState != CFWL_PartState_Normal && IsButtonEnable(FALSE)) + m_dwDnState = CFWL_PartState_Normal; + + Repaint(&m_rtClient); } -void CFWL_SpinButtonImpDelegate::OnKeyDown(CFWL_MsgKey* pMsg) { - if (!m_pOwner->m_pProperties->m_pDataProvider) +void IFWL_SpinButton::OnKeyDown(CFWL_MsgKey* pMsg) { + if (!m_pProperties->m_pDataProvider) return; + FX_BOOL bUp = pMsg->m_dwKeyCode == FWL_VKEY_Up || pMsg->m_dwKeyCode == FWL_VKEY_Left; FX_BOOL bDown = pMsg->m_dwKeyCode == FWL_VKEY_Down || pMsg->m_dwKeyCode == FWL_VKEY_Right; - if (!bUp && !bDown) { + if (!bUp && !bDown) return; - } - FX_BOOL bUpEnable = m_pOwner->IsButtonEnable(TRUE); - FX_BOOL bDownEnable = m_pOwner->IsButtonEnable(FALSE); - if (!bUpEnable && !bDownEnable) { + + FX_BOOL bUpEnable = IsButtonEnable(TRUE); + FX_BOOL bDownEnable = IsButtonEnable(FALSE); + if (!bUpEnable && !bDownEnable) return; - } + CFWL_EvtSpbClick wmPosChanged; - wmPosChanged.m_pSrcTarget = m_pOwner; + wmPosChanged.m_pSrcTarget = this; wmPosChanged.m_bUp = bUpEnable; - m_pOwner->DispatchEvent(&wmPosChanged); - m_pOwner->Repaint(bUpEnable ? &m_pOwner->m_rtUpButton - : &m_pOwner->m_rtDnButton); + DispatchEvent(&wmPosChanged); + Repaint(bUpEnable ? &m_rtUpButton : &m_rtDnButton); } IFWL_SpinButton::Timer::Timer(IFWL_SpinButton* pToolTip) |