mirror of
https://github.com/storytold/designcraft.git
synced 2026-11-14 14:22:39 +00:00
Place: contact sheet numbers mean the document unit however they arrive
A number sent over ui.dialog.open or ui.dialog.set showed as 2 in the field but was sent as 2 points, while a typed 2 meant the ruler unit.
This commit is contained in:
1 parent
dd311b8803
commit
fea50adfaf
2 files changed
+39
-2
No files matched your search
@@ -1124,6 +1124,40 @@ pub(crate) mod browser_import_tests {
|
||||
assert_eq!(d.s("gutter"), "6pt");
|
||||
}
|
||||
|
||||
/// A bare number in a field means the document's ruler unit, whether it was typed or came as
|
||||
/// a number over `ui.dialog.open` or `ui.dialog.set`.
|
||||
#[test]
|
||||
fn contact_sheet_numbers_are_in_the_document_unit_however_they_came() {
|
||||
let frames = |margin: Value, gutter: Value, set: bool| {
|
||||
let mut app = app();
|
||||
app.run("document.preferences", json!({"horizontalUnits": "inches"})).unwrap();
|
||||
let request = app.import_request("place");
|
||||
for name in ["one.png", "two.png"] {
|
||||
app.services.inbox.as_ref().unwrap().lock().unwrap().push(ImportedFile {
|
||||
request: request.clone(),
|
||||
name: name.into(),
|
||||
bytes: png(200),
|
||||
});
|
||||
}
|
||||
app.drain_inbox();
|
||||
let fields = json!({"columns": 2, "rows": 1, "gutter": gutter, "margin": margin});
|
||||
app.ui.dialog = Some(dialogs::contact_sheet_dialog(&app, if set { json!({"columns": 2, "rows": 1}) } else { fields.clone() }));
|
||||
if set {
|
||||
let d = app.ui.dialog.as_mut().unwrap();
|
||||
d.set_field("gutter", fields["gutter"].clone());
|
||||
d.set_field("margin", fields["margin"].clone());
|
||||
}
|
||||
dialogs::confirm(&mut app).unwrap();
|
||||
let doc = &app.session.doc().unwrap().doc;
|
||||
doc.spreads.last().unwrap().items.iter().map(|item| item.bounds()).collect::<Vec<_>>()
|
||||
};
|
||||
let typed = frames(json!("1"), json!("0.5"), false);
|
||||
assert_eq!(typed.len(), 2);
|
||||
assert_eq!(frames(json!(1), json!(0.5), false), typed, "numbers over ui.dialog.open");
|
||||
assert_eq!(frames(json!(1), json!(0.5), true), typed, "numbers over ui.dialog.set");
|
||||
assert_eq!(frames(json!("72pt"), json!("36pt"), false), typed, "an explicit unit still says what it means");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn contact_sheet_validation_preserves_fields_and_pending_images() {
|
||||
let mut app = app();
|
||||
|
||||
@@ -4721,11 +4721,14 @@ fn confirm_part3(app: &mut DesignApp, d: Dialog) -> Result<Value, String> {
|
||||
}
|
||||
"contactSheet" => {
|
||||
let result = (|| {
|
||||
// A bare number means the ruler unit, as typed or as a JSON number (`Dialog::m`
|
||||
// takes the latter as points).
|
||||
let measure = |k: &str| parse_measure(&d.s(k), d.unit).ok();
|
||||
let params = json!({
|
||||
"columns": d.s("columns").trim().parse::<u64>().map_err(|_| "Columns must be a whole number")?,
|
||||
"rows": d.s("rows").trim().parse::<u64>().map_err(|_| "Rows must be a whole number")?,
|
||||
"gutter": d.m("gutter").ok_or("Enter a valid gutter")?,
|
||||
"margin": d.m("margin").ok_or("Enter a valid margin")?,
|
||||
"gutter": measure("gutter").ok_or("Enter a valid gutter")?,
|
||||
"margin": measure("margin").ok_or("Enter a valid margin")?,
|
||||
});
|
||||
app.run("place.contactSheet", params)
|
||||
})();
|
||||
|
||||
Reference in new issue
Block a user