From 45f5f00f9f36c98681d34dfa4f4fd15401b21f2a Mon Sep 17 00:00:00 2001 From: Hugo Pereira Da Costa Date: Thu, 17 Sep 2009 03:43:55 +0000 Subject: [PATCH] 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 --- clients/oxygen/CMakeLists.txt | 1 - clients/oxygen/oxygenbutton.cpp | 32 +++++++---- clients/oxygen/oxygenbutton.h | 4 +- clients/oxygen/oxygentimeline.cpp | 94 ------------------------------- clients/oxygen/oxygentimeline.h | 93 ------------------------------ 5 files changed, 22 insertions(+), 202 deletions(-) delete mode 100644 clients/oxygen/oxygentimeline.cpp delete mode 100644 clients/oxygen/oxygentimeline.h diff --git a/clients/oxygen/CMakeLists.txt b/clients/oxygen/CMakeLists.txt index 9fca512779..abdb3eb6d5 100644 --- a/clients/oxygen/CMakeLists.txt +++ b/clients/oxygen/CMakeLists.txt @@ -14,7 +14,6 @@ set(kwin_oxygen_SRCS oxygenexceptionlist.cpp oxygenshadowconfiguration.cpp oxygensizegrip.cpp - oxygentimeline.cpp x11util.cpp ) diff --git a/clients/oxygen/oxygenbutton.cpp b/clients/oxygen/oxygenbutton.cpp index 8baaee81fb..e83ddfc34c 100644 --- a/clients/oxygen/oxygenbutton.cpp +++ b/clients/oxygen/oxygenbutton.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)); diff --git a/clients/oxygen/oxygenbutton.h b/clients/oxygen/oxygenbutton.h index f8a4e3049a..441e5f08f4 100644 --- a/clients/oxygen/oxygenbutton.h +++ b/clients/oxygen/oxygenbutton.h @@ -29,10 +29,10 @@ ////////////////////////////////////////////////////////////////////////////// #include +#include #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_; }; diff --git a/clients/oxygen/oxygentimeline.cpp b/clients/oxygen/oxygentimeline.cpp deleted file mode 100644 index fa25c8dd4f..0000000000 --- a/clients/oxygen/oxygentimeline.cpp +++ /dev/null @@ -1,94 +0,0 @@ - -////////////////////////////////////////////////////////////////////////////// -// OxygenTimeLine.h -// derive from QTimeLine and is used to perform smooth transitions -// ------------------- -// -// Copyright (c) 2009 Hugo Pereira Da Costa -// -// 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 -#include - -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_ ); - } - - } - -} diff --git a/clients/oxygen/oxygentimeline.h b/clients/oxygen/oxygentimeline.h deleted file mode 100644 index bb3bb859eb..0000000000 --- a/clients/oxygen/oxygentimeline.h +++ /dev/null @@ -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 -// -// 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 - -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