File indexing completed on 2024-05-12 05:28:38

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include "breezescrollbardata.h"
0010 #include "breezewidgetstateengine.h"
0011 
0012 namespace Breeze
0013 {
0014 //* stores scrollbar hovered action and timeLine
0015 class ScrollBarEngine : public WidgetStateEngine
0016 {
0017     Q_OBJECT
0018 
0019 public:
0020     //* constructor
0021     explicit ScrollBarEngine(QObject *parent)
0022         : WidgetStateEngine(parent)
0023     {
0024     }
0025 
0026     //* destructor
0027     virtual ~ScrollBarEngine()
0028     {
0029     }
0030 
0031     //* register scrollbar
0032     virtual bool registerWidget(QObject *target, AnimationModes modes);
0033 
0034     //*@name accessors
0035     //@{
0036 
0037     using WidgetStateEngine::isAnimated;
0038     using WidgetStateEngine::opacity;
0039 
0040     //* true if widget is animated
0041     virtual bool isAnimated(const QObject *, AnimationMode, QStyle::SubControl control);
0042 
0043     //* true if widget is animated
0044     virtual AnimationMode animationMode(const QObject *object, QStyle::SubControl control);
0045 
0046     //* animation opacity
0047     virtual qreal opacity(const QObject *object, QStyle::SubControl control);
0048 
0049     //* return true if given subcontrol is hovered
0050     virtual bool isHovered(const QObject *object, QStyle::SubControl control)
0051     {
0052         if (DataMap<WidgetStateData>::Value data = this->data(object, AnimationHover)) {
0053             return static_cast<const ScrollBarData *>(data.data())->isHovered(control);
0054 
0055         } else {
0056             return false;
0057         }
0058     }
0059 
0060     //* control rect associated to object
0061     virtual QRect subControlRect(const QObject *object, QStyle::SubControl control)
0062     {
0063         if (DataMap<WidgetStateData>::Value data = this->data(object, AnimationHover)) {
0064             return static_cast<const ScrollBarData *>(data.data())->subControlRect(control);
0065 
0066         } else {
0067             return QRect();
0068         }
0069     }
0070 
0071     //* mouse position
0072     virtual QPoint position(const QObject *object)
0073     {
0074         if (DataMap<WidgetStateData>::Value data = this->data(object, AnimationHover)) {
0075             return static_cast<const ScrollBarData *>(data.data())->position();
0076 
0077         } else {
0078             return QPoint(-1, -1);
0079         }
0080     }
0081 
0082     //@}
0083 
0084     //*@name modifiers
0085     //@{
0086 
0087     //* control rect
0088     virtual void setSubControlRect(const QObject *object, QStyle::SubControl control, const QRect &rect)
0089     {
0090         if (DataMap<WidgetStateData>::Value data = this->data(object, AnimationHover)) {
0091             static_cast<ScrollBarData *>(data.data())->setSubControlRect(control, rect);
0092         }
0093     }
0094 
0095     //@}
0096 };
0097 
0098 }