summaryrefslogtreecommitdiffstats
path: root/src/waveform
diff options
context:
space:
mode:
authorHarshit Maurya <hmaurya999@gmail.com>2020-05-15 22:25:00 +0530
committerHarshit Maurya <hmaurya999@gmail.com>2020-05-16 02:17:43 +0530
commit68ae87f1ae804e8164bf25756d6600f865ce9583 (patch)
tree14696f9be33d0f25d621331e50336677cfbcf57a /src/waveform
parent2918486a06858b5dd9df214348cd3682af7c868d (diff)
waveformmark: add function to detect point in mark
Diffstat (limited to 'src/waveform')
-rw-r--r--src/waveform/renderers/waveformmark.cpp16
-rw-r--r--src/waveform/renderers/waveformmark.h3
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.cpp39
3 files changed, 24 insertions, 34 deletions
diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp
index cb7fae606b..81a3d1cbe5 100644
--- a/src/waveform/renderers/waveformmark.cpp
+++ b/src/waveform/renderers/waveformmark.cpp
@@ -104,3 +104,19 @@ void WaveformMark::setBaseColor(QColor baseColor) {
m_borderColor = Color::chooseContrastColor(baseColor);
m_labelColor = Color::chooseColorByBrightness(baseColor, QColor(255,255,255,255), QColor(0,0,0,255));
};
+
+bool WaveformMark::contains(QPoint point, Qt::Orientation orientation) {
+ // Without some padding, the user would only have a single pixel width that
+ // would count as hovering over the WaveformMark.
+ float lineHoverPadding = 5.0;
+ int position;
+ if (orientation == Qt::Horizontal) {
+ position = point.x();
+ } else {
+ position = point.y();
+ }
+ bool lineHovered = m_linePosition >= position - lineHoverPadding &&
+ m_linePosition <= position + lineHoverPadding;
+
+ return (m_label.area().contains(point) || lineHovered);
+}
diff --git a/src/waveform/renderers/waveformmark.h b/src/waveform/renderers/waveformmark.h
index caf652adaa..5e3150126a 100644
--- a/src/waveform/renderers/waveformmark.h
+++ b/src/waveform/renderers/waveformmark.h
@@ -66,6 +66,9 @@ class WaveformMark {
return m_labelColor;
}
+ // Check if a point (in image co-ordinates) lies on drawn image.
+ bool contains(QPoint point, Qt::Orientation orientation);
+
QColor m_textColor;
QString m_text;
Qt::Alignment m_align;
diff --git a/src/waveform/renderers/waveformwidgetrenderer.cpp b/src/waveform/renderers/waveformwidgetrenderer.cpp
index 58f4764651..850a76f5d2 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.cpp
+++ b/src/waveform/renderers/waveformwidgetrenderer.cpp
@@ -290,44 +290,15 @@ void WaveformWidgetRenderer::setTrack(TrackPointer track) {
}
WaveformMarkPointer WaveformWidgetRenderer::getCueMarkAtPoint(QPoint point) {
- WaveformMarkPointer pSelectedMark;
- const int lineHoverpadding = 5;
for (const auto& pMark : m_markLabelOffsets.keys()) {
- QRectF labelBoundingRectInMarkImageSpace = pMark->m_label.area();
- int markImageOffsetInWaveformWidgetSpace = m_markLabelOffsets[pMark];
- int markLineOffset = markImageOffsetInWaveformWidgetSpace + pMark->m_linePosition;
- QRect labelRectangleInWaveformWidgetSpace;
- QRect markLineVicinity;
+ int markImagePositionInWidgetSpace = m_markLabelOffsets[pMark];
+ QPoint pointInImageSpace;
if (getOrientation() == Qt::Horizontal) {
- int labelBoundaryStartOffset =
- markImageOffsetInWaveformWidgetSpace +
- labelBoundingRectInMarkImageSpace.left();
- labelRectangleInWaveformWidgetSpace =
- QRect(labelBoundaryStartOffset,
- labelBoundingRectInMarkImageSpace.top(),
- labelBoundingRectInMarkImageSpace.width(),
- labelBoundingRectInMarkImageSpace.height());
- markLineVicinity = QRect(markLineOffset - lineHoverpadding,
- 0,
- lineHoverpadding * 2,
- getHeight());
+ pointInImageSpace = QPoint(point.x() - markImagePositionInWidgetSpace, point.y());
} else { /* Vertical */
- int labelBoundaryStartOffset =
- markImageOffsetInWaveformWidgetSpace +
- labelBoundingRectInMarkImageSpace.top();
- labelRectangleInWaveformWidgetSpace =
- QRect(labelBoundingRectInMarkImageSpace.left(),
- labelBoundaryStartOffset,
- labelBoundingRectInMarkImageSpace.width(),
- labelBoundingRectInMarkImageSpace.height());
- markLineVicinity = QRect(0,
- markLineOffset - lineHoverpadding,
- getWidth(),
- lineHoverpadding * 2);
+ pointInImageSpace = QPoint(point.x(), point.y() - markImagePositionInWidgetSpace);
}
-
- if (labelRectangleInWaveformWidgetSpace.contains(point) ||
- markLineVicinity.contains(point)) {
+ if (pMark->contains(pointInImageSpace, getOrientation())) {
return pMark;
}
}