|
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
|