forked from mixxxdj/mixxx
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathwaveformrendermarkbase.cpp
More file actions
94 lines (77 loc) · 2.72 KB
/
Copy pathwaveformrendermarkbase.cpp
File metadata and controls
94 lines (77 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "waveform/renderers/waveformrendermarkbase.h"
#include "moc_waveformrendermarkbase.cpp"
#include "track/track.h"
#include "waveform/renderers/waveformwidgetrenderer.h"
WaveformRenderMarkBase::WaveformRenderMarkBase(
WaveformWidgetRenderer* pWaveformWidgetRenderer,
bool updateImagesImmediately)
: WaveformRendererAbstract(pWaveformWidgetRenderer),
m_updateImagesImmediately(updateImagesImmediately) {
}
void WaveformRenderMarkBase::setup(const QDomNode& node, const SkinContext& context) {
WaveformSignalColors signalColors = *m_waveformRenderer->getWaveformSignalColors();
m_marks.setup(m_waveformRenderer->getGroup(), node, context, signalColors);
m_marks.connectVisibleChanged(this, &WaveformRenderMarkBase::onMarkChanged);
}
void WaveformRenderMarkBase::onSetTrack() {
updateMarksFromCues();
const TrackPointer pTrackInfo = m_waveformRenderer->getTrackInfo();
if (!pTrackInfo) {
return;
}
connect(pTrackInfo.get(),
&Track::cuesUpdated,
this,
&WaveformRenderMarkBase::slotCuesUpdated);
}
void WaveformRenderMarkBase::onResize() {
m_marks.setBreadth(m_waveformRenderer->getBreadth());
if (m_updateImagesImmediately) {
updateMarkImages();
}
}
void WaveformRenderMarkBase::onMarkChanged(double v) {
Q_UNUSED(v);
updateMarks();
}
void WaveformRenderMarkBase::slotCuesUpdated() {
updateMarksFromCues();
}
void WaveformRenderMarkBase::updateMarksFromCues() {
const TrackPointer pTrackInfo = m_waveformRenderer->getTrackInfo();
if (!pTrackInfo) {
return;
}
const int dimBrightThreshold = m_waveformRenderer->getDimBrightThreshold();
const QList<CuePointer> loadedCues = pTrackInfo->getCuePoints();
for (const CuePointer& pCue : loadedCues) {
const int hotCue = pCue->getHotCue();
if (hotCue == Cue::kNoHotCue) {
continue;
}
// Here we assume no two cues can have the same hotcue assigned,
// because WaveformMarkSet stores one mark for each hotcue.
WaveformMarkPointer pMark = m_marks.getHotCueMark(hotCue);
if (pMark.isNull()) {
continue;
}
QString newLabel = pCue->getLabel();
QColor newColor = mixxx::RgbColor::toQColor(pCue->getColor());
pMark->setText(newLabel);
pMark->setBaseColor(newColor, dimBrightThreshold);
}
updateMarks();
}
void WaveformRenderMarkBase::updateMarks() {
m_marks.update();
if (m_updateImagesImmediately) {
updateMarkImages();
}
}
void WaveformRenderMarkBase::updateMarkImages() {
for (const auto& pMark : m_marks) {
if (pMark->needsImageUpdate()) {
updateMarkImage(pMark);
}
}
}