Blame style/animations/adwaitascrollbardata.h

Packit 8e9c33
#ifndef adwaitascrollbar_data_h
Packit 8e9c33
#define adwaitascrollbar_data_h
Packit 8e9c33
Packit 8e9c33
/*************************************************************************
Packit 8e9c33
 * Copyright (C) 2014 by Hugo Pereira Da Costa <hugo.pereira@free.fr>    *
Packit 8e9c33
 *                                                                       *
Packit 8e9c33
 * This program is free software; you can redistribute it and/or modify  *
Packit 8e9c33
 * it under the terms of the GNU General Public License as published by  *
Packit 8e9c33
 * the Free Software Foundation; either version 2 of the License, or     *
Packit 8e9c33
 * (at your option) any later version.                                   *
Packit 8e9c33
 *                                                                       *
Packit 8e9c33
 * This program is distributed in the hope that it will be useful,       *
Packit 8e9c33
 * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
Packit 8e9c33
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
Packit 8e9c33
 * GNU General Public License for more details.                          *
Packit 8e9c33
 *                                                                       *
Packit 8e9c33
 * You should have received a copy of the GNU General Public License     *
Packit 8e9c33
 * along with this program; if not, write to the                         *
Packit 8e9c33
 * Free Software Foundation, Inc.,                                       *
Packit 8e9c33
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
Packit 8e9c33
 *************************************************************************/
