Piano: Factor wave rendering to its own function

This commit is contained in:
William McPherson 2019-12-26 01:53:38 +11:00 committed by Andreas Kling
parent bc65971df6
commit 6cf4468506
Notes: sideshowbarker 2024-07-19 10:40:39 +09:00
2 changed files with 39 additions and 35 deletions

View File

@ -20,41 +20,7 @@ void PianoWidget::paint_event(GPaintEvent& event)
painter.fill_rect(event.rect(), Color::Black);
auto* samples = m_front_buffer;
Color wave_color;
switch (m_wave_type) {
case WaveType::Sine:
wave_color = Color(255, 192, 0);
break;
case WaveType::Saw:
wave_color = Color(240, 100, 128);
break;
case WaveType::Square:
wave_color = Color(128, 160, 255);
break;
case WaveType::Triangle:
wave_color = Color(35, 171, 35);
break;
case WaveType::Noise:
wave_color = Color(197, 214, 225);
break;
}
int prev_x = 0;
int prev_y = m_height / 2;
for (int x = 0; x < m_sample_count; ++x) {
double val = samples[x].left;
val /= 32768;
val *= m_height;
int y = ((m_height / 8) - 8) + val;
if (x == 0)
painter.set_pixel({ x, y }, wave_color);
else
painter.draw_line({ prev_x, prev_y }, { x, y }, wave_color);
prev_x = x;
prev_y = y;
}
render_wave(painter);
render_piano(painter);
render_knobs(painter);
render_roll(painter);
@ -336,6 +302,43 @@ void PianoWidget::mousemove_event(GMouseEvent& event)
update();
}
void PianoWidget::render_wave(GPainter& painter)
{
Color wave_color;
switch (m_wave_type) {
case WaveType::Sine:
wave_color = Color(255, 192, 0);
break;
case WaveType::Saw:
wave_color = Color(240, 100, 128);
break;
case WaveType::Square:
wave_color = Color(128, 160, 255);
break;
case WaveType::Triangle:
wave_color = Color(35, 171, 35);
break;
case WaveType::Noise:
wave_color = Color(197, 214, 225);
break;
}
int prev_x = 0;
int prev_y = m_height / 2;
for (int x = 0; x < m_sample_count; ++x) {
double val = m_front_buffer[x].left;
val /= 32768;
val *= m_height;
int y = ((m_height / 8) - 8) + val;
if (x == 0)
painter.set_pixel({ x, y }, wave_color);
else
painter.draw_line({ prev_x, prev_y }, { x, y }, wave_color);
prev_x = x;
prev_y = y;
}
}
static int white_key_width = 22;
static int white_key_height = 60;
static int black_key_width = 16;

View File

@ -38,6 +38,7 @@ private:
Rect define_roll_note_rect(int column, int row) const;
RollNote* find_roll_note_for_relative_position(int x, int y);
void render_wave(GPainter&);
void render_piano_key(GPainter&, int index, PianoKey, const StringView&);
void render_piano(GPainter&);
void render_knobs(GPainter&);