File indexing completed on 2024-05-19 05:28:48
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 "breezedialdata.h" 0008 0009 #include <QDial> 0010 #include <QHoverEvent> 0011 0012 namespace Breeze 0013 { 0014 //______________________________________________ 0015 DialData::DialData(QObject *parent, QObject *target, int duration) 0016 : WidgetStateData(parent, target, duration) 0017 , _position(-1, -1) 0018 { 0019 target->installEventFilter(this); 0020 } 0021 0022 //______________________________________________ 0023 bool DialData::eventFilter(QObject *object, QEvent *event) 0024 { 0025 if (object != target().data()) { 0026 return WidgetStateData::eventFilter(object, event); 0027 } 0028 0029 // check event type 0030 switch (event->type()) { 0031 case QEvent::HoverEnter: 0032 case QEvent::HoverMove: 0033 hoverMoveEvent(object, event); 0034 break; 0035 0036 case QEvent::HoverLeave: 0037 hoverLeaveEvent(object, event); 0038 break; 0039 0040 default: 0041 break; 0042 } 0043 0044 return WidgetStateData::eventFilter(object, event); 0045 } 0046 0047 //______________________________________________ 0048 void DialData::hoverMoveEvent(QObject *object, QEvent *event) 0049 { 0050 // try cast object to dial 0051 QDial *scrollBar(qobject_cast<QDial *>(object)); 0052 if (!scrollBar || scrollBar->isSliderDown()) { 0053 return; 0054 } 0055 0056 // cast event 0057 QHoverEvent *hoverEvent = static_cast<QHoverEvent *>(event); 0058 0059 // store position 0060 _position = 0061 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 0062 hoverEvent->position().toPoint(); 0063 #else 0064 hoverEvent->pos(); 0065 #endif 0066 0067 // trigger animation if position match handle rect 0068 updateState(_handleRect.contains(_position)); 0069 } 0070 0071 //______________________________________________ 0072 void DialData::hoverLeaveEvent(QObject *, QEvent *) 0073 { 0074 // reset hover state 0075 updateState(false); 0076 0077 // reset mouse position 0078 _position = QPoint(-1, -1); 0079 } 0080 0081 }