| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fwl/core/cfwl_scrollbar.h" | 7 #include "xfa/fwl/core/cfwl_scrollbar.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 DrawThumb(pGraphics, pTheme, pMatrix); | 108 DrawThumb(pGraphics, pTheme, pMatrix); |
| 109 } | 109 } |
| 110 | 110 |
| 111 void CFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { | 111 void CFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { |
| 112 m_fTrackPos = fTrackPos; | 112 m_fTrackPos = fTrackPos; |
| 113 CalcThumbButtonRect(m_rtThumb); | 113 CalcThumbButtonRect(m_rtThumb); |
| 114 CalcMinTrackRect(m_rtMinTrack); | 114 CalcMinTrackRect(m_rtMinTrack); |
| 115 CalcMaxTrackRect(m_rtMaxTrack); | 115 CalcMaxTrackRect(m_rtMaxTrack); |
| 116 } | 116 } |
| 117 | 117 |
| 118 bool CFWL_ScrollBar::DoScroll(FWL_SCBCODE dwCode, FX_FLOAT fPos) { | 118 bool CFWL_ScrollBar::DoScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos) { |
| 119 if (dwCode == FWL_SCBCODE::None) | 119 if (dwCode == CFWL_EvtScroll::Code::None) |
| 120 return false; | 120 return false; |
| 121 return OnScroll(dwCode, fPos); | 121 return OnScroll(dwCode, fPos); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void CFWL_ScrollBar::DrawTrack(CFX_Graphics* pGraphics, | 124 void CFWL_ScrollBar::DrawTrack(CFX_Graphics* pGraphics, |
| 125 IFWL_ThemeProvider* pTheme, | 125 IFWL_ThemeProvider* pTheme, |
| 126 bool bLower, | 126 bool bLower, |
| 127 const CFX_Matrix* pMatrix) { | 127 const CFX_Matrix* pMatrix) { |
| 128 CFWL_ThemeBackground param; | 128 CFWL_ThemeBackground param; |
| 129 param.m_pWidget = this; | 129 param.m_pWidget = this; |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 } | 344 } |
| 345 | 345 |
| 346 FX_FLOAT fMaxTrackWidth = m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2; | 346 FX_FLOAT fMaxTrackWidth = m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2; |
| 347 fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f; | 347 fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f; |
| 348 rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth, | 348 rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth, |
| 349 m_rtMaxTrack.height); | 349 m_rtMaxTrack.height); |
| 350 } | 350 } |
| 351 | 351 |
| 352 bool CFWL_ScrollBar::SendEvent() { | 352 bool CFWL_ScrollBar::SendEvent() { |
| 353 if (m_iMinButtonState == CFWL_PartState_Pressed) { | 353 if (m_iMinButtonState == CFWL_PartState_Pressed) { |
| 354 DoScroll(FWL_SCBCODE::StepBackward, m_fTrackPos); | 354 DoScroll(CFWL_EvtScroll::Code::StepBackward, m_fTrackPos); |
| 355 return false; | 355 return false; |
| 356 } | 356 } |
| 357 if (m_iMaxButtonState == CFWL_PartState_Pressed) { | 357 if (m_iMaxButtonState == CFWL_PartState_Pressed) { |
| 358 DoScroll(FWL_SCBCODE::StepForward, m_fTrackPos); | 358 DoScroll(CFWL_EvtScroll::Code::StepForward, m_fTrackPos); |
| 359 return false; | 359 return false; |
| 360 } | 360 } |
| 361 if (m_iMinTrackState == CFWL_PartState_Pressed) { | 361 if (m_iMinTrackState == CFWL_PartState_Pressed) { |
| 362 DoScroll(FWL_SCBCODE::PageBackward, m_fTrackPos); | 362 DoScroll(CFWL_EvtScroll::Code::PageBackward, m_fTrackPos); |
| 363 return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); | 363 return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); |
| 364 } | 364 } |
| 365 if (m_iMaxTrackState == CFWL_PartState_Pressed) { | 365 if (m_iMaxTrackState == CFWL_PartState_Pressed) { |
| 366 DoScroll(FWL_SCBCODE::PageForward, m_fTrackPos); | 366 DoScroll(CFWL_EvtScroll::Code::PageForward, m_fTrackPos); |
| 367 return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); | 367 return m_rtThumb.Contains(m_cpTrackPointX, m_cpTrackPointY); |
| 368 } | 368 } |
| 369 if (m_iMouseWheel) { | 369 if (m_iMouseWheel) { |
| 370 FWL_SCBCODE dwCode = m_iMouseWheel < 0 ? FWL_SCBCODE::StepForward | 370 CFWL_EvtScroll::Code dwCode = m_iMouseWheel < 0 |
| 371 : FWL_SCBCODE::StepBackward; | 371 ? CFWL_EvtScroll::Code::StepForward |
| 372 : CFWL_EvtScroll::Code::StepBackward; |
| 372 DoScroll(dwCode, m_fTrackPos); | 373 DoScroll(dwCode, m_fTrackPos); |
| 373 } | 374 } |
| 374 return true; | 375 return true; |
| 375 } | 376 } |
| 376 | 377 |
| 377 bool CFWL_ScrollBar::OnScroll(FWL_SCBCODE dwCode, FX_FLOAT fPos) { | 378 bool CFWL_ScrollBar::OnScroll(CFWL_EvtScroll::Code dwCode, FX_FLOAT fPos) { |
| 378 bool bRet = true; | 379 CFWL_EvtScroll ev(this); |
| 379 CFWL_EvtScroll ev; | |
| 380 ev.m_iScrollCode = dwCode; | 380 ev.m_iScrollCode = dwCode; |
| 381 ev.m_pSrcTarget = this; | |
| 382 ev.m_fPos = fPos; | 381 ev.m_fPos = fPos; |
| 383 ev.m_pRet = &bRet; | |
| 384 DispatchEvent(&ev); | 382 DispatchEvent(&ev); |
| 385 return bRet; | 383 return true; |
| 386 } | 384 } |
| 387 | 385 |
| 388 void CFWL_ScrollBar::OnProcessMessage(CFWL_Message* pMessage) { | 386 void CFWL_ScrollBar::OnProcessMessage(CFWL_Message* pMessage) { |
| 389 if (!pMessage) | 387 if (!pMessage) |
| 390 return; | 388 return; |
| 391 | 389 |
| 392 CFWL_MessageType dwMsgCode = pMessage->GetClassID(); | 390 CFWL_Message::Type type = pMessage->GetType(); |
| 393 if (dwMsgCode == CFWL_MessageType::Mouse) { | 391 if (type == CFWL_Message::Type::Mouse) { |
| 394 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); | 392 CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); |
| 395 switch (pMsg->m_dwCmd) { | 393 switch (pMsg->m_dwCmd) { |
| 396 case FWL_MouseCommand::LeftButtonDown: | 394 case FWL_MouseCommand::LeftButtonDown: |
| 397 OnLButtonDown(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); | 395 OnLButtonDown(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); |
| 398 break; | 396 break; |
| 399 case FWL_MouseCommand::LeftButtonUp: | 397 case FWL_MouseCommand::LeftButtonUp: |
| 400 OnLButtonUp(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); | 398 OnLButtonUp(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); |
| 401 break; | 399 break; |
| 402 case FWL_MouseCommand::Move: | 400 case FWL_MouseCommand::Move: |
| 403 OnMouseMove(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); | 401 OnMouseMove(pMsg->m_dwFlags, pMsg->m_fx, pMsg->m_fy); |
| 404 break; | 402 break; |
| 405 case FWL_MouseCommand::Leave: | 403 case FWL_MouseCommand::Leave: |
| 406 OnMouseLeave(); | 404 OnMouseLeave(); |
| 407 break; | 405 break; |
| 408 default: | 406 default: |
| 409 break; | 407 break; |
| 410 } | 408 } |
| 411 } else if (dwMsgCode == CFWL_MessageType::MouseWheel) { | 409 } else if (type == CFWL_Message::Type::MouseWheel) { |
| 412 CFWL_MsgMouseWheel* pMsg = static_cast<CFWL_MsgMouseWheel*>(pMessage); | 410 CFWL_MsgMouseWheel* pMsg = static_cast<CFWL_MsgMouseWheel*>(pMessage); |
| 413 OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX, | 411 OnMouseWheel(pMsg->m_fx, pMsg->m_fy, pMsg->m_dwFlags, pMsg->m_fDeltaX, |
| 414 pMsg->m_fDeltaY); | 412 pMsg->m_fDeltaY); |
| 415 } | 413 } |
| 416 } | 414 } |
| 417 | 415 |
| 418 void CFWL_ScrollBar::OnDrawWidget(CFX_Graphics* pGraphics, | 416 void CFWL_ScrollBar::OnDrawWidget(CFX_Graphics* pGraphics, |
| 419 const CFX_Matrix* pMatrix) { | 417 const CFX_Matrix* pMatrix) { |
| 420 DrawWidget(pGraphics, pMatrix); | 418 DrawWidget(pGraphics, pMatrix); |
| 421 } | 419 } |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 int32_t& iState, | 498 int32_t& iState, |
| 501 FX_FLOAT fx, | 499 FX_FLOAT fx, |
| 502 FX_FLOAT fy) { | 500 FX_FLOAT fy) { |
| 503 int32_t iNewState = | 501 int32_t iNewState = |
| 504 rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered : CFWL_PartState_Normal; | 502 rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered : CFWL_PartState_Normal; |
| 505 if (iState == iNewState) | 503 if (iState == iNewState) |
| 506 return; | 504 return; |
| 507 | 505 |
| 508 iState = iNewState; | 506 iState = iNewState; |
| 509 Repaint(&rtItem); | 507 Repaint(&rtItem); |
| 510 OnScroll(FWL_SCBCODE::EndScroll, m_fTrackPos); | 508 OnScroll(CFWL_EvtScroll::Code::EndScroll, m_fTrackPos); |
| 511 } | 509 } |
| 512 | 510 |
| 513 void CFWL_ScrollBar::DoMouseMove(int32_t iItem, | 511 void CFWL_ScrollBar::DoMouseMove(int32_t iItem, |
| 514 const CFX_RectF& rtItem, | 512 const CFX_RectF& rtItem, |
| 515 int32_t& iState, | 513 int32_t& iState, |
| 516 FX_FLOAT fx, | 514 FX_FLOAT fx, |
| 517 FX_FLOAT fy) { | 515 FX_FLOAT fy) { |
| 518 if (!m_bMouseDown) { | 516 if (!m_bMouseDown) { |
| 519 int32_t iNewState = rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered | 517 int32_t iNewState = rtItem.Contains(fx, fy) ? CFWL_PartState_Hovered |
| 520 : CFWL_PartState_Normal; | 518 : CFWL_PartState_Normal; |
| 521 if (iState == iNewState) | 519 if (iState == iNewState) |
| 522 return; | 520 return; |
| 523 | 521 |
| 524 iState = iNewState; | 522 iState = iNewState; |
| 525 Repaint(&rtItem); | 523 Repaint(&rtItem); |
| 526 } else if ((2 == iItem) && (m_iThumbButtonState == CFWL_PartState_Pressed)) { | 524 } else if ((2 == iItem) && (m_iThumbButtonState == CFWL_PartState_Pressed)) { |
| 527 FX_FLOAT fPos = GetTrackPointPos(fx, fy); | 525 FX_FLOAT fPos = GetTrackPointPos(fx, fy); |
| 528 m_fTrackPos = fPos; | 526 m_fTrackPos = fPos; |
| 529 OnScroll(FWL_SCBCODE::TrackPos, fPos); | 527 OnScroll(CFWL_EvtScroll::Code::TrackPos, fPos); |
| 530 } | 528 } |
| 531 } | 529 } |
| 532 | 530 |
| 533 void CFWL_ScrollBar::DoMouseLeave(int32_t iItem, | 531 void CFWL_ScrollBar::DoMouseLeave(int32_t iItem, |
| 534 const CFX_RectF& rtItem, | 532 const CFX_RectF& rtItem, |
| 535 int32_t& iState) { | 533 int32_t& iState) { |
| 536 if (iState == CFWL_PartState_Normal) | 534 if (iState == CFWL_PartState_Normal) |
| 537 return; | 535 return; |
| 538 | 536 |
| 539 iState = CFWL_PartState_Normal; | 537 iState = CFWL_PartState_Normal; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 554 | 552 |
| 555 void CFWL_ScrollBar::Timer::Run(CFWL_TimerInfo* pTimerInfo) { | 553 void CFWL_ScrollBar::Timer::Run(CFWL_TimerInfo* pTimerInfo) { |
| 556 CFWL_ScrollBar* pButton = static_cast<CFWL_ScrollBar*>(m_pWidget); | 554 CFWL_ScrollBar* pButton = static_cast<CFWL_ScrollBar*>(m_pWidget); |
| 557 | 555 |
| 558 if (pButton->m_pTimerInfo) | 556 if (pButton->m_pTimerInfo) |
| 559 pButton->m_pTimerInfo->StopTimer(); | 557 pButton->m_pTimerInfo->StopTimer(); |
| 560 | 558 |
| 561 if (!pButton->SendEvent()) | 559 if (!pButton->SendEvent()) |
| 562 pButton->m_pTimerInfo = StartTimer(0, true); | 560 pButton->m_pTimerInfo = StartTimer(0, true); |
| 563 } | 561 } |
| OLD | NEW |