Packit 8e9c33
Packit 8e9c33
#include "adwaitawidgetstatedata.h"
Packit 8e9c33
Packit 8e9c33
#include <QStyle>
Packit 8e9c33
Packit 8e9c33
namespace Adwaita
Packit 8e9c33
{
Packit 8e9c33
Packit 8e9c33
    //* scrollbar data
Packit 8e9c33
    class ScrollBarData: public WidgetStateData
Packit 8e9c33
    {
Packit 8e9c33
Packit 8e9c33
        Q_OBJECT
Packit 8e9c33
        Q_PROPERTY( qreal addLineOpacity READ addLineOpacity WRITE setAddLineOpacity )
Packit 8e9c33
        Q_PROPERTY( qreal subLineOpacity READ subLineOpacity WRITE setSubLineOpacity )
Packit 8e9c33
        Q_PROPERTY( qreal grooveOpacity READ grooveOpacity WRITE setGrooveOpacity )
Packit 8e9c33
Packit 8e9c33
        public:
Packit 8e9c33
Packit 8e9c33
        //* constructor
Packit 8e9c33
        ScrollBarData( QObject* parent, QWidget* target, int );
Packit 8e9c33
Packit 8e9c33
        //* destructor
Packit 8e9c33
        virtual ~ScrollBarData( void )
Packit 8e9c33
        {}
Packit 8e9c33
Packit 8e9c33
        //* event filter
Packit 8e9c33
        virtual bool eventFilter( QObject*, QEvent* );
Packit 8e9c33
Packit 8e9c33
        //* needed to avoid warning about virtual function being hidden
Packit 8e9c33
        using WidgetStateData::animation;
Packit 8e9c33
        using WidgetStateData::opacity;
Packit 8e9c33
Packit 8e9c33
        //* return animation for a given subcontrol
Packit 8e9c33
        virtual const Animation::Pointer& animation( QStyle::SubControl ) const;
Packit 8e9c33
Packit 8e9c33
        //* return default opacity for a given subcontrol
Packit 8e9c33
        virtual qreal opacity( QStyle::SubControl ) const;
Packit 8e9c33
Packit 8e9c33
        //* return default opacity for a given subcontrol
Packit 8e9c33
        virtual bool isHovered( QStyle::SubControl control ) const
Packit 8e9c33
        {
Packit 8e9c33
            switch( control )
Packit 8e9c33
            {
Packit 8e9c33
                case QStyle::SC_ScrollBarAddLine: return addLineArrowHovered();
Packit 8e9c33
                case QStyle::SC_ScrollBarSubLine: return subLineArrowHovered();
Packit 8e9c33
                case QStyle::SC_ScrollBarGroove: return grooveHovered();
Packit 8e9c33
                default: return false;
Packit 8e9c33
            }
Packit 8e9c33
Packit 8e9c33
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* subControlRect
Packit 8e9c33
        virtual QRect subControlRect( QStyle::SubControl control ) const
Packit 8e9c33
        {
Packit 8e9c33
            switch( control )
Packit 8e9c33
            {
Packit 8e9c33
                case QStyle::SC_ScrollBarAddLine: return _addLineData._rect;
Packit 8e9c33
                case QStyle::SC_ScrollBarSubLine: return _subLineData._rect;
Packit 8e9c33
                default: return QRect();
Packit 8e9c33
            }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
Packit 8e9c33
        //* subcontrol rect
Packit 8e9c33
        virtual void setSubControlRect( QStyle::SubControl control, const QRect& rect )
Packit 8e9c33
        {
Packit 8e9c33
            switch( control )
Packit 8e9c33
            {
Packit 8e9c33
                case QStyle::SC_ScrollBarAddLine:
Packit 8e9c33
                _addLineData._rect = rect;
Packit 8e9c33
                break;
Packit 8e9c33
Packit 8e9c33
                case QStyle::SC_ScrollBarSubLine:
Packit 8e9c33
                _subLineData._rect = rect;
Packit 8e9c33
                break;
Packit 8e9c33
Packit 8e9c33
                default: break;
Packit 8e9c33
            }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* duration
Packit 8e9c33
        virtual void setDuration( int duration )
Packit 8e9c33
        {
Packit 8e9c33
            WidgetStateData::setDuration( duration );
Packit 8e9c33
            addLineAnimation().data()->setDuration( duration );
Packit 8e9c33
            subLineAnimation().data()->setDuration( duration );
Packit 8e9c33
            grooveAnimation().data()->setDuration( duration );
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* addLine opacity
Packit 8e9c33
        virtual void setAddLineOpacity( qreal value )
Packit 8e9c33
        {
Packit 8e9c33
            value = digitize( value );
Packit 8e9c33
            if( _addLineData._opacity == value ) return;
Packit 8e9c33
            _addLineData._opacity = value;
Packit 8e9c33
            setDirty();
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* addLine opacity
Packit 8e9c33
        virtual qreal addLineOpacity( void ) const
Packit 8e9c33
        { return _addLineData._opacity; }
Packit 8e9c33
Packit 8e9c33
        //* subLine opacity
Packit 8e9c33
        virtual void setSubLineOpacity( qreal value )
Packit 8e9c33
        {
Packit 8e9c33
            value = digitize( value );
Packit 8e9c33
            if( _subLineData._opacity == value ) return;
Packit 8e9c33
            _subLineData._opacity = value;
Packit 8e9c33
            setDirty();
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* subLine opacity
Packit 8e9c33
        virtual qreal subLineOpacity( void ) const
Packit 8e9c33
        { return _subLineData._opacity; }
Packit 8e9c33
Packit 8e9c33
        //* groove opacity
Packit 8e9c33
        virtual void setGrooveOpacity( qreal value )
Packit 8e9c33
        {
Packit 8e9c33
            value = digitize( value );
Packit 8e9c33
            if( _grooveData._opacity == value ) return;
Packit 8e9c33
            _grooveData._opacity = value;
Packit 8e9c33
            setDirty();
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* groove opacity
Packit 8e9c33
        virtual qreal grooveOpacity( void ) const
Packit 8e9c33
        { return _grooveData._opacity; }
Packit 8e9c33
Packit 8e9c33
        //* mouse position
Packit 8e9c33
        QPoint position( void ) const
Packit 8e9c33
        { return _position; }
Packit 8e9c33
Packit 8e9c33
        protected Q_SLOTS:
Packit 8e9c33
Packit 8e9c33
        //* clear addLineRect
Packit 8e9c33
        void clearAddLineRect( void )
Packit 8e9c33
        {
Packit 8e9c33
            if( addLineAnimation().data()->direction() == Animation::Backward )
Packit 8e9c33
            { _addLineData._rect = QRect(); }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        //* clear subLineRect
Packit 8e9c33
        void clearSubLineRect( void )
Packit 8e9c33
        {
Packit 8e9c33
            if( subLineAnimation().data()->direction() == Animation::Backward )
Packit 8e9c33
            { _subLineData._rect = QRect(); }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        protected:
Packit 8e9c33
Packit 8e9c33
        //* hoverMoveEvent
Packit 8e9c33
        virtual void hoverMoveEvent( QObject*, QEvent* );
Packit 8e9c33
Packit 8e9c33
        //* hoverMoveEvent
Packit 8e9c33
        virtual void hoverLeaveEvent( QObject*, QEvent* );
Packit 8e9c33
Packit 8e9c33
        //*@name hover flags
Packit 8e9c33
        //@{
Packit 8e9c33
Packit 8e9c33
        virtual bool addLineArrowHovered( void ) const
Packit 8e9c33
        { return _addLineData._hovered; }
Packit 8e9c33
Packit 8e9c33
        virtual void setAddLineArrowHovered( bool value )
Packit 8e9c33
        { _addLineData._hovered = value; }
Packit 8e9c33
Packit 8e9c33
        virtual bool subLineArrowHovered( void ) const
Packit 8e9c33
        { return _subLineData._hovered; }
Packit 8e9c33
Packit 8e9c33
        virtual void setSubLineArrowHovered( bool value )
Packit 8e9c33
        { _subLineData._hovered = value; }
Packit 8e9c33
Packit 8e9c33
        virtual bool grooveHovered( void ) const
Packit 8e9c33
        { return _grooveData._hovered; }
Packit 8e9c33
Packit 8e9c33
        virtual void setGrooveHovered( bool value )
Packit 8e9c33
        { _grooveData._hovered = value; }
Packit 8e9c33
Packit 8e9c33
        //@}
Packit 8e9c33
Packit 8e9c33
        //* update add line arrow
Packit 8e9c33
        virtual void updateAddLineArrow( QStyle::SubControl );
Packit 8e9c33
Packit 8e9c33
        //* update sub line arrow
Packit 8e9c33
        virtual void updateSubLineArrow( QStyle::SubControl );
Packit 8e9c33
Packit 8e9c33
        //*@name timelines
Packit 8e9c33
        //@{
Packit 8e9c33
Packit 8e9c33
        virtual const Animation::Pointer& addLineAnimation( void ) const
Packit 8e9c33
        { return _addLineData._animation; }
Packit 8e9c33
Packit 8e9c33
        virtual const Animation::Pointer& subLineAnimation( void ) const
Packit 8e9c33
        { return _subLineData._animation; }
Packit 8e9c33
Packit 8e9c33
        virtual const Animation::Pointer& grooveAnimation( void ) const
Packit 8e9c33
        { return _grooveData._animation; }
Packit 8e9c33
Packit 8e9c33
        private:
Packit 8e9c33
Packit 8e9c33
        //* stores sub control data
Packit 8e9c33
        class Data
Packit 8e9c33
        {
Packit 8e9c33
Packit 8e9c33
          public:
Packit 8e9c33
Packit 8e9c33
          //* constructor
Packit 8e9c33
          Data( void ):
Packit 8e9c33
            _hovered( false ),
Packit 8e9c33
            _opacity( AnimationData::OpacityInvalid )
Packit 8e9c33
          {}
Packit 8e9c33
Packit 8e9c33
          //* true if hovered
Packit 8e9c33
          bool _hovered;
Packit 8e9c33
Packit 8e9c33
          //* animation
Packit 8e9c33
          Animation::Pointer _animation;
Packit 8e9c33
Packit 8e9c33
          //* opacity
Packit 8e9c33
          qreal _opacity;
Packit 8e9c33
Packit 8e9c33
          //* rect
Packit 8e9c33
          QRect _rect;
Packit 8e9c33
Packit 8e9c33
        };
Packit 8e9c33
Packit 8e9c33
Packit 8e9c33
        //* add line data (down arrow)
Packit 8e9c33
        Data _addLineData;
Packit 8e9c33
Packit 8e9c33
        //* subtract line data (up arrow)
Packit 8e9c33
        Data _subLineData;
Packit 8e9c33
Packit 8e9c33
        //* groove data
Packit 8e9c33
        Data _grooveData;
Packit 8e9c33
Packit 8e9c33
        //* mouse position
Packit 8e9c33
        QPoint _position;
Packit 8e9c33
Packit 8e9c33
    };
Packit 8e9c33
Packit 8e9c33
}
Packit 8e9c33
Packit 8e9c33
#endif