diff options
Diffstat (limited to 'src/waveform/renderers')
34 files changed, 467 insertions, 374 deletions
diff --git a/src/waveform/renderers/glslwaveformrenderersignal.cpp b/src/waveform/renderers/glslwaveformrenderersignal.cpp index bc7ca730b8..6349eaa29f 100644 --- a/src/waveform/renderers/glslwaveformrenderersignal.cpp +++ b/src/waveform/renderers/glslwaveformrenderersignal.cpp @@ -15,6 +15,7 @@ GLSLWaveformRendererSignal::GLSLWaveformRendererSignal(WaveformWidgetRenderer* w m_bDumpPng(false), m_shadersValid(false), m_rgbShader(rgbShader) { + initializeOpenGLFunctions(); } GLSLWaveformRendererSignal::~GLSLWaveformRendererSignal() { @@ -138,8 +139,6 @@ void GLSLWaveformRendererSignal::createGeometry() { return; } -#ifndef __OPENGLES__ - glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -10.0, 10.0); @@ -167,7 +166,6 @@ void GLSLWaveformRendererSignal::createGeometry() { } glEndList(); -#endif } void GLSLWaveformRendererSignal::createFrameBuffers() { @@ -210,8 +208,10 @@ void GLSLWaveformRendererSignal::onSetup(const QDomNode& node) { void GLSLWaveformRendererSignal::onSetTrack() { if (m_loadedTrack) { - disconnect(m_loadedTrack.get(), SIGNAL(waveformUpdated()), - this, SLOT(slotWaveformUpdated())); + disconnect(m_loadedTrack.get(), + &Track::waveformUpdated, + this, + &GLSLWaveformRendererSignal::slotWaveformUpdated); } slotWaveformUpdated(); @@ -224,8 +224,10 @@ void GLSLWaveformRendererSignal::onSetTrack() { // When the track's waveform has been changed (or cleared), it is necessary // to update (or delete) the texture containing the waveform which was // uploaded to GPU. Otherwise, previous waveform will be shown. - connect(pTrack.get(), SIGNAL(waveformUpdated()), - this, SLOT(slotWaveformUpdated())); + connect(pTrack.get(), + &Track::waveformUpdated, + this, + &GLSLWaveformRendererSignal::slotWaveformUpdated); m_loadedTrack = pTrack; } @@ -290,8 +292,6 @@ void GLSLWaveformRendererSignal::draw(QPainter* painter, QPaintEvent* /*event*/) //qDebug() << "GAIN" << allGain << lowGain << midGain << highGain; -#ifndef __OPENGLES__ - //paint into frame buffer { glMatrixMode(GL_PROJECTION); @@ -446,7 +446,5 @@ void GLSLWaveformRendererSignal::draw(QPainter* painter, QPaintEvent* /*event*/) glMatrixMode(GL_PROJECTION); glPopMatrix(); -#endif - painter->endNativePainting(); } diff --git a/src/waveform/renderers/glslwaveformrenderersignal.h b/src/waveform/renderers/glslwaveformrenderersignal.h index 8e8887afb7..95c9b81cdb 100644 --- a/src/waveform/renderers/glslwaveformrenderersignal.h +++ b/src/waveform/renderers/glslwaveformrenderersignal.h @@ -4,12 +4,15 @@ #include <QGLFramebufferObject> #include <QGLShaderProgram> #include <QtOpenGL> +#include <QOpenGLFunctions_2_1> #include "track/track.h" #include "util/memory.h" #include "waveform/renderers/waveformrenderersignalbase.h" -class GLSLWaveformRendererSignal : public QObject, public WaveformRendererSignalBase { +class GLSLWaveformRendererSignal: public QObject, + public WaveformRendererSignalBase, + protected QOpenGLFunctions_2_1 { Q_OBJECT public: GLSLWaveformRendererSignal(WaveformWidgetRenderer* waveformWidgetRenderer, @@ -51,12 +54,14 @@ class GLSLWaveformRendererSignal : public QObject, public WaveformRendererSignal std::unique_ptr<QGLShaderProgram> m_frameShaderProgram; }; -class GLSLWaveformRendererFilteredSignal : public GLSLWaveformRendererSignal { - public: +class GLSLWaveformRendererFilteredSignal: public GLSLWaveformRendererSignal { +public: GLSLWaveformRendererFilteredSignal( - WaveformWidgetRenderer* waveformWidgetRenderer) - : GLSLWaveformRendererSignal(waveformWidgetRenderer, false) {} - ~GLSLWaveformRendererFilteredSignal() override {} + WaveformWidgetRenderer* waveformWidgetRenderer) : + GLSLWaveformRendererSignal(waveformWidgetRenderer, false) { + } + ~GLSLWaveformRendererFilteredSignal() override { + } }; class GLSLWaveformRendererRGBSignal : public GLSLWaveformRendererSignal { diff --git a/src/waveform/renderers/glvsynctestrenderer.cpp b/src/waveform/renderers/glvsynctestrenderer.cpp index 8872097195..9dce60906f 100644 --- a/src/waveform/renderers/glvsynctestrenderer.cpp +++ b/src/waveform/renderers/glvsynctestrenderer.cpp @@ -1,5 +1,3 @@ -#include <qgl.h> - #include "waveform/renderers/glvsynctestrenderer.h" #include "waveform/renderers/waveformwidgetrenderer.h" @@ -11,6 +9,7 @@ GLVSyncTestRenderer::GLVSyncTestRenderer( WaveformWidgetRenderer* waveformWidgetRenderer) : WaveformRendererSignalBase(waveformWidgetRenderer), m_drawcount(0) { + initializeOpenGLFunctions(); } GLVSyncTestRenderer::~GLVSyncTestRenderer() { @@ -72,8 +71,6 @@ void GLVSyncTestRenderer::draw(QPainter* painter, QPaintEvent* /*event*/) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -#ifndef __OPENGLES__ - //t7 = timer.restart(); // 5,770 ns glMatrixMode(GL_PROJECTION); @@ -119,8 +116,6 @@ void GLVSyncTestRenderer::draw(QPainter* painter, QPaintEvent* /*event*/) { glMatrixMode(GL_PROJECTION); glPopMatrix(); -#endif - //t12 = timer.restart(); // 22,426 ns painter->endNativePainting(); diff --git a/src/waveform/renderers/glvsynctestrenderer.h b/src/waveform/renderers/glvsynctestrenderer.h index 6790b8ebc1..0cb7f24387 100644 --- a/src/waveform/renderers/glvsynctestrenderer.h +++ b/src/waveform/renderers/glvsynctestrenderer.h @@ -1,18 +1,22 @@ #ifndef GLVSYNCTESTRENDERER_H #define GLVSYNCTESTRENDERER_H +#include <QOpenGLFunctions_2_1> + #include "waveformrenderersignalbase.h" class ControlObject; -class GLVSyncTestRenderer : public WaveformRendererSignalBase { - public: - explicit GLVSyncTestRenderer(WaveformWidgetRenderer* waveformWidgetRenderer); +class GLVSyncTestRenderer: public WaveformRendererSignalBase, + protected QOpenGLFunctions_2_1 { +public: + explicit GLVSyncTestRenderer( + WaveformWidgetRenderer* waveformWidgetRenderer); virtual ~GLVSyncTestRenderer(); virtual void onSetup(const QDomNode &node); virtual void draw(QPainter* painter, QPaintEvent* event); - private: +private: int m_drawcount; }; diff --git a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp index 2788bff1c5..65c13e9499 100644 --- a/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp +++ b/src/waveform/renderers/glwaveformrendererfilteredsignal.cpp @@ -7,12 +7,10 @@ #include <QDomNode> -#include <qgl.h> - GLWaveformRendererFilteredSignal::GLWaveformRendererFilteredSignal( WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { - + : WaveformRendererSignalBase(waveformWidgetRenderer) { + initializeOpenGLFunctions(); } GLWaveformRendererFilteredSignal::~GLWaveformRendererFilteredSignal() { @@ -65,8 +63,6 @@ void GLWaveformRendererFilteredSignal::draw(QPainter* painter, QPaintEvent* /*ev float allGain(1.0), lowGain(1.0), midGain(1.0), highGain(1.0); getGains(&allGain, &lowGain, &midGain, &highGain); -#ifndef __OPENGLES__ - if (m_alignment == Qt::AlignCenter) { glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -225,7 +221,5 @@ void GLWaveformRendererFilteredSignal::draw(QPainter* painter, QPaintEvent* /*ev glMatrixMode(GL_PROJECTION); glPopMatrix(); -#endif - painter->endNativePainting(); } diff --git a/src/waveform/renderers/glwaveformrendererfilteredsignal.h b/src/waveform/renderers/glwaveformrendererfilteredsignal.h index 9c27fec8e5..71fac48f15 100644 --- a/src/waveform/renderers/glwaveformrendererfilteredsignal.h +++ b/src/waveform/renderers/glwaveformrendererfilteredsignal.h @@ -1,13 +1,17 @@ #ifndef GLWAVEFROMRENDERERFILTEREDSIGNAL_H #define GLWAVEFROMRENDERERFILTEREDSIGNAL_H +#include <QOpenGLFunctions_2_1> + #include "waveformrenderersignalbase.h" class ControlObject; -class GLWaveformRendererFilteredSignal : public WaveformRendererSignalBase { - public: - explicit GLWaveformRendererFilteredSignal(WaveformWidgetRenderer* waveformWidgetRenderer); +class GLWaveformRendererFilteredSignal: public WaveformRendererSignalBase, + protected QOpenGLFunctions_2_1 { +public: + explicit GLWaveformRendererFilteredSignal( + WaveformWidgetRenderer* waveformWidgetRenderer); virtual ~GLWaveformRendererFilteredSignal(); virtual void onSetup(const QDomNode &node); diff --git a/src/waveform/renderers/glwaveformrendererrgb.cpp b/src/waveform/renderers/glwaveformrendererrgb.cpp index 7a9293672f..cf70ec4077 100644 --- a/src/waveform/renderers/glwaveformrendererrgb.cpp +++ b/src/waveform/renderers/glwaveformrendererrgb.cpp @@ -1,5 +1,3 @@ -#include <qgl.h> - #include "glwaveformrendererrgb.h" #include "waveformwidgetrenderer.h" #include "waveform/waveform.h" @@ -10,8 +8,8 @@ GLWaveformRendererRGB::GLWaveformRendererRGB( WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { - + : WaveformRendererSignalBase(waveformWidgetRenderer) { + initializeOpenGLFunctions(); } GLWaveformRendererRGB::~GLWaveformRendererRGB() { @@ -63,8 +61,6 @@ void GLWaveformRendererRGB::draw(QPainter* painter, QPaintEvent* /*event*/) { const float kHeightScaleFactor = 255.0 / sqrtf(255 * 255 * 3); -#ifndef __OPENGLES__ - if (m_alignment == Qt::AlignCenter) { glMatrixMode(GL_PROJECTION); glPushMatrix(); @@ -194,7 +190,5 @@ void GLWaveformRendererRGB::draw(QPainter* painter, QPaintEvent* /*event*/) { glMatrixMode(GL_PROJECTION); glPopMatrix(); -#endif - painter->endNativePainting(); } diff --git a/src/waveform/renderers/glwaveformrendererrgb.h b/src/waveform/renderers/glwaveformrendererrgb.h index ec6184871f..95c7ef857d 100644 --- a/src/waveform/renderers/glwaveformrendererrgb.h +++ b/src/waveform/renderers/glwaveformrendererrgb.h @@ -1,13 +1,17 @@ #ifndef GLWAVEFORMRENDERERRGB_H #define GLWAVEFORMRENDERERRGB_H +#include <QOpenGLFunctions_2_1> + #include "waveformrenderersignalbase.h" class ControlObject; -class GLWaveformRendererRGB : public WaveformRendererSignalBase { +class GLWaveformRendererRGB: public WaveformRendererSignalBase, + protected QOpenGLFunctions_2_1 { public: - explicit GLWaveformRendererRGB(WaveformWidgetRenderer* waveformWidgetRenderer); + explicit GLWaveformRendererRGB( + WaveformWidgetRenderer* waveformWidgetRenderer); virtual ~GLWaveformRendererRGB(); virtual void onSetup(const QDomNode& node); diff --git a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp index 4ac046a589..e57673cf9a 100644 --- a/src/waveform/renderers/glwaveformrenderersimplesignal.cpp +++ b/src/waveform/renderers/glwaveformrenderersimplesignal.cpp @@ -6,12 +6,11 @@ #include "waveform/waveformwidgetfactory.h" #include "util/math.h" -#include <qgl.h> GLWaveformRendererSimpleSignal::GLWaveformRendererSimpleSignal( WaveformWidgetRenderer* waveformWidgetRenderer) - : WaveformRendererSignalBase(waveformWidgetRenderer) { - + : WaveformRendererSignalBase(waveformWidgetRenderer) { + initializeOpenGLFunctions(); } GLWaveformRendererSimpleSignal::~GLWaveformRendererSimpleSignal() { @@ -60,8 +59,6 @@ void GLWaveformRendererSimpleSignal::draw(QPainter* painter, QPaintEvent* /*even // Reset device for native painting painter->beginNativePainting(); -#ifndef __OPENGLES__ - glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -159,7 +156,5 @@ void GLWaveformRendererSimpleSignal::draw(QPainter* painter, QPaintEvent* /*even glMatrixMode(GL_PROJECTION); glPopMatrix(); -#endif - painter->endNativePainting(); } diff --git a/src/waveform/renderers/glwaveformrenderersimplesignal.h b/src/waveform/renderers/glwaveformrenderersimplesignal.h index 78c6cec64e..5cb1068cec 100644 --- a/src/waveform/renderers/glwaveformrenderersimplesignal.h +++ b/src/waveform/renderers/glwaveformrenderersimplesignal.h @@ -1,11 +1,13 @@ #ifndef GLWAVEFORMRENDERERSIMPLESIGNAL_H #define GLWAVEFORMRENDERERSIMPLESIGNAL_H +#include <QOpenGLFunctions_2_1> + #include "waveformrenderersignalbase.h" class ControlObject; -class GLWaveformRendererSimpleSignal : public WaveformRendererSignalBase { +class GLWaveformRendererSimpleSignal : public WaveformRendererSignalBase, protected QOpenGLFunctions_2_1 { public: explicit GLWaveformRendererSimpleSignal(WaveformWidgetRenderer* waveformWidgetRenderer); virtual ~GLWaveformRendererSimpleSignal(); diff --git a/src/waveform/renderers/qtvsynctestrenderer.cpp b/src/waveform/renderers/qtvsynctestrenderer.cpp new file mode 100644 index 0000000000..8357703613 --- /dev/null +++ b/src/waveform/renderers/qtvsynctestrenderer.cpp @@ -0,0 +1,68 @@ +#include "waveform/renderers/qtvsynctestrenderer.h" + +#include "waveform/renderers/waveformwidgetrenderer.h" +#include "waveform/waveform.h" +#include "waveform/waveformwidgetfactory.h" +#include "util/painterscope.h" +#include "util/performancetimer.h" + +QtVSyncTestRenderer::QtVSyncTestRenderer( + WaveformWidgetRenderer* waveformWidgetRenderer) + : WaveformRendererSignalBase(waveformWidgetRenderer), + m_drawcount(0) { +} + +QtVSyncTestRenderer::~QtVSyncTestRenderer() { +} + +void QtVSyncTestRenderer::onSetup(const QDomNode& node) { + Q_UNUSED(node); +} + +inline void setPoint(QPointF& point, qreal x, qreal y) { + point.setX(x); + point.setY(y); +} + +void QtVSyncTestRenderer::draw(QPainter* pPainter, QPaintEvent* /*event*/) { + + PerformanceTimer timer; + //mixxx::Duration t5, t6, t7, t8, t9, t10, t11, t12, t13; + + + timer.start(); + + TrackPointer pTrack = m_waveformRenderer->getTrackInfo(); + if (!pTrack) { + return; + } + + ConstWaveformPointer waveform = pTrack->getWaveform(); + if (waveform.isNull()) { + return; + } + + const int dataSize = waveform->getDataSize(); + if (dataSize <= 1) { + return; + } + + const WaveformData* data = waveform->data(); + if (data == NULL) { + return; + } + + PainterScope PainterScope(pPainter); + + auto brush = QBrush(Qt::SolidPattern); + if (++m_drawcount & 1) { + brush.setColor(QColor(255, 255, 255)); + } else { + brush.setColor(QColor(255, 0, 0)); + } + + pPainter->setBrush(brush); + + pPainter->drawRect(0, 0, m_waveformRenderer->getWidth(), + m_waveformRenderer->getHeight()); +} diff --git a/src/waveform/renderers/qtvsynctestrenderer.h b/src/waveform/renderers/qtvsynctestrenderer.h new file mode 100644 index 0000000000..99386f5ffb --- /dev/null +++ b/src/waveform/renderers/qtvsynctestrenderer.h @@ -0,0 +1,19 @@ +#ifndef QTVSYNCTESTRENDERER_H +#define QTVSYNCTESTRENDERER_H + +#include "waveformrenderersignalbase.h" + +class ControlObject; + +class QtVSyncTestRenderer : public WaveformRendererSignalBase { + public: + explicit QtVSyncTestRenderer(WaveformWidgetRenderer* waveformWidgetRenderer); + virtual ~QtVSyncTestRenderer(); + + virtual void onSetup(const QDomNode &node); + virtual void draw(QPainter* painter, QPaintEvent* event); + private: + int m_drawcount; +}; + +#endif // QTVSYNCTESTRENDERER_H diff --git a/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp b/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp index bcd5dc2191..2552db3979 100644 --- a/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp +++ b/src/waveform/renderers/qtwaveformrendererfilteredsignal.cpp @@ -6,6 +6,7 @@ #include "control/controlproxy.h" #include "track/track.h" #include "util/math.h" +#include "util/painterscope.h" #include <QLineF> #include <QLinearGradient> @@ -275,7 +276,7 @@ void QtWaveformRendererFilteredSignal::draw(QPainter* painter, QPaintEvent* /*ev if (!pTrack) return; - painter->save(); + PainterScope PainterScope(painter); painter->setRenderHint(QPainter::Antialiasing); painter->resetTransform(); @@ -335,6 +336,4 @@ void QtWaveformRendererFilteredSignal::draw(QPainter* painter, QPaintEvent* /*ev painter->setBrush(m_highBrush); } painter->drawPolygon(&m_polygon[2][0], numberOfPoints); - - painter->restore(); } diff --git a/src/waveform/renderers/qtwaveformrenderersimplesignal.cpp b/src/waveform/renderers/qtwaveformrenderersimplesignal.cpp index b15f460c9f..0669422b84 100644 --- a/src/waveform/renderers/qtwaveformrenderersimplesignal.cpp +++ b/src/waveform/renderers/qtwaveformrenderersimplesignal.cpp @@ -7,6 +7,7 @@ #include "widget/wwidget.h" #include "track/track.h" #include "util/math.h" +#include "util/painterscope.h" #include <QLinearGradient> @@ -58,7 +59,7 @@ void QtWaveformRendererSimpleSignal::draw(QPainter* painter, QPaintEvent* /*even return; } - painter->save(); + PainterScope PainterScope(painter); painter->setRenderHint(QPainter::Antialiasing); painter->resetTransform(); @@ -214,8 +215,6 @@ void QtWaveformRendererSimpleSignal::draw(QPainter* painter, QPaintEvent* /*even painter->setBrush(m_brush); painter->drawPolygon(&m_polygon[0], m_polygon.size()); - - painter->restore(); } void QtWaveformRendererSimpleSignal::onResize() { diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index 220b5b2e47..0f2db81ada 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -1,24 +1,49 @@ #include <QtDebug> #include "skin/skincontext.h" -#include "waveform/renderers/waveformmarkproperties.h" +#include "waveform/renderers/waveformsignalcolors.h" +#include "widget/wskincolor.h" #include "waveformmark.h" -WaveformMark::WaveformMark(const QString& group, - const QDomNode& node, - const SkinContext& context, - const WaveformSignalColors& signalColors) - : m_iHotCue(kNoHotCue) { - QString item = context.selectString(node, "Control"); - if (!item.isEmpty()) { - m_pPointCos = std::make_unique<ControlProxy>(group, item); - if (item.startsWith("hotcue_") && item.endsWith("_position")) { - m_iHotCue = item.mid(7, item.count() - 16).toInt() - 1; +namespace { +Qt::Alignment decodeAlignmentFlags(QString alignString, Qt::Alignment defaultFlags) { + QStringList stringFlags = alignString.toLower() + .split("|", QString::SkipEmptyParts); + + Qt::Alignment hflags = 0L; + Qt::Alignment vflags = 0L; + + for (auto stringFlag : stringFlags) { + if (stringFlag == "center") { + hflags |= Qt::AlignHCenter; + vflags |= Qt::AlignVCenter; + } else if (stringFlag == "left") { + hflags |= Qt::AlignLeft; + } else if (stringFlag == "hcenter") { + hflags |= Qt::AlignHCenter; + } else if (stringFlag == "right") { + hflags |= Qt::AlignRight; + } else if (stringFlag == "top") { + vflags |= Qt::AlignTop; + } else if (stringFlag == "vcenter") { + vflags |= Qt::AlignVCenter; + } else if (stringFlag == "bottom") { + vflags |= Qt::AlignBottom; } } - m_properties = WaveformMarkProperties(node, context, signalColors, m_iHotCue); + + if (hflags != Qt::AlignLeft && hflags != Qt::AlignHCenter && hflags != Qt::AlignRight) { + hflags = defaultFlags & Qt::AlignHorizontal_Mask; + } + + if (vflags != Qt::AlignTop && vflags != Qt::AlignVCenter && vflags != Qt::AlignBottom) { + vflags = defaultFlags & Qt::AlignVertical_Mask; + } + + return hflags | vflags; } +} // anonymous namespace WaveformMark::WaveformMark(const QString& group, const QDomNode& node, @@ -26,15 +51,55 @@ WaveformMark::WaveformMark(const QString& group, const WaveformSignalColors& signalColors, int hotCue) : m_iHotCue(hotCue) { - if (hotCue >= 0) { - QString item = "hotcue_" + QString::number(hotCue + 1) + "_position"; - m_pPointCos = std::make_unique<ControlProxy>(group, item); + QString control; + if (hotCue != kNoHotCue) { + control = "hotcue_" + QString::number(hotCue + 1) + "_position"; + } else { + control = context.selectString(node, "Control"); } - m_properties = WaveformMarkProperties(node, context, signalColors, hotCue); -} + if (!control.isEmpty()) { + m_pPointCos = std::make_unique<ControlProxy>(group, control); + } + + QString visibilityControl = context.selectString(node, "VisibilityControl"); + if (!visibilityControl.isEmpty()) { + ConfigKey key = ConfigKey::parseCommaSeparated(visibilityControl); + m_pVisibleCos = std::make_unique<ControlProxy>(key); + } + + QColor color(context.selectString(node, "Color")); + if (!color.isValid()) { + // As a fallback, grab the color from the parent's AxesColor + color = signalColors.getAxesColor(); + qDebug() << "Didn't get mark <Color>, using parent's <AxesColor>:" << color; + } else { + color = WSkinColor::getCorrectColor(color); + } + setBaseColor(color); + m_textColor = context.selectString(node, "TextColor"); + if (!m_textColor.isValid()) { + // Read the text color, otherwise use the parent's BgColor. + m_textColor = signalColors.getBgColor(); + qDebug() << "Didn't get mark <TextColor>, using parent's <BgColor>:" << m_textColor; + } + + QString markAlign = context.selectString(node, "Align"); + m_align = decodeAlignmentFlags(markAlign, Qt::AlignBottom | Qt::AlignHCenter); -void WaveformMark::connectSamplePositionChanged(const QObject *obj, const char *slt) const { - m_pPointCos->connectValueChanged(obj, slt, Qt::AutoConnection); + // Hotcue text is set by the cue's label in the database, not by the skin. + if (hotCue == WaveformMark::kNoHotCue) { + m_text = context.selectString(node, "Text"); + } + + m_pixmapPath = context.selectString(node, "Pixmap"); + if (!m_pixmapPath.isEmpty()) { + m_pixmapPath = context.makeSkinPath(m_pixmapPath); + } } +void WaveformMark::setBaseColor(QColor baseColor) { + 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/waveformmark.h b/src/waveform/renderers/waveformmark.h index 76f99d7d05..ab11862df1 100644 --- a/src/waveform/renderers/waveformmark.h +++ b/src/waveform/renderers/waveformmark.h @@ -4,10 +4,10 @@ #include <QDomNode> #include <QImage> +#include "waveform/waveformmarklabel.h" #include "control/controlproxy.h" #include "util/memory.h" -#include "waveform/renderers/waveformmarkproperties.h" #include "control/controlobject.h" class SkinContext; @@ -22,44 +22,92 @@ class WaveformMark { const QString& group, const QDomNode& node, const SkinContext& context, - const WaveformSignalColors& signalColors); - - WaveformMark( - const QString& group, - const QDomNode& node, - const SkinContext& context, const WaveformSignalColors& signalColors, - int hotCue); - + int hotCue = kNoHotCue); // Disable copying WaveformMark(const WaveformMark&) = delete; WaveformMark& operator=(const WaveformMark&) = delete; - const WaveformMarkProperties& getProperties() const { |