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 }