diff --git a/Applications/Piano/PianoWidget.cpp b/Applications/Piano/PianoWidget.cpp index d7111332c23..8a0f095e9c0 100644 --- a/Applications/Piano/PianoWidget.cpp +++ b/Applications/Piano/PianoWidget.cpp @@ -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; diff --git a/Applications/Piano/PianoWidget.h b/Applications/Piano/PianoWidget.h index 3605b5c4ce6..a3150e1d5bf 100644 --- a/Applications/Piano/PianoWidget.h +++ b/Applications/Piano/PianoWidget.h @@ -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&);