/************************************************************************* * Copyright (C) 2014 by Hugo Pereira Da Costa * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * *************************************************************************/ ////////////////////////////////////////////////////////////////////////////// // adwaitatabbardata.cpp // data container for QTabBar animations // ------------------- // // 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 "adwaitatabbardata.h" #include #include namespace Adwaita { //______________________________________________ TabBarData::TabBarData( QObject* parent, QWidget* target, int duration ): AnimationData( parent, target ) { _current._animation = new Animation( duration, this ); setupAnimation( currentIndexAnimation(), "currentOpacity" ); currentIndexAnimation().data()->setDirection( Animation::Forward ); _previous._animation = new Animation( duration, this ); setupAnimation( previousIndexAnimation(), "previousOpacity" ); previousIndexAnimation().data()->setDirection( Animation::Backward ); } //______________________________________________ Animation::Pointer TabBarData::animation( const QPoint& position ) const { if( !enabled() ) return Animation::Pointer(); const QTabBar* local( qobject_cast( target().data() ) ); if( !local ) return Animation::Pointer(); int index( local->tabAt( position ) ); if( index < 0 ) return Animation::Pointer(); else if( index == currentIndex() ) return currentIndexAnimation(); else if( index == previousIndex() ) return previousIndexAnimation(); else return Animation::Pointer(); } //______________________________________________ bool TabBarData::updateState( const QPoint& position , bool hovered ) { if( !enabled() ) return false; const QTabBar* local( qobject_cast( target().data() ) ); if( !local ) return false; int index( local->tabAt( position ) ); if( index < 0 ) return false; if( hovered ) { if( index != currentIndex() ) { if( currentIndex() >= 0 ) { setPreviousIndex( currentIndex() ); setCurrentIndex( -1 ); previousIndexAnimation().data()->restart(); } setCurrentIndex( index ); currentIndexAnimation().data()->restart(); return true; } else return false; } else if( index == currentIndex() ) { setPreviousIndex( currentIndex() ); setCurrentIndex( -1 ); previousIndexAnimation().data()->restart(); return true; } else return false; } //______________________________________________ qreal TabBarData::opacity( const QPoint& position ) const { if( !enabled() ) return OpacityInvalid; const QTabBar* local( qobject_cast( target().data() ) ); if( !local ) return OpacityInvalid; int index( local->tabAt( position ) ); if( index < 0 ) return OpacityInvalid; else if( index == currentIndex() ) return currentOpacity(); else if( index == previousIndex() ) return previousOpacity(); else return OpacityInvalid; } }