Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
acolombier committed Oct 20, 2024
1 parent 9afd06a commit a315259
Show file tree
Hide file tree
Showing 17 changed files with 199 additions and 215 deletions.
70 changes: 35 additions & 35 deletions res/qml/WaveformDisplay.qml
Original file line number Diff line number Diff line change
Expand Up @@ -27,38 +27,38 @@ Item {
color: 'red'
}

// // Mixxx.WaveformRendererMarkRange {
// // // <!-- Loop -->
// // Mixxx.WaveformMarkRange {
// // startControl: "loop_start_position"
// // endControl: "loop_end_position"
// // enabledControl: "loop_enabled"
// // color: 'LoopColor'
// // opacity: 0.7
// // disabledColor: '#FFFFFF'
// // disabledOpacity: 0.6
// // }
// // // <!-- Intro -->
// // Mixxx.WaveformMarkRange {
// // startControl: "intro_start_position"
// // endControl: "intro_end_position"
// // // visibilityControl: '[Skin],show_intro_outro_cues'
// // color: 'IntroOutroColor'
// // opacity: 0.6
// // durationTextColor: '#ffffff'
// // durationTextLocation: 'after'
// // }
// // // <!-- Outro -->
// // Mixxx.WaveformMarkRange {
// // startControl: "outro_start_position"
// // endControl: "outro_end_position"
// // // visibilityControl: '[Skin],show_intro_outro_cues'
// // color: 'IntroOutroColor'
// // opacity: 0.6
// // durationTextColor: '#ffffff'
// // durationTextLocation: 'before'
// // }
// // }
Mixxx.WaveformRendererMarkRange {
// // <!-- Loop -->
Mixxx.WaveformMarkRange {
startControl: "loop_start_position"
endControl: "loop_end_position"
enabledControl: "loop_enabled"
color: 'LoopColor'
opacity: 0.7
disabledColor: '#FFFFFF'
disabledOpacity: 0.6
}
// // <!-- Intro -->
// Mixxx.WaveformMarkRange {
// startControl: "intro_start_position"
// endControl: "intro_end_position"
// // visibilityControl: '[Skin],show_intro_outro_cues'
// color: 'IntroOutroColor'
// opacity: 0.6
// durationTextColor: '#ffffff'
// durationTextLocation: 'after'
// }
// // <!-- Outro -->
// Mixxx.WaveformMarkRange {
// startControl: "outro_start_position"
// endControl: "outro_end_position"
// // visibilityControl: '[Skin],show_intro_outro_cues'
// color: 'IntroOutroColor'
// opacity: 0.6
// durationTextColor: '#ffffff'
// durationTextLocation: 'before'
// }
}

