Changeset 77290 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Feb 12, 2019 6:56:16 PM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 128807
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/widgets/graphics
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsScrollBar.cpp
r77285 r77290 219 219 , m_iHoverOffTimerId(0) 220 220 , m_iHoveringValue(0) 221 #ifdef VBOX_WS_MAC 222 , m_fRevealed(false) 223 , m_iRevealingValue(0) 224 , m_iRevealOnTimerId(0) 225 , m_iRevealOffTimerId(0) 226 #endif 221 227 { 222 228 pScene->addItem(this); … … 239 245 , m_iHoverOffTimerId(0) 240 246 , m_iHoveringValue(0) 247 #ifdef VBOX_WS_MAC 248 , m_fRevealed(false) 249 , m_iRevealingValue(0) 250 , m_iRevealOnTimerId(0) 251 , m_iRevealOffTimerId(0) 252 #endif 241 253 { 242 254 prepare(); … … 407 419 update(); 408 420 } 421 422 #ifdef VBOX_WS_MAC 423 424 else 425 426 /* If that is reveal-in timer: */ 427 if (m_iRevealOnTimerId != 0 && iTimerId == m_iRevealOnTimerId) 428 { 429 /* Wait for timer no more: */ 430 m_iRevealOnTimerId = 0; 431 } 432 433 else 434 435 /* If that is reveal-out timer: */ 436 if (m_iRevealOffTimerId != 0 && iTimerId == m_iRevealOffTimerId) 437 { 438 /* Wait for timer no more: */ 439 m_iRevealOffTimerId = 0; 440 /* Emit reveal-out signal if not hovered or was reinvoked not long time ago: */ 441 if (!m_fHovered && !m_pToken->isHovered() && m_iRevealOnTimerId == 0) 442 emit sigRevealLeave(); 443 /* Restart timer otherwise: */ 444 else 445 m_iRevealOffTimerId = startTimer(2000); 446 /* Update in any case: */ 447 update(); 448 } 449 450 #endif 409 451 } 410 452 … … 506 548 m_pToken->show(); 507 549 } 550 551 #ifdef VBOX_WS_MAC 552 void UIGraphicsScrollBar::sltHandleRevealingStart() 553 { 554 /* Only if not yet revealed, that way we 555 * make sure trigger emitted just once: */ 556 if (!m_fRevealed) 557 { 558 /* Mark token revealed: */ 559 m_fRevealed = true; 560 /* Emit reveal signal immediately: */ 561 emit sigRevealEnter(); 562 } 563 564 /* Restart fresh sustain timer: */ 565 m_iRevealOnTimerId = startTimer(1000); 566 } 567 568 void UIGraphicsScrollBar::sltStateEnteredFaded() 569 { 570 /* Mark token faded: */ 571 m_fRevealed = false; 572 } 573 574 void UIGraphicsScrollBar::sltStateEnteredRevealed() 575 { 576 /* Start reveal-out timer: */ 577 m_iRevealOffTimerId = startTimer(2000); 578 } 579 #endif /* VBOX_WS_MAC */ 508 580 509 581 void UIGraphicsScrollBar::prepare() … … 580 652 { 581 653 prepareHoveringAnimation(); 654 #ifdef VBOX_WS_MAC 655 prepareRevealingAnimation(); 656 #endif 582 657 } 583 658 … … 653 728 } 654 729 } 730 731 #ifdef VBOX_WS_MAC 732 void UIGraphicsScrollBar::prepareRevealingAnimation() 733 { 734 /* Create revealing animation machine: */ 735 QStateMachine *pRevealingMachine = new QStateMachine(this); 736 if (pRevealingMachine) 737 { 738 /* Create 'faded' state: */ 739 QState *pStateFaded = new QState(pRevealingMachine); 740 /* Create 'revealed' state: */ 741 QState *pStateRevealed = new QState(pRevealingMachine); 742 743 /* Configure 'faded' state: */ 744 if (pStateFaded) 745 { 746 /* When we entering fade state => we assigning revealingValue to 0: */ 747 pStateFaded->assignProperty(this, "revealingValue", 0); 748 connect(pStateFaded, &QState::propertiesAssigned, this, &UIGraphicsScrollBar::sltStateEnteredFaded); 749 750 /* Add state transitions: */ 751 QSignalTransition *pFadeToRevealed = pStateFaded->addTransition(this, SIGNAL(sigRevealEnter()), pStateRevealed); 752 if (pFadeToRevealed) 753 { 754 /* Create forward animation: */ 755 QPropertyAnimation *pRevealingAnimationForward = new QPropertyAnimation(this, "revealingValue", this); 756 if (pRevealingAnimationForward) 757 { 758 pRevealingAnimationForward->setDuration(200); 759 pRevealingAnimationForward->setStartValue(0); 760 pRevealingAnimationForward->setEndValue(100); 761 762 /* Add to transition: */ 763 pFadeToRevealed->addAnimation(pRevealingAnimationForward); 764 } 765 } 766 } 767 768 /* Configure 'revealed' state: */ 769 if (pStateRevealed) 770 { 771 /* When we entering revealed state => we assigning revealingValue to 100: */ 772 pStateRevealed->assignProperty(this, "revealingValue", 100); 773 connect(pStateRevealed, &QState::propertiesAssigned, this, &UIGraphicsScrollBar::sltStateEnteredRevealed); 774 775 /* Add state transitions: */ 776 QSignalTransition *pRevealedToFaded = pStateRevealed->addTransition(this, SIGNAL(sigRevealLeave()), pStateFaded); 777 if (pRevealedToFaded) 778 { 779 /* Create backward animation: */ 780 QPropertyAnimation *pRevealingAnimationBackward = new QPropertyAnimation(this, "revealingValue", this); 781 if (pRevealingAnimationBackward) 782 { 783 pRevealingAnimationBackward->setDuration(200); 784 pRevealingAnimationBackward->setStartValue(100); 785 pRevealingAnimationBackward->setEndValue(0); 786 787 /* Add to transition: */ 788 pRevealedToFaded->addAnimation(pRevealingAnimationBackward); 789 } 790 } 791 } 792 793 /* Initial state is 'fade': */ 794 pRevealingMachine->setInitialState(pStateFaded); 795 /* Start state-machine: */ 796 pRevealingMachine->start(); 797 } 798 799 /* Install self-listener: */ 800 connect(this, &UIGraphicsScrollBar::sigValueChanged, this, &UIGraphicsScrollBar::sltHandleRevealingStart); 801 } 802 #endif /* VBOX_WS_MAC */ 655 803 656 804 void UIGraphicsScrollBar::updateExtent() … … 770 918 { 771 919 QColor tokenColor = pal.color(QPalette::Active, QPalette::Mid); 920 tokenColor.setAlpha(255 * ((double)m_iRevealingValue / 100)); 772 921 tokenColor = tokenColor.darker(140); 773 922 QRectF tokenRectangle = QRect(actualTokenPosition(), QSize(m_iExtent, 2 * m_iExtent)); -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/graphics/UIGraphicsScrollBar.h
r77285 r77290 35 35 Q_OBJECT; 36 36 Q_PROPERTY(int hoveringValue READ hoveringValue WRITE setHoveringValue); 37 #ifdef VBOX_WS_MAC 38 Q_PROPERTY(int revealingValue READ revealingValue WRITE setRevealingValue); 39 #endif 37 40 38 41 signals: … … 42 45 /** Notifies listeners about hover leave. */ 43 46 void sigHoverLeave(); 47 48 #ifdef VBOX_WS_MAC 49 /** Notifies listeners about token should be revealed. */ 50 void sigRevealEnter(); 51 /** Notifies listeners about token should be faded. */ 52 void sigRevealLeave(); 53 #endif 44 54 45 55 /** Notifies listeners about @a iValue has changed. */ … … 114 124 /** Handles hovered state entering. */ 115 125 void sltStateEnteredHovered(); 126 127 #ifdef VBOX_WS_MAC 128 /** Handles signals to start revealing. */ 129 void sltHandleRevealingStart(); 130 /** Handles faded state entering. */ 131 void sltStateEnteredFaded(); 132 /** Handles revealed state entering. */ 133 void sltStateEnteredRevealed(); 134 #endif 116 135 117 136 private: … … 129 148 /** Prepares hovering animation. */ 130 149 void prepareHoveringAnimation(); 150 #ifdef VBOX_WS_MAC 151 /** Prepares revealing animation. */ 152 void prepareRevealingAnimation(); 153 #endif 131 154 132 155 /** Updates scroll-bar extent value. */ … … 150 173 int hoveringValue() const { return m_iHoveringValue; } 151 174 175 #ifdef VBOX_WS_MAC 176 /** Defines revealing animation @a iValue. */ 177 void setRevealingValue(int iValue) { m_iRevealingValue = iValue; update(); } 178 /** Returns revealing animation value. */ 179 int revealingValue() const { return m_iRevealingValue; } 180 #endif 181 152 182 /** Holds the orientation. */ 153 183 const Qt::Orientation m_enmOrientation; … … 181 211 /** Holds the hovering animation value. */ 182 212 int m_iHoveringValue; 213 214 #ifdef VBOX_WS_MAC 215 /** Holds whether token is revealed. */ 216 bool m_fRevealed; 217 /** Holds the revealing animation value. */ 218 int m_iRevealingValue; 219 /** Holds the reveal-out timer id. */ 220 int m_iRevealOnTimerId; 221 /** Holds the reveal-out timer id. */ 222 int m_iRevealOffTimerId; 223 #endif 183 224 }; 184 225
Note:
See TracChangeset
for help on using the changeset viewer.