Compare commits
10 Commits
a62efe44b3
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 74dfdc50cc | |||
| 94d41d5c8a | |||
| b27ef57676 | |||
| c940f31ec7 | |||
| a8f1244b00 | |||
| d107127017 | |||
| d51de80de8 | |||
| 7a92485cf1 | |||
| 6c0332d79e | |||
| 309a152d58 |
+19
-3
@@ -1,4 +1,20 @@
|
||||
# Shell scripts must keep LF endings. core.autocrlf=true on Windows would
|
||||
# otherwise check them out CRLF, which a strict POSIX sh (dash, CI containers)
|
||||
# rejects at the shebang.
|
||||
# Line endings: LF in the repository and in every working tree, on every OS.
|
||||
#
|
||||
# This file is the policy, not each machine's git config. Git for Windows installs
|
||||
# with core.autocrlf=true, which checks text out as CRLF; an attribute here beats
|
||||
# that setting, so a fresh clone gets LF regardless of how its machine is set up.
|
||||
#
|
||||
# It matters beyond tidiness. tools/branding-sites.tsv is read line by line with
|
||||
# `read`, and under CRLF every row's last field gained a trailing CR byte - so the
|
||||
# branding checker reported all 29 sites as missing on Windows while passing on the
|
||||
# Linux CI runner. text=auto leaves genuinely binary files alone.
|
||||
* text=auto eol=lf
|
||||
|
||||
# Shell scripts are pinned explicitly as well: a strict POSIX sh (dash, CI
|
||||
# containers) rejects a CRLF shebang outright rather than misbehaving quietly.
|
||||
*.sh text eol=lf
|
||||
|
||||
# The exception. cmd.exe misparses LF-only batch files around labels and long
|
||||
# lines, so these alone are checked out CRLF. The repository copy is still LF.
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
|
||||
@@ -10,8 +10,24 @@ on:
|
||||
- 'Cargo.lock'
|
||||
- 'bundler.toml'
|
||||
- 'tools/**'
|
||||
# This workflow validates itself: a broken step, a moved script path or a
|
||||
# wrong runner label then fails loudly on the commit that caused it, rather
|
||||
# than surfacing later against an unrelated source change. Note the limit -
|
||||
# it checks the job body, not the trigger block above. Break `on:` and the
|
||||
# symptom is silence, which looks like success.
|
||||
- '.github/workflows/**'
|
||||
# Mirrors the push filter. Without it a PR touching only the README would run a
|
||||
# full build - the branch filter alone constrains where, not what.
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'xtask/**'
|
||||
- 'Cargo.toml'
|
||||
- 'Cargo.lock'
|
||||
- 'bundler.toml'
|
||||
- 'tools/**'
|
||||
- '.github/workflows/**'
|
||||
workflow_dispatch:
|
||||
|
||||
# Target the self-hosted Rust/audio runner registered to the `musiikki` org.
|
||||
|
||||
@@ -17,6 +17,14 @@ members = ["xtask"]
|
||||
# `cdylib` is the plugin binary; `lib` (rlib) lets `cargo test` link the unit tests.
|
||||
crate-type = ["cdylib", "lib"]
|
||||
|
||||
# Future-incompatibility warnings are deferred hard errors: rustc is telling you
|
||||
# this code stops compiling on some later release. Denying the group turns that
|
||||
# into a build failure the day it appears, rather than 16 of them accumulating
|
||||
# unnoticed until a toolchain bump breaks the build on a day you did not choose.
|
||||
# Style and clippy lints are deliberately untouched - they stay warnings.
|
||||
[lints.rust]
|
||||
future_incompatible = { level = "deny", priority = -1 }
|
||||
|
||||
[dependencies]
|
||||
# Pinned to the exact commit of the local ./nih-plug reference clone so the build
|
||||
# is reproducible and matches the examples we read from. Bump the `rev` together
|
||||
|
||||
@@ -131,7 +131,7 @@ fn handle(
|
||||
}
|
||||
|
||||
let col = if resp.dragged() || resp.hovered() { palette::TEXT_HOVER } else { color };
|
||||
p.line_segment([pos2(x, top), pos2(x, bottom)], Stroke::new(2.0, col));
|
||||
p.line_segment([pos2(x, top), pos2(x, bottom)], Stroke::new(2.0_f32, col));
|
||||
p.text(pos2(x, bottom - 1.0), Align2::CENTER_BOTTOM, fmt_hz(hz), FontId::proportional(10.0), palette::TEXT_BRIGHT);
|
||||
}
|
||||
|
||||
|
||||
@@ -52,14 +52,14 @@ pub(super) fn draw(ui: &mut egui::Ui, params: &Bari206Params, selected: usize, m
|
||||
let g6 = palette::GRID_FAINT;
|
||||
let x6 = x_for(-6.0);
|
||||
let y6 = y_for(-6.0);
|
||||
p.line_segment([pos2(x6, top), pos2(x6, bottom)], Stroke::new(1.0, g6));
|
||||
p.line_segment([pos2(left, y6), pos2(right, y6)], Stroke::new(1.0, g6));
|
||||
p.line_segment([pos2(x6, top), pos2(x6, bottom)], Stroke::new(1.0_f32, g6));
|
||||
p.line_segment([pos2(left, y6), pos2(right, y6)], Stroke::new(1.0_f32, g6));
|
||||
|
||||
// Unity reference (out = in), bottom-left to top-right.
|
||||
p.line_segment([pos2(left, bottom), pos2(right, top)], Stroke::new(1.0, palette::GRID));
|
||||
p.line_segment([pos2(left, bottom), pos2(right, top)], Stroke::new(1.0_f32, palette::GRID));
|
||||
// Threshold marker on the input axis — shifted left by pre-gain (the comp sees in + pre).
|
||||
let tx = x_for((threshold - pre).clamp(FLOOR_DB, 0.0));
|
||||
p.line_segment([pos2(tx, top), pos2(tx, bottom)], Stroke::new(1.0, palette::THRESHOLD_LINE));
|
||||
p.line_segment([pos2(tx, top), pos2(tx, bottom)], Stroke::new(1.0_f32, palette::THRESHOLD_LINE));
|
||||
|
||||
// Full wet transfer: drive into the comp, then makeup. (Mix not folded in.)
|
||||
let n = 96;
|
||||
@@ -93,7 +93,7 @@ pub(super) fn draw(ui: &mut egui::Ui, params: &Bari206Params, selected: usize, m
|
||||
));
|
||||
}
|
||||
|
||||
p.add(egui::Shape::line(pts, Stroke::new(1.6, palette::CURVE)));
|
||||
p.add(egui::Shape::line(pts, Stroke::new(1.6_f32, palette::CURVE)));
|
||||
|
||||
// Operating-point dot, on the curve at the current input.
|
||||
let driven = ext_in + pre;
|
||||
|
||||
@@ -243,23 +243,23 @@ pub fn apply_visuals(ctx: &nih_plug_egui::egui::Context) {
|
||||
let w = &mut v.widgets;
|
||||
w.noninteractive.bg_fill = SURFACE_RAISED;
|
||||
w.noninteractive.weak_bg_fill = SURFACE_RAISED;
|
||||
w.noninteractive.bg_stroke = Stroke::new(1.0, GRID_FAINT);
|
||||
w.noninteractive.fg_stroke = Stroke::new(1.0, TEXT);
|
||||
w.noninteractive.bg_stroke = Stroke::new(1.0_f32, GRID_FAINT);
|
||||
w.noninteractive.fg_stroke = Stroke::new(1.0_f32, TEXT);
|
||||
|
||||
w.inactive.bg_fill = TRACK;
|
||||
w.inactive.weak_bg_fill = TRACK;
|
||||
w.inactive.bg_stroke = Stroke::new(1.0, GRID);
|
||||
w.inactive.fg_stroke = Stroke::new(1.0, TEXT_BRIGHT);
|
||||
w.inactive.bg_stroke = Stroke::new(1.0_f32, GRID);
|
||||
w.inactive.fg_stroke = Stroke::new(1.0_f32, TEXT_BRIGHT);
|
||||
|
||||
w.hovered.bg_fill = accent.edge;
|
||||
w.hovered.weak_bg_fill = accent.strip;
|
||||
w.hovered.bg_stroke = Stroke::new(1.0, accent.edge);
|
||||
w.hovered.fg_stroke = Stroke::new(1.0, TEXT_HOVER);
|
||||
w.hovered.bg_stroke = Stroke::new(1.0_f32, accent.edge);
|
||||
w.hovered.fg_stroke = Stroke::new(1.0_f32, TEXT_HOVER);
|
||||
|
||||
w.active.bg_fill = accent.handle;
|
||||
w.active.weak_bg_fill = accent.edge;
|
||||
w.active.bg_stroke = Stroke::new(1.0, accent.handle);
|
||||
w.active.fg_stroke = Stroke::new(1.0, TEXT_HOVER);
|
||||
w.active.bg_stroke = Stroke::new(1.0_f32, accent.handle);
|
||||
w.active.fg_stroke = Stroke::new(1.0_f32, TEXT_HOVER);
|
||||
|
||||
ctx.set_visuals(v);
|
||||
}
|
||||
|
||||
+2
-2
@@ -170,7 +170,7 @@ pub(super) fn draw(ui: &mut egui::Ui, meters: &Meters, state: &mut PlotState) {
|
||||
// Gridlines (dB).
|
||||
for &g in &[0.0f32, -12.0, -24.0, -48.0] {
|
||||
let y = y_for_db(g);
|
||||
p.line_segment([pos2(left, y), pos2(right, y)], Stroke::new(1.0, palette::GRID_FAINT));
|
||||
p.line_segment([pos2(left, y), pos2(right, y)], Stroke::new(1.0_f32, palette::GRID_FAINT));
|
||||
p.text(
|
||||
pos2(left + 2.0, y),
|
||||
Align2::LEFT_BOTTOM,
|
||||
@@ -204,7 +204,7 @@ pub(super) fn draw(ui: &mut egui::Ui, meters: &Meters, state: &mut PlotState) {
|
||||
));
|
||||
}
|
||||
}
|
||||
p.add(egui::Shape::line(pts, Stroke::new(1.5, color)));
|
||||
p.add(egui::Shape::line(pts, Stroke::new(1.5_f32, color)));
|
||||
};
|
||||
draw_series(&state.history.in_db[c], &|db| db, COLOR_IN, true);
|
||||
draw_series(&state.history.out_db[c], &|db| db, COLOR_OUT, true);
|
||||
|
||||
Reference in New Issue
Block a user