AbstractNotificationWidget::AbstractNotificationWidget() : QFrame(), m_position(0), slide(100, this) { setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setAttribute(Qt::WA_DeleteOnClose, true); //setAttribute(Qt::WA_TranslucentBackground, true); setAttribute(Qt::WA_X11NetWmWindowTypeNotification, true); setFocusPolicy(Qt::NoFocus); slide.setCurveShape(QTimeLine::EaseOutCurve); slide.setUpdateInterval(1000/50); connect(&slide, SIGNAL(valueChanged(qreal)), SLOT(sliding(qreal))); connect(&slide, SIGNAL(finished()), SLOT(slideFinished())); }
void GuiSlider::onMessage(gui::Message* message) { // anywhere onMouseUp if( message->event == gui::onMouseUp ) { if( _scrolling ) _scrolling = false; } // anywhere onMouseMove if scrolling is enabled if( _scrolling && message->event == gui::onMouseMove ) { // slider vector Flector sliding( float(_upperRect.left - _lowerRect.left), float(_upperRect.top - _lowerRect.top) ); Flector slidingN; D3DXVec2Normalize( &slidingN, &sliding ); // motion offset Flector offset( float( Gui::instance->getMouseDX() ), float( Gui::instance->getMouseDY() ) ); // motion offset in slider space Flector slidingOffset = slidingN * D3DXVec2Dot( &slidingN, &offset ); // parametric motion offset (0..1) float pSlidingOffset = D3DXVec2Length( &slidingOffset ) / D3DXVec2Length( &sliding ); if( D3DXVec2Dot( &slidingN, &offset ) < 0 ) pSlidingOffset *= -1; // final update setPosition( getPosition() + pSlidingOffset * getUpperLimit() - getLowerLimit() ); // messaging gui::Message message; message.origin = this; message.event = gui::onSlide; Gui::instance->pushMessage( &message ); } // mousedown from scroll button if( _scrollButton && message->event == gui::onMouseDown && message->origin == _scrollButton->getPanel() ) { _scrolling = true; } }