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 #include "breezescrollbarengine.h" 0008 0009 #include <QEvent> 0010 0011 namespace Breeze 0012 { 0013 //____________________________________________________________ 0014 bool ScrollBarEngine::registerWidget(QObject *target, AnimationModes modes) 0015 { 0016 // check widget 0017 if (!target) { 0018 return false; 0019 } 0020 0021 // only handle hover and focus 0022 if (modes & AnimationHover && !dataMap(AnimationHover).contains(target)) { 0023 dataMap(AnimationHover).insert(target, new ScrollBarData(this, target, duration()), enabled()); 0024 } 0025 if (modes & AnimationFocus && !dataMap(AnimationFocus).contains(target)) { 0026 dataMap(AnimationFocus).insert(target, new WidgetStateData(this, target, duration()), enabled()); 0027 } 0028 0029 // connect destruction signal 0030 connect(target, &QObject::destroyed, this, &ScrollBarEngine::unregisterWidget, Qt::UniqueConnection); 0031 0032 return true; 0033 } 0034 0035 //____________________________________________________________ 0036 bool ScrollBarEngine::isAnimated(const QObject *object, AnimationMode mode, QStyle::SubControl control) 0037 { 0038 if (mode == AnimationHover) { 0039 if (DataMap<WidgetStateData>::Value data = this->data(object, AnimationHover)) { 0040 const ScrollBarData *scrollBarData(static_cast<const ScrollBarData *>(data.data())); 0041 const Animation::Pointer &animation = scrollBarData->animation(control); 0042 return animation.data()->isRunning(); 0043 0044 } else { 0045 return false; 0046 } 0047 0048 } else if (control == QStyle::SC_ScrollBarSlider) { 0049 return WidgetStateEngine::isAnimated(object, mode); 0050 0051 } else { 0052 return false; 0053 } 0054 } 0055 0056 //____________________________________________________________ 0057 AnimationMode ScrollBarEngine::animationMode(const QObject *object, QStyle::SubControl control) 0058 { 0059 // enable state 0060 if (isAnimated(object, AnimationHover, control)) { 0061 return AnimationHover; 0062 } else if (isAnimated(object, AnimationFocus, control)) { 0063 return AnimationFocus; 0064 } else if (isAnimated(object, AnimationPressed, control)) { 0065 return AnimationPressed; 0066 } else { 0067 return AnimationNone; 0068 } 0069 } 0070 0071 //____________________________________________________________ 0072 qreal ScrollBarEngine::opacity(const QObject *object, QStyle::SubControl control) 0073 { 0074 if (isAnimated(object, AnimationHover, control)) { 0075 return static_cast<const ScrollBarData *>(data(object, AnimationHover).data())->opacity(control); 0076 } else if (control == QStyle::SC_ScrollBarSlider) { 0077 return WidgetStateEngine::buttonOpacity(object); 0078 } 0079 return AnimationData::OpacityInvalid; 0080 } 0081 0082 }