summaryrefslogtreecommitdiffstats
path: root/src/waveform
diff options
context:
space:
mode:
authorJosepMaJAZ <josepma@gmail.com>2020-04-18 16:15:56 +0200
committerJosepMaJAZ <josepma@gmail.com>2020-04-18 16:15:56 +0200
commitb96b4247ca80a86b99a5497f20bb31189596b61a (patch)
tree4f47332bde311584484204a408f30dfe8a935c33 /src/waveform
parent82f3e4f6b436c1f93396e614a0eb592de03367eb (diff)
parent9adf8a97abb12673b85dbd3338cc215e65c06549 (diff)
Merge branch 'master' into GL_Qt514_windows-fix
Diffstat (limited to 'src/waveform')
-rw-r--r--src/waveform/renderers/waveformrendermark.cpp301
-rw-r--r--src/waveform/renderers/waveformsignalcolors.cpp8
-rw-r--r--src/waveform/renderers/waveformsignalcolors.h2
3 files changed, 125 insertions, 186 deletions
diff --git a/src/waveform/renderers/waveformrendermark.cpp b/src/waveform/renderers/waveformrendermark.cpp
index 61aa4f1b1f..2a51726d4c 100644
--- a/src/waveform/renderers/waveformrendermark.cpp
+++ b/src/waveform/renderers/waveformrendermark.cpp
@@ -150,219 +150,148 @@ void WaveformRenderMark::generateMarkImage(WaveformMarkPointer pMark) {
QPainter painter;
- // If no text is provided, leave m_markImage as a null image
- if (!pMark->m_text.isNull()) {
- // Determine mark text.
- QString label = pMark->m_text;
- if (pMark->getHotCue() >= 0) {
- if (!label.isEmpty()) {
- label.prepend(": ");
- }
- label.prepend(QString::number(pMark->getHotCue() + 1));
- if (label.size() > kMaxCueLabelLength) {
- label = label.left(kMaxCueLabelLength - 3) + "...";
- }
+ // Determine mark text.
+ QString label = pMark->m_text;
+ if (pMark->getHotCue() >= 0) {
+ if (!label.isEmpty()) {
+ label.prepend(": ");
}
-
- //QFont font("Bitstream Vera Sans");
- //QFont font("Helvetica");
- QFont font; // Uses the application default
- font.setPointSizeF(10 * scaleFactor());
- font.setStretch(100);
- font.setWeight(75);
-
- QFontMetrics metrics(font);
-
- //fixed margin ...
- QRect wordRect = metrics.tightBoundingRect(label);
- const int marginX = 1;
- const int marginY = 1;
- wordRect.moveTop(marginX + 1);
- wordRect.moveLeft(marginY + 1);
- wordRect.setHeight(wordRect.height() + (wordRect.height()%2));
- wordRect.setWidth(wordRect.width() + (wordRect.width())%2);
- //even wordrect to have an even Image >> draw the line in the middle !
-
- int labelRectWidth = wordRect.width() + 2 * marginX + 4;
- int labelRectHeight = wordRect.height() + 2 * marginY + 4 ;
-
- QRectF labelRect(0, 0,
- (float)labelRectWidth, (float)labelRectHeight);
-
- int width;
- int height;
-
- if (m_waveformRenderer->getOrientation() == Qt::Horizontal) {
- width = 2 * labelRectWidth + 1;
- height = m_waveformRenderer->getHeight();
- } else {
- width = m_waveformRenderer->getWidth();
- height = 2 * labelRectHeight + 1;
+ label.prepend(QString::number(pMark->getHotCue() + 1));
+ if (label.size() > kMaxCueLabelLength) {
+ label = label.left(kMaxCueLabelLength - 3) + "...";
}
+ }
- pMark->m_image = QImage(width * m_waveformRenderer->getDevicePixelRatio(),
- height * m_waveformRenderer->getDevicePixelRatio(),
- QImage::Format_ARGB32_Premultiplied);
- pMark->m_image.setDevicePixelRatio(m_waveformRenderer->getDevicePixelRatio());
-
- Qt::Alignment markAlignH = pMark->m_align & Qt::AlignHorizontal_Mask;
- Qt::Alignment markAlignV = pMark->m_align & Qt::AlignVertical_Mask;
-
- if (markAlignH == Qt::AlignHCenter) {
- labelRect.moveLeft((width - labelRectWidth) / 2);
- } else if (markAlignH == Qt::AlignRight) {
- labelRect.moveRight(width - 1);
- }
+ //QFont font("Bitstream Vera Sans");
+ //QFont font("Helvetica");
+ QFont font; // Uses the application default
+ font.setPointSizeF(10 * scaleFactor());
+ font.setStretch(100);
+ font.setWeight(75);
+
+ QFontMetrics metrics(font);
+
+ //fixed margin ...
+ QRect wordRect = metrics.tightBoundingRect(label);
+ const int marginX = 1;
+ const int marginY = 1;
+ wordRect.moveTop(marginX + 1);
+ wordRect.moveLeft(marginY + 1);
+ wordRect.setHeight(wordRect.height() + (wordRect.height() % 2));
+ wordRect.setWidth(wordRect.width() + (wordRect.width()) % 2);
+ //even wordrect to have an even Image >> draw the line in the middle !
+
+ int labelRectWidth = wordRect.width() + 2 * marginX + 4;
+ int labelRectHeight = wordRect.height() + 2 * marginY + 4;
+
+ QRectF labelRect(0, 0, (float)labelRectWidth, (float)labelRectHeight);
+
+ int width;
+ int height;
+
+ if (m_waveformRenderer->getOrientation() == Qt::Horizontal) {
+ width = 2 * labelRectWidth + 1;
+ height = m_waveformRenderer->getHeight();
+ } else {
+ width = m_waveformRenderer->getWidth();
+ height = 2 * labelRectHeight + 1;
+ }
- if (markAlignV == Qt::AlignVCenter) {
- labelRect.moveTop((height - labelRectHeight) / 2);
- } else if (markAlignV == Qt::AlignBottom) {
- labelRect.moveBottom(height - 1);
- }
+ pMark->m_image = QImage(width * m_waveformRenderer->getDevicePixelRatio(),
+ height * m_waveformRenderer->getDevicePixelRatio(),
+ QImage::Format_ARGB32_Premultiplied);
+ pMark->m_image.setDevicePixelRatio(m_waveformRenderer->getDevicePixelRatio());
- // Fill with transparent pixels
- pMark->m_image.fill(QColor(0,0,0,0).rgba());
+ Qt::Alignment markAlignH = pMark->m_align & Qt::AlignHorizontal_Mask;
+ Qt::Alignment markAlignV = pMark->m_align & Qt::AlignVertical_Mask;
- painter.begin(&pMark->m_image);
- painter.setRenderHint(QPainter::TextAntialiasing);
+ if (markAlignH == Qt::AlignHCenter) {
+ labelRect.moveLeft((width - labelRectWidth) / 2);
+ } else if (markAlignH == Qt::AlignRight) {
+ labelRect.moveRight(width - 1);
+ }
- painter.setWorldMatrixEnabled(false);
+ if (markAlignV == Qt::AlignVCenter) {
+ labelRect.moveTop((height - labelRectHeight) / 2);
+ } else if (markAlignV == Qt::AlignBottom) {
+ labelRect.moveBottom(height - 1);
+ }
- // Draw marker lines
- if (m_waveformRenderer->getOrientation() == Qt::Horizontal) {
- int middle = width / 2;
- if (markAlignH == Qt::AlignHCenter) {
- if (labelRect.top() > 0) {
- painter.setPen(pMark->fillColor());
- painter.drawLine(middle, 0, middle, labelRect.top());
+ // Fill with transparent pixels
+ pMark->m_image.fill(QColor(0, 0, 0, 0).rgba());
- painter.setPen(pMark->borderColor());
- painter.drawLine(middle - 1, 0, middle - 1, labelRect.top());
- painter.drawLine(middle + 1, 0, middle + 1, labelRect.top());
- }
+ painter.begin(&pMark->m_image);
+ painter.setRenderHint(QPainter::TextAntialiasing);
- if (labelRect.bottom() < height) {
- painter.setPen(pMark->fillColor());
- painter.drawLine(middle, labelRect.bottom(), middle, height);
+ painter.setWorldMatrixEnabled(false);
- painter.setPen(pMark->borderColor());
- painter.drawLine(middle - 1, labelRect.bottom(), middle - 1, height);
- painter.drawLine(middle + 1, labelRect.bottom(), middle + 1, height);
- }
- } else { // AlignLeft || AlignRight
+ // Draw marker lines
+ if (m_waveformRenderer->getOrientation() == Qt::Horizontal) {
+ int middle = width / 2;
+ if (markAlignH == Qt::AlignHCenter) {
+ if (labelRect.top() > 0) {
painter.setPen(pMark->fillColor());
- painter.drawLine(middle, 0, middle, height);
+ painter.drawLine(middle, 0, middle, labelRect.top());
painter.setPen(pMark->borderColor());
- painter.drawLine(middle - 1, 0, middle - 1, height);
- painter.drawLine(middle + 1, 0, middle + 1, height);
+ painter.drawLine(middle - 1, 0, middle - 1, labelRect.top());
+ painter.drawLine(middle + 1, 0, middle + 1, labelRect.top());
}
- } else { // Vertical
- int middle = height / 2;
- if (markAlignV == Qt::AlignVCenter) {
- if (labelRect.left() > 0) {
- painter.setPen(pMark->fillColor());
- painter.drawLine(0, middle, labelRect.left(), middle);
-
- painter.setPen(pMark->borderColor());
- painter.drawLine(0, middle - 1, labelRect.left(), middle - 1);
- painter.drawLine(0, middle + 1, labelRect.left(), middle + 1);
- }
-
- if (labelRect.right() < width) {
- painter.setPen(pMark->fillColor());
- painter.drawLine(labelRect.right(), middle, width, middle);
- painter.setPen(pMark->borderColor());
- painter.drawLine(labelRect.right(), middle - 1, width, middle - 1);
- painter.drawLine(labelRect.right(), middle + 1, width, middle + 1);
- }
- } else { // AlignTop || AlignBottom
+ if (labelRect.bottom() < height) {
painter.setPen(pMark->fillColor());
- painter.drawLine(0, middle, width, middle);
+ painter.drawLine(middle, labelRect.bottom(), middle, height);
painter.setPen(pMark->borderColor());
- painter.drawLine(0, middle - 1, width, middle - 1);
- painter.drawLine(0, middle + 1, width, middle + 1);
+ painter.drawLine(middle - 1, labelRect.bottom(), middle - 1, height);
+ painter.drawLine(middle + 1, labelRect.bottom(), middle + 1, height);
}
- }
+ } else { // AlignLeft || AlignRight
+ painter.setPen(pMark->fillColor());
+ painter.drawLine(middle, 0, middle, height);
- // Draw the label rect
- painter.setPen(pMark->borderColor());
- painter.setBrush(QBrush(pMark->fillColor()));
- painter.drawRoundedRect(labelRect, 2.0, 2.0);
-
- // Draw text
- painter.setBrush(QBrush(QColor(0,0,0,0)));
- painter.setFont(font);
- painter.setPen(pMark->labelColor());
- painter.drawText(labelRect, Qt::AlignCenter, label);
- }
- else //no text draw triangle
- {
- float triangleSize = 9.0;
- float markLength = triangleSize + 1.0;
- float markBreadth = m_waveformRenderer->getBreadth();
-
- int width, height;
-
- if (m_waveformRenderer->getOrientation() == Qt::Horizontal) {
- width = markLength;
- height = markBreadth;
- } else {
- width = markBreadth;
- height = markLength;
+ painter.setPen(pMark->borderColor());
+ painter.drawLine(middle - 1, 0, middle - 1, height);
+ painter.drawLine(middle + 1, 0, middle + 1, height);
}
+ } else { // Vertical
+ int middle = height / 2;
+ if (markAlignV == Qt::AlignVCenter) {
+ if (labelRect.left() > 0) {
+ painter.setPen(pMark->fillColor());
+ painter.drawLine(0, middle, labelRect.left(), middle);
- pMark->m_image = QImage(width, height, QImage::Format_ARGB32_Premultiplied);
- pMark->m_image.fill(QColor(0,0,0,0).rgba());
+ painter.setPen(pMark->borderColor());
+ painter.drawLine(0, middle - 1, labelRect.left(), middle - 1);
+ painter.drawLine(0, middle + 1, labelRect.left(), middle + 1);
+ }
- painter.begin(&pMark->m_image);
- painter.setRenderHint(QPainter::TextAntialiasing);
+ if (labelRect.right() < width) {
+ painter.setPen(pMark->fillColor());
+ painter.drawLine(labelRect.right(), middle, width, middle);
- painter.setWorldMatrixEnabled(false);
+ painter.setPen(pMark->borderColor());
+ painter.drawLine(labelRect.right(), middle - 1, width, middle - 1);
+ painter.drawLine(labelRect.right(), middle + 1, width, middle + 1);
+ }
+ } else { // AlignTop || AlignBottom
+ painter.setPen(pMark->fillColor());
+ painter.drawLine(0, middle, width, middle);
- // Rotate if drawing vertical waveforms
- if (m_waveformRenderer->getOrientation() == Qt::Vertical) {
- painter.setTransform(QTransform(0, 1, 1, 0, 0, 0));
+ painter.setPen(pMark->borderColor());
+ painter.drawLine(0, middle - 1, width, middle - 1);
+ painter.drawLine(0, middle + 1, width, middle + 1);
}
+ }
- QColor triangleColor = pMark->fillColor();
- painter.setPen(QColor(0,0,0,0));
- painter.setBrush(QBrush(triangleColor));
-
- //vRince: again don't ask about the +-0.1 0.5 ...
- // just to make it nice in Qt ...
-
- QPolygonF triangle;
- triangle.append(QPointF(0.5,0));
- triangle.append(QPointF(triangleSize+0.5,0));
- triangle.append(QPointF(triangleSize*0.5 + 0.1, triangleSize*0.5));
-
- painter.drawPolygon(triangle);
-
- triangle.clear();
- triangle.append(QPointF(0.0,markBreadth));
- triangle.append(QPointF(triangleSize+0.5,markBreadth));
- triangle.append(QPointF(triangleSize*0.5 + 0.1, markBreadth - triangleSize*0.5 - 2.1));
-
- painter.drawPolygon(triangle);
-
- //TODO vRince duplicated code make a method
- //draw line
- QColor lineColor = pMark->fillColor();
- painter.setPen(lineColor);
-
- float middle = markLength / 2.0;
-
- float lineTop = triangleSize * 0.5 + 1;
- float lineBottom = markBreadth - triangleSize * 0.5 - 1;
-
- painter.drawLine(middle, lineTop, middle, lineBottom);
+ // Draw the label rect
+ painter.setPen(pMark->borderColor());
+ painter.setBrush(QBrush(pMark->fillColor()));
+ painter.drawRoundedRect(labelRect, 2.0, 2.0);
- //other lines to increase contrast
- painter.setPen(QColor(0,0,0,100));
- painter.drawLine(middle - 1, lineTop, middle - 1, lineBottom);
- painter.drawLine(middle + 1, lineTop, middle + 1, lineBottom);
- }
+ // Draw text
+ painter.setBrush(QBrush(QColor(0, 0, 0, 0)));
+ painter.setFont(font);
+ painter.setPen(pMark->labelColor());
+ painter.drawText(labelRect, Qt::AlignCenter, label);
}
diff --git a/src/waveform/renderers/waveformsignalcolors.cpp b/src/waveform/renderers/waveformsignalcolors.cpp
index ea800a7ee9..41bbf22b6a 100644
--- a/src/waveform/renderers/waveformsignalcolors.cpp
+++ b/src/waveform/renderers/waveformsignalcolors.cpp
@@ -62,6 +62,14 @@ bool WaveformSignalColors::setup(const QDomNode &node, const SkinContext& contex
m_playedOverlayColor = Qt::transparent;
}
+ // This color is used to draw an overlay over the entire overview-waveforms
+ // if vinyl passthrough is enabled
+ m_passthroughOverlayColor = context.selectColor(node, "PassthroughOverlayColor");
+ m_passthroughOverlayColor = WSkinColor::getCorrectColor(m_passthroughOverlayColor).toRgb();
+ if (!m_passthroughOverlayColor.isValid()) {
+ m_passthroughOverlayColor = WSkinColor::getCorrectColor(QColor(187, 0, 0, 0)).toRgb();
+ }
+
m_bgColor = context.selectColor(node, "BgColor");
if (!m_bgColor.isValid()) {
m_bgColor = Qt::transparent;
diff --git a/src/waveform/renderers/waveformsignalcolors.h b/src/waveform/renderers/waveformsignalcolors.h
index 825323c195..0e789ed1c3 100644
--- a/src/waveform/renderers/waveformsignalcolors.h
+++ b/src/waveform/renderers/waveformsignalcolors.h
@@ -23,6 +23,7 @@ class WaveformSignalColors {
inline const QColor& getAxesColor() const { return m_axesColor; }
inline const QColor& getPlayPosColor() const { return m_playPosColor; }
inline const QColor& getPlayedOverlayColor() const { return m_playedOverlayColor; }
+ inline const QColor& getPassthroughOverlayColor() const { return m_passthroughOverlayColor; }
inline const QColor& getBgColor() const { return m_bgColor; }
protected:
@@ -42,6 +43,7 @@ class WaveformSignalColors {
QColor m_axesColor;
QColor m_playPosColor;
QColor m_playedOverlayColor;
+ QColor m_passthroughOverlayColor;
QColor m_bgColor;
};