window size stuff
This commit is contained in:
parent
9c758d948f
commit
4eb79f2589
1 changed files with 28 additions and 9 deletions
37
src/main.rs
37
src/main.rs
|
|
@ -15,7 +15,9 @@ fn main() -> eframe::Result {
|
||||||
};
|
};
|
||||||
let options = eframe::NativeOptions {
|
let options = eframe::NativeOptions {
|
||||||
viewport: egui::ViewportBuilder::default()
|
viewport: egui::ViewportBuilder::default()
|
||||||
.with_inner_size([500.0, 325.0]),
|
.with_inner_size([500.0, 350.0])
|
||||||
|
.with_min_inner_size([300.0, 350.0])
|
||||||
|
.with_max_inner_size([5000.0, 350.0]),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
let (client, _status) = jack::Client::new("fslcmix", jack::ClientOptions::default()).unwrap();
|
let (client, _status) = jack::Client::new("fslcmix", jack::ClientOptions::default()).unwrap();
|
||||||
|
|
@ -165,12 +167,14 @@ impl FslcMix {
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
self.master.ui(ui);
|
self.master.ui(ui);
|
||||||
ui.separator();
|
ui.separator();
|
||||||
for channel in &mut self.channels {
|
egui::ScrollArea::horizontal().show(ui, |ui| {
|
||||||
channel.ui(ui);
|
for channel in &mut self.channels {
|
||||||
}
|
channel.ui(ui);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
self.ui_size = ui.min_size();
|
self.ui_size = ctx.used_size();
|
||||||
let window_size = self.ui_size + egui::vec2(20.0, 40.0);
|
// let window_size = self.ui_size + egui::vec2(20.0, 40.0);
|
||||||
});
|
});
|
||||||
ctx.request_repaint();
|
ctx.request_repaint();
|
||||||
// frame.set_window_size(window_size);
|
// frame.set_window_size(window_size);
|
||||||
|
|
@ -182,6 +186,7 @@ struct MixChannel {
|
||||||
gain: f32,
|
gain: f32,
|
||||||
last: f32,
|
last: f32,
|
||||||
max: f32,
|
max: f32,
|
||||||
|
last_rms: f32,
|
||||||
channel_name: String,
|
channel_name: String,
|
||||||
limit: bool,
|
limit: bool,
|
||||||
mute: bool,
|
mute: bool,
|
||||||
|
|
@ -197,6 +202,7 @@ impl MixChannel {
|
||||||
}
|
}
|
||||||
// Sanity check
|
// Sanity check
|
||||||
assert!(input.len() == output.len());
|
assert!(input.len() == output.len());
|
||||||
|
self.rms(input);
|
||||||
for i in 0..input.len() {
|
for i in 0..input.len() {
|
||||||
let sample = input[i] * self.gain;
|
let sample = input[i] * self.gain;
|
||||||
let out_sample = if self.limit && sample >= 1.0 {
|
let out_sample = if self.limit && sample >= 1.0 {
|
||||||
|
|
@ -216,8 +222,16 @@ impl MixChannel {
|
||||||
|
|
||||||
fn ui(&mut self, ui : &mut egui::Ui) {
|
fn ui(&mut self, ui : &mut egui::Ui) {
|
||||||
ui.vertical(|ui| {
|
ui.vertical(|ui| {
|
||||||
ui.horizontal(|ui| {
|
ui.vertical(|ui| {
|
||||||
ui.label(format!("Peak: {:.2} dB", self.max.log10()));
|
let wrap_mode = TextWrapMode::Extend;
|
||||||
|
let pb = ui.add(egui::Button::new(format!("Peak: {:.2} dB", self.max.log10())).wrap_mode(wrap_mode));
|
||||||
|
if pb.clicked() {
|
||||||
|
self.max = 0.0;
|
||||||
|
}
|
||||||
|
let rb = ui.add(egui::Button::new(format!("RMS: {:.2}", self.last_rms)).wrap_mode(wrap_mode));
|
||||||
|
if rb.clicked() {
|
||||||
|
self.last_rms = 0.0;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.spacing_mut().slider_width = 175.0;
|
ui.spacing_mut().slider_width = 175.0;
|
||||||
|
|
@ -247,8 +261,8 @@ impl MixChannel {
|
||||||
let filled_height = (rect.height() * self.last / 1.2).min(rect.height()); // Show a bit over max amplitude
|
let filled_height = (rect.height() * self.last / 1.2).min(rect.height()); // Show a bit over max amplitude
|
||||||
let filled_rect = Rect::from_min_max(rect.min, rect.min + vec2(rect.width(), filled_height));
|
let filled_rect = Rect::from_min_max(rect.min, rect.min + vec2(rect.width(), filled_height));
|
||||||
let remaining_rect = Rect::from_min_max(filled_rect.max, rect.max);
|
let remaining_rect = Rect::from_min_max(filled_rect.max, rect.max);
|
||||||
painter.rect_filled(filled_rect, 0.0, Color32::from_rgb(0, 200, 0));
|
|
||||||
painter.rect_filled(remaining_rect, 0.0, Color32::from_rgb(200, 0, 0));
|
painter.rect_filled(remaining_rect, 0.0, Color32::from_rgb(200, 0, 0));
|
||||||
|
painter.rect_filled(filled_rect, 0.0, Color32::from_rgb(0, 200, 0));
|
||||||
painter.rect_stroke(rect, 0.0, (1.0, Color32::DARK_GRAY));
|
painter.rect_stroke(rect, 0.0, (1.0, Color32::DARK_GRAY));
|
||||||
response.on_hover_cursor(egui::CursorIcon::PointingHand)
|
response.on_hover_cursor(egui::CursorIcon::PointingHand)
|
||||||
.on_hover_text(format!("{:.1} db", self.last.log10()));
|
.on_hover_text(format!("{:.1} db", self.last.log10()));
|
||||||
|
|
@ -257,6 +271,10 @@ impl MixChannel {
|
||||||
fn declare_jack_port(&self, client : &jack::Client) -> jack::Port<jack::AudioIn> {
|
fn declare_jack_port(&self, client : &jack::Client) -> jack::Port<jack::AudioIn> {
|
||||||
client.register_port(&self.channel_name, jack::AudioIn::default()).unwrap()
|
client.register_port(&self.channel_name, jack::AudioIn::default()).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn rms(&mut self, input : &[f32]) {
|
||||||
|
self.last_rms = input.iter().map(|x| x * x).sum::<f32>().sqrt();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for MixChannel {
|
impl Default for MixChannel {
|
||||||
|
|
@ -265,6 +283,7 @@ impl Default for MixChannel {
|
||||||
gain: 1.0,
|
gain: 1.0,
|
||||||
last: 0.0,
|
last: 0.0,
|
||||||
max: 0.0,
|
max: 0.0,
|
||||||
|
last_rms: 0.0,
|
||||||
channel_name: "Channel".to_owned(),
|
channel_name: "Channel".to_owned(),
|
||||||
limit: false,
|
limit: false,
|
||||||
mute: false,
|
mute: false,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue