summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHarshit Maurya <hmaurya999@gmail.com>2020-05-14 03:43:58 +0530
committerHarshit Maurya <hmaurya999@gmail.com>2020-05-16 02:17:43 +0530
commit99aa12e06eaa07db65026519d5875ee24f33da20 (patch)
treed0630d433ada747c6c21311f1ef050c2a8a490f3 /src
parentad104313bd206d1f133d1270c4ee8a91eb162fe1 (diff)
wwaveformviewer: highlight hovered mark
Diffstat (limited to 'src')
-rw-r--r--src/waveform/renderers/waveformmark.cpp1
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.cpp17
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.h2
-rw-r--r--src/widget/wwaveformviewer.cpp57
-rw-r--r--src/widget/wwaveformviewer.h8
5 files changed, 65 insertions, 20 deletions
diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp
index 5d8e7d1164..cb7fae606b 100644
--- a/src/waveform/renderers/waveformmark.cpp
+++ b/src/waveform/renderers/waveformmark.cpp
@@ -99,6 +99,7 @@ WaveformMark::WaveformMark(const QString& group,
}
void WaveformMark::setBaseColor(QColor baseColor) {
+ m_image = QImage();
m_fillColor = baseColor;
m_borderColor = Color::chooseContrastColor(baseColor);
m_labelColor = Color::chooseColorByBrightness(baseColor, QColor(255,255,255,255), QColor(0,0,0,255));
diff --git a/src/waveform/renderers/waveformwidgetrenderer.cpp b/src/waveform/renderers/waveformwidgetrenderer.cpp
index 79499d0712..58f4764651 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.cpp
+++ b/src/waveform/renderers/waveformwidgetrenderer.cpp
@@ -289,7 +289,7 @@ void WaveformWidgetRenderer::setTrack(TrackPointer track) {
}
}
-CuePointer WaveformWidgetRenderer::getCueAtPoint(QPoint point) {
+WaveformMarkPointer WaveformWidgetRenderer::getCueMarkAtPoint(QPoint point) {
WaveformMarkPointer pSelectedMark;
const int lineHoverpadding = 5;
for (const auto& pMark : m_markLabelOffsets.keys()) {
@@ -328,19 +328,8 @@ CuePointer WaveformWidgetRenderer::getCueAtPoint(QPoint point) {
if (labelRectangleInWaveformWidgetSpace.contains(point) ||
markLineVicinity.contains(point)) {
- pSelectedMark = pMark;
- break;
+ return pMark;
}
}
- if (!pSelectedMark) {
- return static_cast<CuePointer>(nullptr);
- }
-
- QList<CuePointer> cueList = getTrackInfo()->getCuePoints();
- for (const auto& pCue : cueList) {
- if (pCue->getHotCue() == pSelectedMark->getHotCue()) {
- return pCue;
- }
- }
- return static_cast<CuePointer>(nullptr);
+ return static_cast<WaveformMarkPointer>(nullptr);
}
diff --git a/src/waveform/renderers/waveformwidgetrenderer.h b/src/waveform/renderers/waveformwidgetrenderer.h
index 0ab5731511..3f58560e4a 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.h
+++ b/src/waveform/renderers/waveformwidgetrenderer.h
@@ -41,7 +41,7 @@ class WaveformWidgetRenderer {
inline const char* getGroup() const { return m_group;}
const TrackPointer getTrackInfo() const { return m_pTrack;}
// Get cue at a point on the waveform widget.
- CuePointer getCueAtPoint(QPoint point);
+ WaveformMarkPointer getCueMarkAtPoint(QPoint point);
double getFirstDisplayedPosition() const { return m_firstDisplayedPosition;}
double getLastDisplayedPosition() const { return m_lastDisplayedPosition;}
diff --git a/src/widget/wwaveformviewer.cpp b/src/widget/wwaveformviewer.cpp
index ab98eebc36..4cae01b9ea 100644
--- a/src/widget/wwaveformviewer.cpp
+++ b/src/widget/wwaveformviewer.cpp
@@ -80,10 +80,12 @@ void WWaveformViewer::mousePressEvent(QMouseEvent* event) {
m_pScratchPositionEnable->slotSet(1.0);
} else if (event->button() == Qt::RightButton) {
const auto currentTrack = m_waveformWidget->getTrackInfo();
- auto cueAtClickPos = m_waveformWidget->getCueAtPoint(m_mouseAnchor);
- if (cueAtClickPos) {
- m_pCueMenuPopup->setTrackAndCue(currentTrack, cueAtClickPos);
- m_pCueMenuPopup->popup(event->globalPos());
+ if (m_pHoveredMark) {
+ auto cueAtClickPos = getCuePointerFromCueMark(m_pHoveredMark);
+ if (cueAtClickPos) {
+ m_pCueMenuPopup->setTrackAndCue(currentTrack, cueAtClickPos);
+ m_pCueMenuPopup->popup(event->globalPos());
+ }
} else {
// If we are scratching then disable and reset because the two shouldn't
// be used at once.
@@ -131,6 +133,24 @@ void WWaveformViewer::mouseMoveEvent(QMouseEvent* event) {
// clamp to [0.0, 1.0]
v = math_clamp(v, 0.0, 1.0);
m_pWheel->setParameter(v);
+ } else {
+ WaveformMarkPointer pMark;
+ pMark = m_waveformWidget->getCueMarkAtPoint(event->pos());
+ if (pMark) {
+ if (!m_pHoveredMark) {
+ m_pHoveredMark = pMark;
+ highlightMark(pMark);
+ } else if (pMark != m_pHoveredMark) {
+ unhighlightMark(m_pHoveredMark);
+ m_pHoveredMark = pMark;
+ highlightMark(pMark);
+ }
+ } else {
+ if (m_pHoveredMark) {
+ unhighlightMark(m_pHoveredMark);
+ m_pHoveredMark = nullptr;
+ }
+ }
}
}
@@ -167,6 +187,13 @@ void WWaveformViewer::dropEvent(QDropEvent* event) {
DragAndDropHelper::handleTrackDropEvent(event, *this, m_pGroup, m_pConfig);
}
+void WWaveformViewer::leaveEvent(QEvent*) {
+ if (m_pHoveredMark) {
+ unhighlightMark(m_pHoveredMark);
+ m_pHoveredMark = nullptr;
+ }
+}
+
void WWaveformViewer::slotTrackLoaded(TrackPointer track) {
if (m_waveformWidget) {
m_waveformWidget->setTrack(track);
@@ -230,3 +257,25 @@ void WWaveformViewer::setWaveformWidget(WaveformWidgetAbstract* waveformWidget)
m_waveformWidget->getWidget()->setMouseTracking(true);
}
}
+
+CuePointer WWaveformViewer::getCuePointerFromCueMark(WaveformMarkPointer pMark) {
+ if (pMark) {
+ QList<CuePointer> cueList = m_waveformWidget->getTrackInfo()->getCuePoints();
+ for (const auto& pCue : cueList) {
+ if (pCue->getHotCue() == pMark->getHotCue()) {
+ return pCue;
+ }
+ }
+ }
+ return static_cast<CuePointer>(nullptr);
+}
+
+void WWaveformViewer::highlightMark(WaveformMarkPointer pMark) {
+ QColor highlightColor = Color::chooseContrastColor(pMark->fillColor());
+ pMark->setBaseColor(highlightColor);
+}
+
+void WWaveformViewer::unhighlightMark(WaveformMarkPointer pMark) {
+ QColor originalColor = mixxx::RgbColor::toQColor(getCuePointerFromCueMark(pMark)->getColor());
+ pMark->setBaseColor(originalColor);
+}
diff --git a/src/widget/wwaveformviewer.h b/src/widget/wwaveformviewer.h
index 8091785c69..c02333285f 100644
--- a/src/widget/wwaveformviewer.h
+++ b/src/widget/wwaveformviewer.h
@@ -34,8 +34,9 @@ class WWaveformViewer : public WWidget, public TrackDropTarget {
void mousePressEvent(QMouseEvent * /*unused*/) override;
void mouseMoveEvent(QMouseEvent * /*unused*/) override;
void mouseReleaseEvent(QMouseEvent * /*unused*/) override;
+ void leaveEvent(QEvent* /*unused*/) override;
-signals:
+ signals:
void trackDropped(QString filename, QString group) override;
void cloneDeck(QString source_group, QString target_group) override;
@@ -75,10 +76,15 @@ private:
bool m_bBending;
QPoint m_mouseAnchor;
parented_ptr<WCueMenuPopup> m_pCueMenuPopup;
+ WaveformMarkPointer m_pHoveredMark;
WaveformWidgetAbstract* m_waveformWidget;
friend class WaveformWidgetFactory;
+
+ CuePointer getCuePointerFromCueMark(WaveformMarkPointer pMark);
+ void highlightMark(WaveformMarkPointer pMark);
+ void unhighlightMark(WaveformMarkPointer pMark);
};
#endif