Mixxx.WaveformRendererRGB {
axesColor: 'yellow'
Expand Down Expand Up @@ -89,7 +89,7 @@ Item {
}
Mixxx.WaveformMark {
control: "loop_start_position"
text: '&#8635;'
text: ';'
align: 'top|left'
color: 'green'
textColor: '#FFFFFF'
Expand All @@ -113,15 +113,15 @@ Item {
Mixxx.WaveformMark {
control: "intro_end_position"
// visibilityControl: '[Skin],show_intro_outro_cues'
text: '&#9698;'
text: ''
align: 'top|left'
color: 'blue'
textColor: '#FFFFFF'
}
Mixxx.WaveformMark {
control: "outro_start_position"
// visibilityControl: '[Skin],show_intro_outro_cues'
text: '&#9699;'
text: ''
align: 'top|right'
color: 'blue'
textColor: '#FFFFFF'
Expand Down
51 changes: 13 additions & 38 deletions src/qml/qmlwaveformdisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,13 @@ QmlWaveformDisplay::QmlWaveformDisplay(QQuickItem* parent)
: QQuickItem(parent),
WaveformWidgetRenderer("[Channel1]"),
m_pPlayer(nullptr),
m_pWaveformRenderMark(nullptr),
m_pWaveformRenderMarkRange(nullptr),
m_pZoom(std::make_unique<ControlProxy>(getGroup(),
"waveform_zoom",
this,
ControlFlag::NoAssertIfMissing)) {
setFlag(QQuickItem::ItemHasContents, true);

connect(this, &QmlWaveformDisplay::windowChanged, this, &QmlWaveformDisplay::slotWindowChanged);
connect(this, &QmlWaveformDisplay::windowChanged, this, &QmlWaveformDisplay::slotWindowChanged, Qt::DirectConnection);
m_pZoom->connectValueChanged(this, [this](double zoom) {
setZoom(zoom);
});
Expand All @@ -71,6 +69,9 @@ void QmlWaveformDisplay::componentComplete() {

void QmlWaveformDisplay::slotWindowChanged(QQuickWindow* window) {
qDebug() << "WINDOWS CHANGED!!";

m_rendererStack.clear();

m_dirtyFlag |= DirtyFlag::Window;
connect(window, &QQuickWindow::frameSwapped, this, &QmlWaveformDisplay::slotFrameSwapped);
m_timer.restart();
Expand Down Expand Up @@ -148,56 +149,37 @@ QSGNode* QmlWaveformDisplay::updatePaintNode(QSGNode* node, UpdatePaintNodeData*

if (!bgNode || m_dirtyFlag.testFlag(DirtyFlag::Window)) {
if (bgNode) {
m_pWaveformRenderMark = nullptr;
m_pWaveformRenderMarkRange = nullptr;
delete bgNode;
m_dirtyFlag.setFlag(DirtyFlag::Window, false);
}
bgNode = new QSGSimpleRectNode();
bgNode->setRect(boundingRect());

rendergraph::Context context(window());
auto pTopNode = std::make_unique<rendergraph::Node>();
if (getContext()){
delete getContext();
}
setContext(new rendergraph::Context(window()));
m_pTopNode = new rendergraph::Node;
// auto pOpacityNode = std::make_unique<rendergraph::OpacityNode>();

m_rendererStack.clear();
for (auto* pQmlRenderer : m_waveformRenderers) {
auto renderer = pQmlRenderer->create(this, &context);

auto renderer = pQmlRenderer->create(this);
addRenderer(renderer.renderer);
// appendChildTo(pOpacityNode, renderer.node);
pTopNode->appendChildNode(std::unique_ptr<rendergraph::TreeNode>(renderer.node));

auto* pWaveformRenderMark = dynamic_cast<allshader::WaveformRenderMark*>(renderer.node);
if (pWaveformRenderMark != nullptr) {
DEBUG_ASSERT(m_pWaveformRenderMark == nullptr);
m_pWaveformRenderMark = pWaveformRenderMark;
continue;
}

auto* pWaveformRenderMarkRange =
dynamic_cast<allshader::WaveformRenderMarkRange*>(
renderer.node);
if (pWaveformRenderMarkRange != nullptr) {
DEBUG_ASSERT(m_pWaveformRenderMarkRange == nullptr);
m_pWaveformRenderMarkRange = pWaveformRenderMarkRange;
}
m_pTopNode->appendChildNode(std::unique_ptr<rendergraph::TreeNode>(renderer.node));
}

// pTopNode->appendChildNode(std::move(pOpacityNode));
bgNode->appendChildNode(pTopNode->backendNode());
bgNode->appendChildNode(m_pTopNode->backendNode());

bgNode->setColor(QColor(0, 0, 0, 255));
init();
}

if (m_dirtyFlag.testFlag(DirtyFlag::Geometry)) {
m_dirtyFlag.setFlag(DirtyFlag::Geometry, false);
qDebug() << "RECT" << boundingRect();
qDebug() << "RECT" << childrenRect();
qDebug() << "RECT" << clipRect();
// qDebug() << "RECT" << mapToGlobal(QPointF(0, 0));
// qDebug() << "RECT" << window()->mapToGlobal(QPointF(0, 0)));
qDebug() << "RECT" << window()->size();
bgNode->setRect(boundingRect());

auto rect = QRectF(boundingRect().x() +

Check warning on line 185 in src/qml/qmlwaveformdisplay.cpp

View workflow job for this annotation

GitHub Actions / clazy

unused QRectF [-Wclazy-unused-non-trivial-variable]
Expand All @@ -206,13 +188,6 @@ QSGNode* QmlWaveformDisplay::updatePaintNode(QSGNode* node, UpdatePaintNodeData*
2.0,
boundingRect().height());
}

// if (m_pWaveformRenderMark != nullptr) {
// m_pWaveformRenderMark->update();
// }
// if (m_pWaveformRenderMarkRange != nullptr) {
// m_pWaveformRenderMarkRange->update();
// }
onPreRender(this);
bgNode->markDirty(QSGNode::DirtyForceUpdate);

Expand Down
4 changes: 2 additions & 2 deletions src/qml/qmlwaveformdisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ class QmlWaveformDisplay : public QQuickItem, ISyncTimeProvider, public Waveform
DirtyFlags m_dirtyFlag{DirtyFlag::None};
QList<QmlWaveformRendererFactory*> m_waveformRenderers;

allshader::WaveformRenderMark* m_pWaveformRenderMark;
allshader::WaveformRenderMarkRange* m_pWaveformRenderMarkRange;
// Owned by the QML scene?
rendergraph::Node* m_pTopNode;

std::unique_ptr<ControlProxy> m_pZoom;
};
Expand Down
32 changes: 9 additions & 23 deletions src/qml/qmlwaveformrenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,24 +40,19 @@ QmlWaveformRendererMark::QmlWaveformRendererMark()
}

QmlWaveformRendererFactory::Renderer QmlWaveformRendererEndOfTrack::create(
WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pContext) const {
Q_UNUSED(pContext);
WaveformWidgetRenderer* waveformWidget) const {
auto* renderer = new WaveformRendererEndOfTrack(waveformWidget, m_color);
return QmlWaveformRendererFactory::Renderer{renderer, renderer};
}

QmlWaveformRendererFactory::Renderer QmlWaveformRendererPreroll::create(
WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pContext) const {
auto* renderer = new WaveformRendererPreroll(waveformWidget, pContext, m_color);
WaveformWidgetRenderer* waveformWidget) const {
auto* renderer = new WaveformRendererPreroll(waveformWidget, WaveformRendererAbstract::Play, m_color);
return QmlWaveformRendererFactory::Renderer{renderer, renderer};
}

QmlWaveformRendererFactory::Renderer QmlWaveformRendererRGB::create(
WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pContext) const {
Q_UNUSED(pContext);
WaveformWidgetRenderer* waveformWidget) const {
auto* renderer = new WaveformRendererRGB(waveformWidget,
m_axesColor,
m_lowColor,
Expand All @@ -68,18 +63,14 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererRGB::create(
}

QmlWaveformRendererFactory::Renderer QmlWaveformRendererBeat::create(
WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pContext) const {
Q_UNUSED(pContext);
WaveformWidgetRenderer* waveformWidget) const {
auto* renderer = new WaveformRenderBeat(
waveformWidget, ::WaveformRendererAbstract::Play, m_color);
return QmlWaveformRendererFactory::Renderer{renderer, renderer};
}

QmlWaveformRendererFactory::Renderer QmlWaveformRendererMarkRange::create(
WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pContext) const {
Q_UNUSED(pContext);
WaveformWidgetRenderer* waveformWidget) const {
auto* renderer = new WaveformRenderMarkRange(
waveformWidget);

Expand All @@ -101,28 +92,23 @@ QmlWaveformRendererFactory::Renderer QmlWaveformRendererMarkRange::create(
}

// QmlWaveformRendererFactory::Renderer QmlWaveformRendererSlipMode::create(
// WaveformWidgetRenderer* waveformWidget,
// rendergraph::Context* pContext) const {
// Q_UNUSED(pContext);
// WaveformWidgetRenderer* waveformWidget) const {
// auto* renderer = new WaveformRendererSlipMode(
// waveformWidget);
// return QmlWaveformRendererFactory::Renderer{renderer, renderer};
// }

// #ifdef __STEM__
// QmlWaveformRendererFactory::Renderer QmlWaveformRendererStem::create(
// WaveformWidgetRenderer* waveformWidget,
// rendergraph::Context* pContext) const {
// Q_UNUSED(pContext);
// WaveformWidgetRenderer* waveformWidget) const {
// auto* renderer = new WaveformRendererStem(
// waveformWidget, ::WaveformRendererAbstract::Play);
// return QmlWaveformRendererFactory::Renderer{renderer, renderer};
// }
// #endif

QmlWaveformRendererFactory::Renderer QmlWaveformRendererMark::create(
WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pContext) const {
WaveformWidgetRenderer* waveformWidget) const {
auto* renderer = new WaveformRenderMark(waveformWidget,
m_playMarkerColor,
m_playMarkerBackground,
Expand Down
30 changes: 10 additions & 20 deletions src/qml/qmlwaveformrenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ class QmlWaveformRendererFactory : public QObject {
rendergraph::TreeNode* node{nullptr};
};

virtual Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const = 0;
virtual Renderer create(WaveformWidgetRenderer* waveformWidget) const = 0;
};

class QmlWaveformRendererEndOfTrack
Expand All @@ -49,8 +48,7 @@ class QmlWaveformRendererEndOfTrack
emit colorChanged(m_color);
}

Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const override;
Renderer create(WaveformWidgetRenderer* waveformWidget) const override;

signals:
void colorChanged(const QColor&);
Expand All @@ -76,8 +74,7 @@ class QmlWaveformRendererPreroll
emit colorChanged(m_color);
}

Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const override;
Renderer create(WaveformWidgetRenderer* waveformWidget) const override;
signals:
void colorChanged(const QColor&);

Expand Down Expand Up @@ -129,8 +126,7 @@ class QmlWaveformRendererRGB
emit highColorChanged(m_lowColor);
}

Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const override;
Renderer create(WaveformWidgetRenderer* waveformWidget) const override;
signals:
void axesColorChanged(const QColor&);
void lowColorChanged(const QColor&);
Expand Down Expand Up @@ -161,8 +157,7 @@ class QmlWaveformRendererBeat
emit colorChanged(m_color);
}

Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const override;
Renderer create(WaveformWidgetRenderer* waveformWidget) const override;
signals:
void colorChanged(const QColor&);

Expand Down Expand Up @@ -364,8 +359,7 @@ class QmlWaveformRendererMarkRange
return {this, &m_ranges};
}

Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const override;
Renderer create(WaveformWidgetRenderer* waveformWidget) const override;

private:
QList<QmlWaveformMarkRange*> m_ranges;
Expand All @@ -379,8 +373,7 @@ class QmlWaveformRendererMarkRange
// public:
// QmlWaveformRendererSlipMode();

// Renderer create(WaveformWidgetRenderer* waveformWidget,
// rendergraph::Context* pcontext) const override;
// Renderer create(WaveformWidgetRenderer* waveformWidget) const override;
// };

// class QmlWaveformRendererStem
Expand All @@ -392,11 +385,9 @@ class QmlWaveformRendererMarkRange
// QmlWaveformRendererStem();

// #ifdef __STEM__
// Renderer create(WaveformWidgetRenderer* waveformWidget,
// rendergraph::Context* pcontext) const override;
// Renderer create(WaveformWidgetRenderer* waveformWidget) const override;
// #else
// Renderer create(WaveformWidgetRenderer* waveformWidget,
// rendergraph::Context* pcontext) const override {
// Renderer create(WaveformWidgetRenderer* waveformWidget) const override {
// return Renderer{};
// }

Expand Down Expand Up @@ -437,8 +428,7 @@ class QmlWaveformRendererMark
m_playMarkerBackground = playMarkerBackground;
}

Renderer create(WaveformWidgetRenderer* waveformWidget,
rendergraph::Context* pcontext) const override;
Renderer create(WaveformWidgetRenderer* waveformWidget) const override;

QQmlListProperty<QmlWaveformMark> marks() {
return {this, &m_marks};
Expand Down
Loading

0 comments on commit a315259

Please sign in to comment.