Skip to content

Commit d757317

Browse files
authored
freeplay(recorder): Remove PreviewUiState (#401)
1 parent 02225ed commit d757317

2 files changed

Lines changed: 25 additions & 43 deletions

File tree

neothesia/src/scene/freeplay/mod.rs

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{sync::Arc, time::Duration};
1+
use std::time::Duration;
22

33
use midi_file::midly::MidiMessage;
44
use neothesia_core::render::{
@@ -15,7 +15,7 @@ use crate::{
1515
icons,
1616
scene::{
1717
MouseToMidiEventState, NuonRenderer, Scene,
18-
freeplay::recorder::{FreeplayRecorder, PreviewState, PreviewUiState},
18+
freeplay::recorder::{FreeplayRecorder, PreviewState},
1919
playing_scene::{Keyboard, midi_player::MidiPlayer},
2020
},
2121
song::Song,
@@ -269,26 +269,6 @@ impl FreeplayScene {
269269
self.keyboard.reset_notes();
270270
}
271271

272-
fn preview_ui_state(&self) -> PreviewUiState {
273-
if let Some(player) = self.preview_state.as_ref().map(|state| &state.player) {
274-
return PreviewUiState {
275-
available: true,
276-
is_paused: player.is_paused(),
277-
progress: player.percentage().clamp(0.0, 1.0),
278-
length: player.length().as_secs_f32(),
279-
measures: player.song().file.measures.clone(),
280-
};
281-
}
282-
283-
PreviewUiState {
284-
available: false,
285-
is_paused: true,
286-
progress: 0.0,
287-
length: self.recorder.duration().as_secs_f32(),
288-
measures: Arc::from([]),
289-
}
290-
}
291-
292272
fn preview_status_label(&self) -> String {
293273
if self.recorder.is_recording() {
294274
return format!("Recording {:.1}s", self.recorder.duration().as_secs_f32(),);
@@ -387,7 +367,14 @@ impl FreeplayScene {
387367
let top_bar_height = 30.0;
388368

389369
let width = ctx.window_state.logical_size.width;
390-
let preview = self.preview_ui_state();
370+
371+
let available = self.preview_state.is_some();
372+
373+
let is_paused = self
374+
.preview_state
375+
.as_ref()
376+
.map(|s| s.player.is_paused())
377+
.unwrap_or(true);
391378

392379
let status_label = self.preview_status_label();
393380

@@ -432,18 +419,18 @@ impl FreeplayScene {
432419
if nuon::button()
433420
.size(30.0, 30.0)
434421
.border_radius([5.0; 4])
435-
.icon(if preview.is_paused {
422+
.icon(if is_paused {
436423
icons::play_icon()
437424
} else {
438425
icons::pause_icon()
439426
})
440-
.font_color(if preview.available {
427+
.font_color(if available {
441428
[255, 255, 255, 255]
442429
} else {
443430
[255, 255, 255, 100]
444431
})
445432
.build(ui)
446-
&& preview.available
433+
&& available
447434
{
448435
msg = Msg::TogglePlay;
449436
}
@@ -454,13 +441,13 @@ impl FreeplayScene {
454441
.size(30.0, 30.0)
455442
.border_radius([5.0; 4])
456443
.icon(icons::save_icon())
457-
.font_color(if preview.available {
444+
.font_color(if available {
458445
[255, 255, 255, 255]
459446
} else {
460447
[255, 255, 255, 100]
461448
})
462449
.build(ui)
463-
&& preview.available
450+
&& available
464451
{
465452
msg = Msg::Save;
466453
}
@@ -496,7 +483,11 @@ impl FreeplayScene {
496483
}
497484
});
498485

499-
if preview.available {
486+
if let Some(state) = self.preview_state.as_ref() {
487+
let length = state.player.length();
488+
let progress = state.player.percentage();
489+
let measures = &state.player.song().file.measures;
490+
500491
nuon::translate().y(30.0).build(ui, |ui| {
501492
let event = nuon::click_area("FreeplayPreviewProgress")
502493
.size(width, 45.0)
@@ -512,17 +503,17 @@ impl FreeplayScene {
512503
.color([37, 35, 42])
513504
.build(ui);
514505
nuon::quad()
515-
.size(width * preview.progress, 45.0)
506+
.size(width * progress, 45.0)
516507
.color([56, 145, 255])
517508
.build(ui);
518509

519-
if preview.length > 0.0 {
520-
for measure in preview.measures.iter() {
521-
let x = (measure.as_secs_f32() / preview.length) * width;
510+
if !length.is_zero() {
511+
for measure in measures.iter() {
512+
let x = (measure.as_secs_f32() / length.as_secs_f32()) * width;
522513
nuon::quad()
523514
.x(x)
524515
.size(1.0, 45.0)
525-
.color(if x < width * preview.progress {
516+
.color(if x < width * progress {
526517
[255, 255, 255, 127]
527518
} else {
528519
[102, 102, 102, 255]

neothesia/src/scene/freeplay/recorder.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::{
22
collections::HashSet,
33
path::Path,
4-
sync::Arc,
54
time::{Duration, Instant},
65
};
76

@@ -43,14 +42,6 @@ pub struct FreeplayRecorder {
4342
state: RecorderState,
4443
}
4544

46-
pub struct PreviewUiState {
47-
pub available: bool,
48-
pub is_paused: bool,
49-
pub progress: f32,
50-
pub length: f32,
51-
pub measures: Arc<[Duration]>,
52-
}
53-
5445
pub struct PreviewState {
5546
pub player: MidiPlayer,
5647
pub waterfall: WaterfallRenderer,

0 commit comments

Comments
 (0)