Skip to content

Commit

Permalink
Use alternative initialization of SampleThumbnailVisualizeParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
khoidauminh committed Jul 5, 2024
1 parent 101199e commit b903d9f
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 73 deletions.
37 changes: 27 additions & 10 deletions include/SampleThumbnail.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,20 @@ struct SampleThumbnailVisualizeParameters
{
// Assign to this field when we need to render using the
// original sample.
const Sample* originalSample = nullptr;
Sample const* originalSample;

const float amplification;
const bool reversed;
float amplification;
bool reversed;

// Not using these 2 fields in the Song editor clips.
// [0..1] Range
const float sampleStart = 0.0;
const float sampleEnd = 1.0;
float sampleStart;
float sampleEnd;

// All the fields below are in pixel unit.

const long x;
const long y;
long x;
long y;

// The length of the rendered sample is proportional to the
// value of this field in the song editor.
Expand All @@ -71,13 +71,30 @@ struct SampleThumbnailVisualizeParameters
// In AFP, SlicerT or other places where the width and height
// is always fixed, the sampleStart and sampleEnd fields carries
// the zoom level information instead.
const long width;
const long height;
long width;
long height;

// Song editor clips shorter than the sample length (measuring
// from the start of the sample) can specify this field so
// rendering cuts off early, reducing computation cost.
const long clipWidthSinceSampleStart = std::numeric_limits<long>::max();
long clipWidthSinceSampleStart;

SampleThumbnailVisualizeParameters()
: originalSample(nullptr)
, amplification(1.0)
, reversed(false)

, sampleStart(0.0)
, sampleEnd(1.0)

, x(0)
, y(0)

, width(0)
, height(0)

, clipWidthSinceSampleStart(std::numeric_limits<long>::max())
{}
};

struct SampleThumbnailBit
Expand Down
31 changes: 16 additions & 15 deletions plugins/AudioFileProcessor/AudioFileProcessorWaveView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -342,22 +342,23 @@ void AudioFileProcessorWaveView::updateGraph()
// Performance hit is neglectable
m_thumbnaillist = SampleThumbnailListManager(*m_sample);

const auto parameters = SampleThumbnailVisualizeParameters{
.originalSample = m_sample,

.amplification = m_sample->amplification(),
.reversed = m_sample->reversed(),

.sampleStart = static_cast<float>(m_from) / m_sample->sampleSize(),
.sampleEnd = static_cast<float>(m_to ) / m_sample->sampleSize(),

.x = 0,
.y = 0,
.width = m_graph.width(),
.height = m_graph.height()
};
auto param = SampleThumbnailVisualizeParameters();

m_thumbnaillist.visualize(parameters, p);
param.originalSample = m_sample,

param.amplification = m_sample->amplification();
param.reversed = m_sample->reversed();

param.sampleStart = static_cast<float>(m_from) / m_sample->sampleSize();
param.sampleEnd = static_cast<float>(m_to ) / m_sample->sampleSize();

param.x = 0;
param.y = 0;

param.width = m_graph.width();
param.height = m_graph.height();

m_thumbnaillist.visualize(param, p);
}

void AudioFileProcessorWaveView::zoom(const bool out)
Expand Down
54 changes: 29 additions & 25 deletions plugins/SlicerT/SlicerTWaveform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,16 +95,18 @@ void SlicerTWaveform::drawSeekerWaveform()
//SampleWaveform::visualize(waveform, brush, rect);

m_thumbnaillist = SampleThumbnailListManager(sample);
const auto parameters = SampleThumbnailVisualizeParameters{
.amplification = sample.amplification(),
.reversed = sample.reversed(),

.x = 0,
.y = 0,
.width = m_seekerWaveform.width(),
.height = m_seekerWaveform.height()
};
m_thumbnaillist.visualize(parameters, brush);
auto param = SampleThumbnailVisualizeParameters();

param.amplification = sample.amplification();
param.reversed = sample.reversed();

param.x = 0;
param.y = 0;

param.width = m_seekerWaveform.width();
param.height = m_seekerWaveform.height();

