chiark / gitweb /
shapelib: Fix centre for `orig_size` pieces
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Mar 2021 23:46:16 +0000 (23:46 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Mar 2021 23:46:16 +0000 (23:46 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/shapelib.rs

index 13090a463e6a0e0f086a1d18ebaa5ce235230d01..dff252057b63fd9443ee097a376627b48f7b406f 100644 (file)
@@ -197,21 +197,6 @@ impl FaceTransform {
   #[throws(LLE)]
   fn from_group(d: &GroupDetails) -> Self {
     // by this point d.size has already been scaled by scale
-    let centre = d.centre.map(Ok).unwrap_or_else(|| Ok::<_,LLE>({
-      match d.size.as_slice() {
-        [a] => [a,a],
-        [a,b] => [a,b],
-        x => throw!(LLE::WrongNumberOfSizeDimensions {
-          got: x.len(),
-          expected: [1,2],
-        }),
-      }.iter().cloned().map(|size| {
-        size * 0.5 / d.scale
-      })
-        .collect::<ArrayVec<[_;2]>>()
-        .into_inner()
-        .unwrap()
-    }))?;
     let scale = if ! d.orig_size.is_empty() && ! d.size.is_empty() {
       izip!(&d.orig_size, &d.size)
         .map(|(&orig_size, &target_size)| {
@@ -226,6 +211,21 @@ impl FaceTransform {
       let s = d.scale;
       [s,s]
     };
+    let centre = d.centre.map(Ok).unwrap_or_else(|| Ok::<_,LLE>({
+      match d.size.as_slice() {
+        [a] => [a,a],
+        [a,b] => [a,b],
+        x => throw!(LLE::WrongNumberOfSizeDimensions {
+          got: x.len(),
+          expected: [1,2],
+        }),
+      }.iter().cloned().zip(&scale).map(|(size,scale)| {
+        size * 0.5 / scale
+      })
+        .collect::<ArrayVec<[_;2]>>()
+        .into_inner()
+        .unwrap()
+    }))?;
     FaceTransform { centre, scale }
   }