mirror of
https://github.com/miek/inspectrum.git
synced 2026-02-20 01:31:35 +01:00
Handle LeaveEvent separately as it shouldn't be cast to a MouseEvent
This commit is contained in:
@@ -40,12 +40,12 @@ bool Cursor::pointOverCursor(QPoint point)
|
||||
bool Cursor::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
{
|
||||
// If the mouse pointer moves over a cursor, display a resize pointer
|
||||
if (pointOverCursor(event->pos()) && type != QEvent::Leave) {
|
||||
if (pointOverCursor(event->pos())) {
|
||||
if (!cursorOverriden) {
|
||||
cursorOverriden = true;
|
||||
QApplication::setOverrideCursor(QCursor(cursorShape));
|
||||
}
|
||||
// Restore pointer if it moves off the cursor, or leaves the widget
|
||||
// Restore pointer if it moves off the cursor
|
||||
} else if (cursorOverriden) {
|
||||
cursorOverriden = false;
|
||||
QApplication::restoreOverrideCursor();
|
||||
@@ -77,6 +77,14 @@ bool Cursor::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
return false;
|
||||
}
|
||||
|
||||
void Cursor::leaveEvent()
|
||||
{
|
||||
if (cursorOverriden) {
|
||||
cursorOverriden = false;
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
}
|
||||
|
||||
int Cursor::pos()
|
||||
{
|
||||
return cursorPosition;
|
||||
|
||||
@@ -33,6 +33,7 @@ public:
|
||||
int pos();
|
||||
void setPos(int newPos);
|
||||
bool mouseEvent(QEvent::Type type, QMouseEvent *event);
|
||||
void leaveEvent();
|
||||
|
||||
signals:
|
||||
void posChanged();
|
||||
|
||||
@@ -52,7 +52,7 @@ bool Cursors::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
return true;
|
||||
|
||||
// If the mouse pointer is between the cursors, display a resize pointer
|
||||
if (pointWithinDragRegion(event->pos()) && type != QEvent::Leave) {
|
||||
if (pointWithinDragRegion(event->pos()) ) {
|
||||
if (!cursorOverride) {
|
||||
cursorOverride = true;
|
||||
QApplication::setOverrideCursor(QCursor(Qt::SizeAllCursor));
|
||||
@@ -92,6 +92,17 @@ bool Cursors::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
return false;
|
||||
}
|
||||
|
||||
void Cursors::leaveEvent()
|
||||
{
|
||||
minCursor->leaveEvent();
|
||||
maxCursor->leaveEvent();
|
||||
|
||||
if (cursorOverride) {
|
||||
cursorOverride = false;
|
||||
QApplication::restoreOverrideCursor();
|
||||
}
|
||||
}
|
||||
|
||||
void Cursors::paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange)
|
||||
{
|
||||
painter.save();
|
||||
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
Cursors(QObject * parent);
|
||||
int segments();
|
||||
bool mouseEvent(QEvent::Type type, QMouseEvent *event);
|
||||
void leaveEvent();
|
||||
void paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);
|
||||
range_t<int> selection();
|
||||
void setSegments(int segments);
|
||||
|
||||
@@ -39,6 +39,11 @@ bool Plot::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
return false;
|
||||
}
|
||||
|
||||
void Plot::leaveEvent()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::shared_ptr<AbstractSampleSource> Plot::output()
|
||||
{
|
||||
return sampleSource;
|
||||
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
~Plot();
|
||||
void invalidateEvent() override;
|
||||
virtual bool mouseEvent(QEvent::Type type, QMouseEvent *event);
|
||||
virtual void leaveEvent();
|
||||
virtual std::shared_ptr<AbstractSampleSource> output();
|
||||
virtual void paintBack(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);
|
||||
virtual void paintMid(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);
|
||||
|
||||
@@ -253,8 +253,7 @@ bool PlotView::viewportEvent(QEvent *event) {
|
||||
// Pass mouse events to individual plot objects
|
||||
if (event->type() == QEvent::MouseButtonPress ||
|
||||
event->type() == QEvent::MouseMove ||
|
||||
event->type() == QEvent::MouseButtonRelease ||
|
||||
event->type() == QEvent::Leave) {
|
||||
event->type() == QEvent::MouseButtonRelease) {
|
||||
|
||||
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
|
||||
|
||||
@@ -281,6 +280,15 @@ bool PlotView::viewportEvent(QEvent *event) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (event->type() == QEvent::Leave) {
|
||||
for (auto&& plot : plots) {
|
||||
plot->leaveEvent();
|
||||
}
|
||||
|
||||
if (cursorsEnabled)
|
||||
cursors.leaveEvent();
|
||||
}
|
||||
|
||||
// Handle parent eveents
|
||||
return QGraphicsView::viewportEvent(event);
|
||||
}
|
||||
|
||||
@@ -359,6 +359,12 @@ bool SpectrogramPlot::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
return false;
|
||||
}
|
||||
|
||||
void SpectrogramPlot::leaveEvent()
|
||||
{
|
||||
if (tunerEnabled())
|
||||
tuner.leaveEvent();
|
||||
}
|
||||
|
||||
std::shared_ptr<AbstractSampleSource> SpectrogramPlot::output()
|
||||
{
|
||||
return tunerTransform;
|
||||
|
||||
@@ -68,6 +68,7 @@ public:
|
||||
void paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange) override;
|
||||
void paintMid(QPainter &painter, QRect &rect, range_t<size_t> sampleRange) override;
|
||||
bool mouseEvent(QEvent::Type type, QMouseEvent *event) override;
|
||||
void leaveEvent();
|
||||
std::shared_ptr<SampleSource<std::complex<float>>> input() { return inputSource; };
|
||||
void setSampleRate(double sampleRate);
|
||||
bool tunerEnabled();
|
||||
|
||||
@@ -75,6 +75,13 @@ bool Tuner::mouseEvent(QEvent::Type type, QMouseEvent *event)
|
||||
return false;
|
||||
}
|
||||
|
||||
void Tuner::leaveEvent()
|
||||
{
|
||||
cfCursor->leaveEvent();
|
||||
minCursor->leaveEvent();
|
||||
maxCursor->leaveEvent();
|
||||
}
|
||||
|
||||
void Tuner::paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange)
|
||||
{
|
||||
painter.save();
|
||||
|
||||
@@ -35,6 +35,7 @@ public:
|
||||
int centre();
|
||||
int deviation();
|
||||
bool mouseEvent(QEvent::Type, QMouseEvent *event);
|
||||
void leaveEvent();
|
||||
void paintFront(QPainter &painter, QRect &rect, range_t<size_t> sampleRange);
|
||||
void setCentre(int centre);
|
||||
void setDeviation(int dev);
|
||||
|
||||
Reference in New Issue
Block a user