m_thumbnaillist.visualize(param, brush);

// increase brightness in inner color
QBitmap innerMask = m_seekerWaveform.createMaskFromColor(s_waveformMaskColor, Qt::MaskMode::MaskOutColor);
Expand Down Expand Up @@ -164,21 +166,23 @@ void SlicerTWaveform::drawEditorWaveform()
//SampleWaveform::visualize(waveform, brush, rect);

m_thumbnaillist = SampleThumbnailListManager(sample);
const auto parameters = SampleThumbnailVisualizeParameters{
.originalSample = &sample,

.amplification = sample.amplification(),
.reversed = sample.reversed(),

.sampleStart = static_cast<float>(startFrame) / sample.sampleSize(),
.sampleEnd = static_cast<float>( endFrame) / sample.sampleSize(),

.x = 0,
.y = zoomOffset,
.width = m_editorWidth,
.height = static_cast<long>(m_zoomLevel * m_editorHeight)
};
m_thumbnaillist.visualize(parameters, brush);
auto param = SampleThumbnailVisualizeParameters();

param.originalSample = &sample;

param.amplification = sample.amplification();
param.reversed = sample.reversed();

param.sampleStart = static_cast<float>(startFrame) / sample.sampleSize();
param.sampleEnd = static_cast<float>( endFrame) / sample.sampleSize();

param.x = 0;
param.y = zoomOffset;

param.width = m_editorWidth;
param.height = static_cast<long>(m_zoomLevel * m_editorHeight);

m_thumbnaillist.visualize(param, brush);

// increase brightness in inner color
QBitmap innerMask = m_editorWaveform.createMaskFromColor(s_waveformMaskColor, Qt::MaskMode::MaskOutColor);
Expand Down
26 changes: 14 additions & 12 deletions src/gui/clips/SampleClipView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -286,18 +286,20 @@ void SampleClipView::paintEvent( QPaintEvent * pe )

//qDebug("%f %f", offset_end, length);

const auto parameters = SampleThumbnailVisualizeParameters{
.amplification = sample.amplification(),
.reversed = sample.reversed(),

.x = static_cast<long>(offsetStart),
.y = spacing,
.width = std::max<long>(static_cast<long>(sampleLength), 1),
.height = rect().bottom() - 2 * spacing,
.clipWidthSinceSampleStart = static_cast<long>(clipLength - offsetStart)
};

m_thumbnaillist.visualize(parameters, p);
auto param = SampleThumbnailVisualizeParameters();

param.amplification = sample.amplification();
param.reversed = sample.reversed();

param.x = static_cast<long>(offsetStart);
param.y = spacing;

param.width = std::max<long>(static_cast<long>(sampleLength), 1);
param.height = rect().bottom() - 2 * spacing;

param.clipWidthSinceSampleStart = static_cast<long>(clipLength - offsetStart);

m_thumbnaillist.visualize(param, p);

QString name = PathUtil::cleanName(m_clip->m_sample.sampleFile());
paintTextLabel(name, p);
Expand Down
23 changes: 12 additions & 11 deletions src/gui/editors/AutomationEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1226,17 +1226,18 @@ void AutomationEditor::paintEvent(QPaintEvent * pe )
//const auto rect = QRect(startPos, yOffset, sampleWidth, sampleHeight);
//SampleWaveform::visualize(waveform, p, rect);

const auto parameters = SampleThumbnailVisualizeParameters{
.amplification = sample.amplification(),
.reversed = sample.reversed(),

.x = startPos,
.y = yOffset,
.width = sampleWidth,
.height = sampleHeight
};

m_thumbnaillist.visualize(parameters, p);
auto param = SampleThumbnailVisualizeParameters();

param.amplification = sample.amplification();
param.reversed = sample.reversed();

param.x = startPos;
param.y = yOffset;

param.width = sampleWidth;
param.height = sampleHeight;

m_thumbnaillist.visualize(param, p);
}

// draw ghost notes
Expand Down

0 comments on commit b903d9f

Please sign in to comment.