1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
#ifndef oxygenscrollbarengine_h
#define oxygenscrollbarengine_h
//////////////////////////////////////////////////////////////////////////////
// oxygenscrollbarengine.h
// stores event filters and maps widgets to timelines for animations
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "oxygenbaseengine.h"
#include "oxygendatamap.h"
#include "oxygenscrollbardata.h"
namespace Oxygen
{
//* stores scrollbar hovered action and timeLine
class ScrollBarEngine : public BaseEngine
{
Q_OBJECT
public:
//* constructor
explicit ScrollBarEngine(QObject *parent)
: BaseEngine(parent)
{
}
//* register scrollbar
bool registerWidget(QWidget *);
//* true if widget is animated
bool isAnimated(const QObject *object, QStyle::SubControl control);
//* animation opacity
qreal opacity(const QObject *object, QStyle::SubControl control)
{
return isAnimated(object, control) ? _data.find(object).data()->opacity(control) : AnimationData::OpacityInvalid;
}
//* return true if given subcontrol is hovered
bool isHovered(const QObject *object, QStyle::SubControl control)
{
if (DataMap<ScrollBarData>::Value data = _data.find(object))
return data.data()->isHovered(control);
else
return false;
}
//* control rect associated to object
QRect subControlRect(const QObject *object, QStyle::SubControl control)
{
if (DataMap<ScrollBarData>::Value data = _data.find(object))
return data.data()->subControlRect(control);
else
return QRect();
}
//* control rect
void setSubControlRect(const QObject *object, QStyle::SubControl control, const QRect &rect)
{
if (DataMap<ScrollBarData>::Value data = _data.find(object)) {
data.data()->setSubControlRect(control, rect);
}
}
//* control rect
void updateState(const QObject *object, bool state)
{
if (DataMap<ScrollBarData>::Value data = _data.find(object)) {
data.data()->updateState(state);
}
}
//* mouse position
QPoint position(const QObject *object)
{
if (DataMap<ScrollBarData>::Value data = _data.find(object))
return data.data()->position();
else
return QPoint(-1, -1);
}
//* enable state
void setEnabled(bool value) override
{
BaseEngine::setEnabled(value);
/*
do not disable the map directly, because the contained OxygenScrollbarData
are also used in non animated mode to store scrollbar arrows rect. However
do disable all contains DATA object, in order to prevent actual animations
*/
for (const DataMap<ScrollBarData>::Value &data : std::as_const(_data)) {
if (data)
data.data()->setEnabled(value);
}
}
//* duration
void setDuration(int value) override
{
BaseEngine::setDuration(value);
_data.setDuration(value);
}
public Q_SLOTS:
//* remove widget from map
bool unregisterWidget(QObject *object) override
{
return _data.unregisterWidget(object);
}
private:
//* data map
DataMap<ScrollBarData> _data;
};
}
#endif
|