mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 03:47:35 +00:00
Piano: Factor wave rendering to its own function
This commit is contained in:
parent
bc65971df6
commit
6cf4468506
2 changed files with 39 additions and 35 deletions
|
@ -20,41 +20,7 @@ void PianoWidget::paint_event(GPaintEvent& event)
|
||||||
|
|
||||||
painter.fill_rect(event.rect(), Color::Black);
|
painter.fill_rect(event.rect(), Color::Black);
|
||||||
|
|
||||||
auto* samples = m_front_buffer;
|
render_wave(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 = 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_piano(painter);
|
render_piano(painter);
|
||||||
render_knobs(painter);
|
render_knobs(painter);
|
||||||
render_roll(painter);
|
render_roll(painter);
|
||||||
|
@ -336,6 +302,43 @@ void PianoWidget::mousemove_event(GMouseEvent& event)
|
||||||
update();
|
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_width = 22;
|
||||||
static int white_key_height = 60;
|
static int white_key_height = 60;
|
||||||
static int black_key_width = 16;
|
static int black_key_width = 16;
|
||||||
|
|
|
@ -38,6 +38,7 @@ private:
|
||||||
Rect define_roll_note_rect(int column, int row) const;
|
Rect define_roll_note_rect(int column, int row) const;
|
||||||
RollNote* find_roll_note_for_relative_position(int x, int y);
|
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_key(GPainter&, int index, PianoKey, const StringView&);
|
||||||
void render_piano(GPainter&);
|
void render_piano(GPainter&);
|
||||||
void render_knobs(GPainter&);
|
void render_knobs(GPainter&);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue