summaryrefslogtreecommitdiffstats
path: root/src/waveform/renderers
diff options
context:
space:
mode:
authorHarshit Maurya <hmaurya999@gmail.com>2020-05-12 22:47:09 +0530
committerHarshit Maurya <hmaurya999@gmail.com>2020-05-16 02:17:43 +0530
commit883b97c3d0a7462ff5301ab50b6ea64db9a26f6d (patch)
tree8538327a7f692f294803a2b537e2cf9e9abbd411 /src/waveform/renderers
parent399bd96b08eaf8fb6fb8dc27425c926e7250ebaa (diff)
wwaveformviewer: add context menu to scrolling waveform
Diffstat (limited to 'src/waveform/renderers')
-rw-r--r--src/waveform/renderers/waveformrendermark.cpp8
-rw-r--r--src/waveform/renderers/waveformrendermark.h1
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.cpp27
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.h10
4 files changed, 44 insertions, 2 deletions
diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp
index 2a51726d4c..f3ff3f915e 100644
--- a/src/waveform/renderers/waveformrendermark.cpp
+++ b/src/waveform/renderers/waveformrendermark.cpp
@@ -69,7 +69,10 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) {
// Check if the current point need to be displayed
if (currentMarkPoint > -markHalfWidth && currentMarkPoint < m_waveformRenderer->getWidth() + markHalfWidth) {
- painter->drawImage(QPoint(currentMarkPoint - markHalfWidth, 0), pMark->m_image);
+ int drawOffset = currentMarkPoint - markHalfWidth;
+ const auto topLeft = QPoint(drawOffset, 0);
+ painter->drawImage(topLeft, pMark->m_image);
+ m_markBoundaries[pMark].setTopLeft(topLeft);
}
} else {
const int markHalfHeight = pMark->m_image.height() / 2.0;
@@ -80,6 +83,7 @@ void WaveformRenderMark::draw(QPainter* painter, QPaintEvent* /*event*/) {
}
}
}
+ m_waveformRenderer->setMarkLabelBoundaries(m_markBoundaries);
}
void WaveformRenderMark::onResize() {
@@ -185,6 +189,8 @@ void WaveformRenderMark::generateMarkImage(WaveformMarkPointer pMark) {
int labelRectHeight = wordRect.height() + 2 * marginY + 4;
QRectF labelRect(0, 0, (float)labelRectWidth, (float)labelRectHeight);
+ m_markBoundaries[pMark].setWidth(labelRectWidth);
+ m_markBoundaries[pMark].setHeight(labelRectHeight);
int width;
int height;
diff --git a/src/waveform/renderers/waveformrendermark.h b/src/waveform/renderers/waveformrendermark.h
index dc0fad17c9..bccc5691af 100644
--- a/src/waveform/renderers/waveformrendermark.h
+++ b/src/waveform/renderers/waveformrendermark.h
@@ -36,6 +36,7 @@ class WaveformRenderMark : public QObject, public WaveformRendererAbstract {
void generateMarkImage(WaveformMarkPointer pMark);
WaveformMarkSet m_marks;
+ QMap<WaveformMarkPointer, QRect> m_markBoundaries;
DISALLOW_COPY_AND_ASSIGN(WaveformRenderMark);
};
diff --git a/src/waveform/renderers/waveformwidgetrenderer.cpp b/src/waveform/renderers/waveformwidgetrenderer.cpp
index 8c37c2d2cd..fb1de6cd7c 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.cpp
+++ b/src/waveform/renderers/waveformwidgetrenderer.cpp
@@ -288,3 +288,30 @@ void WaveformWidgetRenderer::setTrack(TrackPointer track) {
m_rendererStack[i]->onSetTrack();
}
}
+
+std::optional<CuePointer> WaveformWidgetRenderer::getCueAtPoint(QPoint point) {
+ WaveformMarkPointer pSelectedMark;
+ for (auto pMark : m_markBoundaries.keys()) {
+ if (m_markBoundaries[pMark].contains(point)) {
+ pSelectedMark = pMark;
+ break;
+ }
+ }
+ if (!pSelectedMark) {
+ return std::nullopt;
+ }
+
+ CuePointer pSelectedCue;
+ QList<CuePointer> cueList = getTrackInfo()->getCuePoints();
+ for (const auto& pCue : cueList) {
+ if (pCue->getHotCue() == pSelectedMark->getHotCue()) {
+ pSelectedCue = pCue;
+ break;
+ }
+ }
+ if (pSelectedCue != nullptr) {
+ return pSelectedCue;
+ }
+
+ return std::nullopt;
+}
diff --git a/src/waveform/renderers/waveformwidgetrenderer.h b/src/waveform/renderers/waveformwidgetrenderer.h
index 9cab36f6c8..4df068fdd6 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.h
+++ b/src/waveform/renderers/waveformwidgetrenderer.h
@@ -8,9 +8,10 @@
#include "track/track.h"
#include "util/class.h"
+#include "util/performancetimer.h"
+#include "waveform/renderers/waveformmark.h"
#include "waveform/renderers/waveformrendererabstract.h"
#include "waveform/renderers/waveformsignalcolors.h"
-#include "util/performancetimer.h"
//#define WAVEFORMWIDGETRENDERER_DEBUG
@@ -39,6 +40,8 @@ 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.
+ std::optional<CuePointer> getCueAtPoint(QPoint point);
double getFirstDisplayedPosition() const { return m_firstDisplayedPosition;}
double getLastDisplayedPosition() const { return m_lastDisplayedPosition;}
@@ -93,6 +96,10 @@ class WaveformWidgetRenderer {
}
void setTrack(TrackPointer track);
+ inline void setMarkLabelBoundaries(
+ const QMap<WaveformMarkPointer, QRect>& markLabelBoundaries) {
+ m_markBoundaries = markLabelBoundaries;
+ }
double getPlayMarkerPosition() {
return m_playMarkerPosition;
@@ -151,6 +158,7 @@ class WaveformWidgetRenderer {
private:
DISALLOW_COPY_AND_ASSIGN(WaveformWidgetRenderer);
friend class WaveformWidgetFactory;
+ QMap<WaveformMarkPointer, QRect> m_markBoundaries;
};
#endif // WAVEFORMWIDGETRENDERER_H