diff --git a/src/rendergraph/opengl/CMakeLists.txt b/src/rendergraph/opengl/CMakeLists.txt index 67de29950a84..04c4064b8a82 100644 --- a/src/rendergraph/opengl/CMakeLists.txt +++ b/src/rendergraph/opengl/CMakeLists.txt @@ -1,5 +1,6 @@ add_library( rendergraph_gl + STATIC ${COMMON_RENDERGRAPH_FILES} attributeset.cpp backend/baseattributeset.cpp diff --git a/src/rendergraph/opengl/backend/basegeometry.h b/src/rendergraph/opengl/backend/basegeometry.h index 86c0e41e9ae3..c97c0b56210d 100644 --- a/src/rendergraph/opengl/backend/basegeometry.h +++ b/src/rendergraph/opengl/backend/basegeometry.h @@ -42,6 +42,9 @@ class rendergraph::BaseGeometry { return m_sizeOfVertex; } void allocate(int vertexCount) { + if (m_vertexCount == vertexCount) { + return; + } m_vertexCount = vertexCount; m_vertexData.resize(m_vertexCount * sizeOfVertex() / sizeof(float)); } diff --git a/src/rendergraph/scenegraph/CMakeLists.txt b/src/rendergraph/scenegraph/CMakeLists.txt index 1e52790a94c7..a0b0c65251f4 100644 --- a/src/rendergraph/scenegraph/CMakeLists.txt +++ b/src/rendergraph/scenegraph/CMakeLists.txt @@ -1,5 +1,6 @@ add_library( rendergraph_sg + STATIC ${COMMON_RENDERGRAPH_FILES} attributeset.cpp backend/baseattributeset.cpp diff --git a/src/waveform/renderers/allshader/waveformrendererfiltered.cpp b/src/waveform/renderers/allshader/waveformrendererfiltered.cpp index a7852dcd500d..efab7bdd60ad 100644 --- a/src/waveform/renderers/allshader/waveformrendererfiltered.cpp +++ b/src/waveform/renderers/allshader/waveformrendererfiltered.cpp @@ -190,7 +190,9 @@ bool WaveformRendererFiltered::preprocessInner() { DEBUG_ASSERT(reserved == vertexUpdater[0].index() + vertexUpdater[1].index() + - vertexUpdater[2].index()); + vertexUpdater[2].index() + + numVerticesPerLine); // all lines on the three channels and + // the axis markDirtyMaterial(); diff --git a/src/waveform/renderers/allshader/waveformrendermark.cpp b/src/waveform/renderers/allshader/waveformrendermark.cpp index 43ac0dd7d9e8..28a4c6610825 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.cpp +++ b/src/waveform/renderers/allshader/waveformrendermark.cpp @@ -146,7 +146,12 @@ allshader::WaveformRenderMark::WaveformRenderMark( m_pTimeRemainingControl(nullptr), m_isSlipRenderer(type == ::WaveformRendererAbstract::Slip), m_playPosHeight(0.f), - m_playPosDevicePixelRatio(0.f) { + m_playPosDevicePixelRatio(0.f), + m_untilMarkShowBeats{false}, + m_untilMarkShowTime(false), + m_untilMarkAlign(Qt::AlignVCenter), + m_untilMarkTextSize(0), + m_untilMarkTextHeightLimit(0.0) { { auto pNode = std::make_unique(); m_pRangeNodesParent = pNode.get(); @@ -171,14 +176,7 @@ allshader::WaveformRenderMark::WaveformRenderMark( m_pPlayPosNode->initForRectangles(1); appendChildNode(std::move(pNode)); } -} - -void allshader::WaveformRenderMark::draw(QPainter*, QPaintEvent*) { - DEBUG_ASSERT(false); -} -void allshader::WaveformRenderMark::setup(const QDomNode& node, const SkinContext& context) { - ::WaveformRenderMarkBase::setup(node, context); auto* pWaveformWidgetFactory = WaveformWidgetFactory::instance(); connect(pWaveformWidgetFactory, &WaveformWidgetFactory::untilMarkShowBeatsChanged, @@ -200,6 +198,26 @@ void allshader::WaveformRenderMark::setup(const QDomNode& node, const SkinContex &WaveformWidgetFactory::untilMarkTextHeightLimitChanged, this, &WaveformRenderMark::setUntilMarkTextHeightLimit); +} + +void allshader::WaveformRenderMark::draw(QPainter*, QPaintEvent*) { + DEBUG_ASSERT(false); +} + +void allshader::WaveformRenderMark::setup(const QDomNode& node, const SkinContext& context) { + ::WaveformRenderMarkBase::setup(node, context); + auto* pWaveformWidgetFactory = WaveformWidgetFactory::instance(); + + m_untilMarkShowBeats = pWaveformWidgetFactory->getUntilMarkShowBeats(); + m_untilMarkShowTime = pWaveformWidgetFactory->getUntilMarkShowTime(); + m_untilMarkAlign = pWaveformWidgetFactory->getUntilMarkAlign(); + + m_untilMarkTextSize = + pWaveformWidgetFactory->getUntilMarkTextPointSize(); + m_untilMarkTextHeightLimit = + pWaveformWidgetFactory + ->getUntilMarkTextHeightLimit(); // proportion of waveform + // height m_playMarkerForegroundColor = m_waveformRenderer->getWaveformSignalColors()->getPlayPosColor(); m_playMarkerBackgroundColor = m_waveformRenderer->getWaveformSignalColors()->getBgColor(); @@ -397,6 +415,8 @@ void allshader::WaveformRenderMark::update() { if (m_untilMarkShowBeats || m_untilMarkShowTime) { updateUntilMark(playPosition, nextMarkPosition); updateDigitsNodeForUntilMark(roundToPixel(playMarkerPos + 20.f)); + } else { + m_pDigitsRenderNode->clear(); } } diff --git a/src/waveform/renderers/waveformmark.cpp b/src/waveform/renderers/waveformmark.cpp index dcdd2fdc15c5..be701859f3fd 100644 --- a/src/waveform/renderers/waveformmark.cpp +++ b/src/waveform/renderers/waveformmark.cpp @@ -141,7 +141,7 @@ WaveformMark::WaveformMark(const QString& group, if (!color.isValid()) { // As a fallback, grab the color from the parent's AxesColor - // color = signalColors.getAxesColor(); + color = signalColors.getAxesColor(); qDebug() << "Didn't get mark :" << color; } else { color = WSkinColor::getCorrectColor(color); diff --git a/src/waveform/renderers/waveformmarkset.cpp b/src/waveform/renderers/waveformmarkset.cpp index d417297b59e4..40ecfed3b328 100644 --- a/src/waveform/renderers/waveformmarkset.cpp +++ b/src/waveform/renderers/waveformmarkset.cpp @@ -22,24 +22,17 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, bool hasDefaultMark = false; QDomNode child = node.firstChild(); - DefaultMarkerStyle defaultModel; + QDomNode defaultChild; int priority = 0; while (!child.isNull()) { if (child.nodeName() == "DefaultMark") { - defaultModel = DefaultMarkerStyle{ - context.selectString(node, "Control"), - context.selectString(node, "VisibilityControl"), - context.selectString(node, "TextColor"), - context.selectString(node, "Align"), - context.selectString(node, "Text"), - context.selectString(node, "Pixmap"), - context.selectString(node, "Icon"), - context.selectString(node, "Color"), - }; + m_pDefaultMark = WaveformMarkPointer::create( + group, child, context, --priority, signalColors); hasDefaultMark = true; + defaultChild = child; } else if (child.nodeName() == "Mark") { - WaveformMarkPointer pMark(new WaveformMark( - group, child, context, --priority, signalColors)); + auto pMark = WaveformMarkPointer::create( + group, child, context, --priority, signalColors); if (pMark->isValid()) { // guarantee uniqueness even if there is a misdesigned skin QString item = pMark->getItem(); @@ -59,14 +52,22 @@ void WaveformMarkSet::setup(const QString& group, const QDomNode& node, // check if there is a default mark and compare declared // and to create all missing hot_cues if (hasDefaultMark) { - setDefault(group, defaultModel, signalColors); + for (int i = 0; i < NUM_HOT_CUES; ++i) { + if (m_hotCueMarks.value(i).isNull()) { + // qDebug() << "WaveformRenderMark::setup - Automatic mark" << hotCueControlItem; + auto pMark = WaveformMarkPointer::create( + group, defaultChild, context, i, signalColors, i); + m_marks.push_front(pMark); + m_hotCueMarks.insert(pMark->getHotCue(), pMark); + } + } } } void WaveformMarkSet::setDefault(const QString& group, const DefaultMarkerStyle& model, const WaveformSignalColors& signalColors) { - m_pDefaultMark = WaveformMarkPointer(new WaveformMark( + m_pDefaultMark = WaveformMarkPointer::create( group, model.positionControl, @@ -79,10 +80,10 @@ void WaveformMarkSet::setDefault(const QString& group, model.color, 0, Cue::kNoHotCue, - signalColors)); + signalColors); for (int i = 0; i < NUM_HOT_CUES; ++i) { if (m_hotCueMarks.value(i).isNull()) { - WaveformMarkPointer pMark(new WaveformMark( + auto pMark = WaveformMarkPointer::create( group, model.positionControl, @@ -95,7 +96,7 @@ void WaveformMarkSet::setDefault(const QString& group, model.color, i, i, - signalColors)); + signalColors); m_marks.push_front(pMark); m_hotCueMarks.insert(pMark->getHotCue(), pMark); }