Merge #837: Preferences: Story Editor size stays finite and in range

This commit is contained in:
aiongg
2026-10-13 22:31:39 +00:00
+20 -1
View File
@@ -2692,7 +2692,10 @@ pub fn confirm(app: &mut DesignApp) -> Result<Value, String> {
let words: Vec<String> = d.s("userWords").lines().map(str::to_string).collect();
app.run("spelling.setWords", json!({"words": words}))?;
}
app.ui.story_editor_size = d.n("storyEditorSize").unwrap_or(14.0) as f32;
// The slider's range. A size that isn't finite is saved as `null`, and ui.json then fails to load.
if let Some(size) = d.n("storyEditorSize").filter(|v| v.is_finite()) {
app.ui.story_editor_size = size.clamp(8.0, 36.0) as f32;
}
// Highlight options change the screen view only.
app.canvas.shown = None;
let view = match d.s("displayQuality").as_str() {
@@ -6294,6 +6297,22 @@ mod tests {
assert_eq!([t.cell(0, 0).unwrap().strokes[2].weight, t.cell(1, 1).unwrap().strokes[0].weight], [1.0; 2]);
}
#[test]
fn preferences_ok_saves_a_story_editor_size_that_loads_back() {
// `ui.dialog.set` takes any value; a size that isn't finite is saved as `null`.
let sizes = [(json!("nan"), 20.0), (json!("inf"), 20.0), (json!(null), 20.0), (json!(1e39), 36.0), (json!(3), 8.0), (json!(11), 11.0)];
for (size, want) in sizes {
let mut app = DesignApp::new(designcraft_engine::Session::new(), crate::Services::default());
app.run("file.new", json!({})).unwrap();
app.ui.story_editor_size = 20.0;
app.run("app.preferences", json!({})).unwrap();
app.ui.dialog.as_mut().unwrap().fields.insert("storyEditorSize".into(), size);
confirm(&mut app).unwrap();
let saved = serde_json::to_vec(&app.ui).unwrap();
assert_eq!(crate::UiState::from_preferences_json(&saved).unwrap().story_editor_size, want);
}
}
#[test]
fn preferences_ok_sets_only_the_ruler_units_it_is_given() {
// `ui.dialog.open` takes any fields, so the vertical units can be missing.