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 |