Improvments to the item animation and to the painting (inspired by krunner).
svn path=/trunk/KDE/kdebase/workspace/; revision=1070080icc-effect-5.14.5
parent
4b7cfcf660
commit
10e6e014d9
|
@ -78,6 +78,7 @@ TabBoxView::TabBoxView( QWidget* parent )
|
||||||
m_selectionFrame->setEnabledBorders( Plasma::FrameSvg::AllBorders );
|
m_selectionFrame->setEnabledBorders( Plasma::FrameSvg::AllBorders );
|
||||||
|
|
||||||
m_animation = new QPropertyAnimation( this, "selectedItem", this );
|
m_animation = new QPropertyAnimation( this, "selectedItem", this );
|
||||||
|
m_animation->setEasingCurve( QEasingCurve::InOutQuad );
|
||||||
|
|
||||||
connect( tabBox, SIGNAL(configChanged()), this, SLOT(configChanged()));
|
connect( tabBox, SIGNAL(configChanged()), this, SLOT(configChanged()));
|
||||||
connect( m_animation, SIGNAL(valueChanged(QVariant)), SLOT(update()));
|
connect( m_animation, SIGNAL(valueChanged(QVariant)), SLOT(update()));
|
||||||
|
@ -93,20 +94,25 @@ void TabBoxView::paintEvent(QPaintEvent* e)
|
||||||
QPainter painter( this );
|
QPainter painter( this );
|
||||||
painter.setRenderHint(QPainter::Antialiasing);
|
painter.setRenderHint(QPainter::Antialiasing);
|
||||||
painter.setClipRect(e->rect());
|
painter.setClipRect(e->rect());
|
||||||
painter.save();
|
|
||||||
painter.setCompositionMode( QPainter::CompositionMode_Source );
|
|
||||||
painter.fillRect( rect(), Qt::transparent );
|
|
||||||
m_frame->resizeFrame( geometry().size() );
|
m_frame->resizeFrame( geometry().size() );
|
||||||
painter.setClipRegion( m_frame->mask() );
|
|
||||||
m_frame->paintFrame( &painter );
|
m_frame->paintFrame( &painter );
|
||||||
m_selectionFrame->resizeFrame( m_selectedItem.size() );
|
// and the selection item
|
||||||
painter.setCompositionMode( QPainter::CompositionMode_SourceOver );
|
|
||||||
m_selectionFrame->paintFrame( &painter,
|
m_selectionFrame->paintFrame( &painter,
|
||||||
m_tableView->geometry().topLeft() + m_selectedItem.topLeft() );
|
m_tableView->geometry().topLeft() + m_selectedItem.topLeft() );
|
||||||
painter.restore();
|
|
||||||
QWidget::paintEvent(e);
|
QWidget::paintEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TabBoxView::event( QEvent* event )
|
||||||
|
{
|
||||||
|
if( event->type() == QEvent::Paint )
|
||||||
|
{
|
||||||
|
QPainter p( this );
|
||||||
|
p.setCompositionMode( QPainter::CompositionMode_Source );
|
||||||
|
p.fillRect( rect(), Qt::transparent );
|
||||||
|
}
|
||||||
|
return QWidget::event( event );
|
||||||
|
}
|
||||||
|
|
||||||
void TabBoxView::updateGeometry()
|
void TabBoxView::updateGeometry()
|
||||||
{
|
{
|
||||||
if( m_tableView->model()->columnCount() == 0 || m_tableView->model()->rowCount() == 0 )
|
if( m_tableView->model()->columnCount() == 0 || m_tableView->model()->rowCount() == 0 )
|
||||||
|
@ -191,16 +197,22 @@ void TabBoxView::setCurrentIndex( QModelIndex index )
|
||||||
if( index.isValid() )
|
if( index.isValid() )
|
||||||
{
|
{
|
||||||
m_tableView->setCurrentIndex( index );
|
m_tableView->setCurrentIndex( index );
|
||||||
|
const QRect visualRect = m_tableView->visualRect( index );
|
||||||
if( m_selectedItem.isNull() )
|
if( m_selectedItem.isNull() )
|
||||||
m_selectedItem = m_tableView->visualRect( index );
|
m_selectedItem = visualRect;
|
||||||
if( m_animation->state() == QPropertyAnimation::Running )
|
if( m_animation->state() == QPropertyAnimation::Running )
|
||||||
m_animation->setEndValue( m_tableView->visualRect( index ) );
|
{
|
||||||
|
m_animation->stop();
|
||||||
|
m_selectedItem = visualRect;
|
||||||
|
update();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_animation->setStartValue( m_selectedItem );
|
m_animation->setStartValue( m_selectedItem );
|
||||||
m_animation->setEndValue( m_tableView->visualRect( index ) );
|
m_animation->setEndValue( visualRect );
|
||||||
m_animation->start();
|
m_animation->start();
|
||||||
}
|
}
|
||||||
|
m_selectionFrame->resizeFrame( visualRect.size() );
|
||||||
m_additionalView->setCurrentIndex( index );
|
m_additionalView->setCurrentIndex( index );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -321,7 +333,8 @@ QModelIndex TabBoxView::indexAt( QPoint pos )
|
||||||
void TabBoxView::setPreview( bool preview )
|
void TabBoxView::setPreview( bool preview )
|
||||||
{
|
{
|
||||||
m_preview = preview;
|
m_preview = preview;
|
||||||
m_frame->setImagePath( "dialogs/opaque/background" );
|
if( preview )
|
||||||
|
m_frame->setImagePath( "dialogs/opaque/background" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************
|
/********************************************************
|
||||||
|
|
|
@ -67,6 +67,7 @@ class TabBoxView : public QWidget
|
||||||
TabBoxView( QWidget* parent = 0 );
|
TabBoxView( QWidget* parent = 0 );
|
||||||
~TabBoxView();
|
~TabBoxView();
|
||||||
virtual void paintEvent( QPaintEvent* e );
|
virtual void paintEvent( QPaintEvent* e );
|
||||||
|
virtual bool event( QEvent* event );
|
||||||
virtual QSize sizeHint() const;
|
virtual QSize sizeHint() const;
|
||||||
void updateGeometry();
|
void updateGeometry();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue