Removed oxygentimeline (was not working). Use qtimeline directly, to handle animations. It is simpler, and it is actually working. Also changed 'repaint' into 'update' for the slot connected to the timeLine FrameChanged signal. More efficient.
svn path=/trunk/KDE/kdebase/workspace/; revision=1024648
This commit is contained in:
parent
ae06efee25
commit
45f5f00f9f
5 changed files with 22 additions and 202 deletions
|
@ -14,7 +14,6 @@ set(kwin_oxygen_SRCS
|
|||
oxygenexceptionlist.cpp
|
||||
oxygenshadowconfiguration.cpp
|
||||
oxygensizegrip.cpp
|
||||
oxygentimeline.cpp
|
||||
x11util.cpp
|
||||
)
|
||||
|
||||
|
|
|
@ -65,8 +65,8 @@ namespace Oxygen
|
|||
|
||||
timeLine_.setFrameRange( 0, 1000 );
|
||||
timeLine_.setCurveShape( QTimeLine::EaseInOutCurve );
|
||||
connect( &timeLine_, SIGNAL( currentIndexChanged( int ) ), SLOT( repaint() ) );
|
||||
connect( &timeLine_, SIGNAL( finished() ), SLOT( repaint() ) );
|
||||
connect( &timeLine_, SIGNAL( frameChanged( int ) ), SLOT( update() ) );
|
||||
connect( &timeLine_, SIGNAL( finished() ), SLOT( update() ) );
|
||||
|
||||
}
|
||||
|
||||
|
@ -111,9 +111,13 @@ namespace Oxygen
|
|||
{
|
||||
KCommonDecorationButton::enterEvent(e);
|
||||
if (status_ != Oxygen::Pressed) status_ = Oxygen::Hovered;
|
||||
if( timeLine_.state() != OxygenTimeLine::NotRunning ) timeLine_.stop();
|
||||
timeLine_.setDirection( OxygenTimeLine::Forward );
|
||||
timeLine_.start();
|
||||
if( timeLine_.state() == QTimeLine::NotRunning )
|
||||
{
|
||||
timeLine_.setDirection( QTimeLine::Forward );
|
||||
timeLine_.start();
|
||||
} else if( timeLine_.direction() == QTimeLine::Backward ) {
|
||||
timeLine_.toggleDirection();
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
|
@ -123,9 +127,13 @@ namespace Oxygen
|
|||
KCommonDecorationButton::leaveEvent(e);
|
||||
status_ = Oxygen::Normal;
|
||||
|
||||
if( timeLine_.state() != OxygenTimeLine::NotRunning ) timeLine_.stop();
|
||||
timeLine_.setDirection( OxygenTimeLine::Backward );
|
||||
timeLine_.start();
|
||||
if( timeLine_.state() == QTimeLine::NotRunning )
|
||||
{
|
||||
timeLine_.setDirection( QTimeLine::Backward );
|
||||
timeLine_.start();
|
||||
} else if( timeLine_.direction() == QTimeLine::Forward ) {
|
||||
timeLine_.toggleDirection();
|
||||
}
|
||||
|
||||
update();
|
||||
|
||||
|
@ -199,9 +207,9 @@ namespace Oxygen
|
|||
KColorScheme(palette.currentColorGroup()).foreground(KColorScheme::NegativeText).color():
|
||||
KColorScheme(palette.currentColorGroup()).decoration(KColorScheme::HoverColor).color();
|
||||
|
||||
if( timeLine_.state() == OxygenTimeLine::Running )
|
||||
if( timeLine_.state() == QTimeLine::Running )
|
||||
{
|
||||
qreal ratio( qreal( timeLine_.currentIndex() )/qreal( timeLine_.maxIndex() ) );
|
||||
qreal ratio( qreal( timeLine_.currentFrame() )/qreal( timeLine_.endFrame() ) );
|
||||
color = KColorUtils::mix( color, glow, ratio );
|
||||
} else if( status_ == Oxygen::Hovered ) color = glow;
|
||||
|
||||
|
@ -216,10 +224,10 @@ namespace Oxygen
|
|||
painter.drawPixmap(0, 0, helper_.windecoButton(bt, status_ == Oxygen::Pressed, (21.0*client_.configuration().buttonSize())/22 ) );
|
||||
|
||||
// draw glow on hover
|
||||
if( timeLine_.state() == OxygenTimeLine::Running )
|
||||
if( timeLine_.state() == QTimeLine::Running )
|
||||
{
|
||||
|
||||
qreal ratio( qreal( timeLine_.currentIndex() )/qreal( timeLine_.maxIndex() ) );
|
||||
qreal ratio( qreal( timeLine_.currentFrame() )/qreal( timeLine_.endFrame() ) );
|
||||
painter.save();
|
||||
painter.setOpacity( ratio );
|
||||
painter.drawPixmap(0, 0, helper_.windecoButtonGlow(glow, (21.0*client_.configuration().buttonSize())/22));
|
||||
|
|
|
@ -29,10 +29,10 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <kcommondecoration.h>
|
||||
#include <QTimeLine>
|
||||
|
||||
#include "oxygen.h"
|
||||
#include "oxygenclient.h"
|
||||
#include "oxygentimeline.h"
|
||||
|
||||
namespace Oxygen
|
||||
{
|
||||
|
@ -112,7 +112,7 @@ namespace Oxygen
|
|||
QColor cachedButtonDetailColor_;
|
||||
|
||||
//! timeline used for smooth transitions
|
||||
OxygenTimeLine timeLine_;
|
||||
QTimeLine timeLine_;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// OxygenTimeLine.h
|
||||
// derive from QTimeLine and is used to perform smooth transitions
|
||||
// -------------------
|
||||
//
|
||||
// Copyright (c) 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "oxygentimeline.h"
|
||||
#include "oxygentimeline.moc"
|
||||
|
||||
#include <cassert>
|
||||
#include <KDebug>
|
||||
|
||||
namespace Oxygen
|
||||
{
|
||||
|
||||
//______________________________________________________
|
||||
OxygenTimeLine::OxygenTimeLine( int duration, QObject* parent ):
|
||||
QTimeLine( duration, parent ),
|
||||
direction_( Forward ),
|
||||
currentIndex_( 0 ),
|
||||
maxIndex_( 255 ),
|
||||
lastFrame_( 0 )
|
||||
{
|
||||
|
||||
// connections
|
||||
connect( this, SIGNAL( frameChanged( int ) ), SLOT( updateCurrentIndex( int ) ) );
|
||||
|
||||
}
|
||||
|
||||
//______________________________________________________
|
||||
void OxygenTimeLine::start( void )
|
||||
{
|
||||
assert( state() == NotRunning );
|
||||
lastFrame_ = 0;
|
||||
QTimeLine::start();
|
||||
}
|
||||
|
||||
//______________________________________________________
|
||||
void OxygenTimeLine::updateCurrentIndex( int currentFrame )
|
||||
{
|
||||
|
||||
// check interval
|
||||
if( currentFrame <= lastFrame_ ) lastFrame_ = 0;
|
||||
|
||||
// calculate step
|
||||
int step = (maxIndex()*( currentFrame - lastFrame_ ))/endFrame();
|
||||
if( direction_ == Backward ) step *= -1;
|
||||
|
||||
// update lastFrame
|
||||
lastFrame_ = currentFrame;
|
||||
|
||||
// check end conditions
|
||||
if( currentIndex_ + step <= 0 )
|
||||
{
|
||||
|
||||
currentIndex_ = 0;
|
||||
emit currentIndexChanged( currentIndex_ );
|
||||
stop();
|
||||
|
||||
} else if( currentIndex_ + step >= maxIndex_ ) {
|
||||
|
||||
currentIndex_ = maxIndex_;
|
||||
emit currentIndexChanged( currentIndex_ );
|
||||
stop();
|
||||
|
||||
} else {
|
||||
currentIndex_ += step;
|
||||
emit currentIndexChanged( currentIndex_ );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
#ifndef oxygentimeline_h
|
||||
#define oxygentimeline_h
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// OxygenTimeLine.h
|
||||
// derive from QTimeLine and is used to perform smooth transitions
|
||||
// -------------------
|
||||
//
|
||||
// Copyright (c) 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to
|
||||
// deal in the Software without restriction, including without limitation the
|
||||
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
// sell copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
// IN THE SOFTWARE.
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <QTimeLine>
|
||||
|
||||
namespace Oxygen
|
||||
{
|
||||
|
||||
class OxygenTimeLine: public QTimeLine
|
||||
{
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
//! constructor
|
||||
OxygenTimeLine( int duration, QObject* parent );
|
||||
|
||||
//! max number of Index
|
||||
void setMaxIndex( int value )
|
||||
{ maxIndex_ = value; }
|
||||
|
||||
//! max number of Index
|
||||
int maxIndex( void ) const
|
||||
{ return maxIndex_; }
|
||||
|
||||
//! current Index
|
||||
int currentIndex( void ) const
|
||||
{ return currentIndex_; }
|
||||
|
||||
//! direction used to update Index
|
||||
void setDirection( QTimeLine::Direction value )
|
||||
{ direction_ = value; }
|
||||
|
||||
//! start
|
||||
void start( void );
|
||||
|
||||
signals:
|
||||
|
||||
//! emitted whenever the current Index changed
|
||||
void currentIndexChanged( int );
|
||||
|
||||
protected slots:
|
||||
|
||||
//! connected to timeLine frameChanged
|
||||
void updateCurrentIndex( int );
|
||||
|
||||
private:
|
||||
|
||||
//! direction
|
||||
Direction direction_;
|
||||
|
||||
//! current Index
|
||||
int currentIndex_;
|
||||
|
||||
//! max Index
|
||||
int maxIndex_;
|
||||
|
||||
//! frame at last update
|
||||
int lastFrame_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue