From b83a6701de7d44d5ed9721b50b631e44b57350bc Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 22 Mar 2021 03:17:52 +0000 Subject: [PATCH] Rectangle: Break out region() from hand.rs Signed-off-by: Ian Jackson --- src/hand.rs | 13 +------------ src/shapelib.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/hand.rs b/src/hand.rs index 80a28b64..5edf7b56 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -170,20 +170,9 @@ impl PieceTrait for Hand { dasharray, desc: new_desc, }); - let centre = gpc.pos; let (region, views) = (||{ dbgc!("claiming region"); - let offset = (self.shape.outline.xy * 0.5)?; - let offset = offset.try_map( - |c| c.floor().to_i32().ok_or(CoordinateOverflow) - )?; - let region = AreaC( - [-1,1].iter().map(|&signum| Ok::<_,IE>({ - (centre + (offset * signum)?)? - })) - .collect::,_>>()? - .into_inner().unwrap() - ); + let region = self.shape.outline.region(gpc.pos)?; let views = OwnerOccultationView { owner: player, owner_view: OccK::Visible, diff --git a/src/shapelib.rs b/src/shapelib.rs index d3e0222c..d29137cf 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -780,6 +780,24 @@ impl CircleDefn { #[derive(Clone,Copy,Debug,Serialize,Deserialize)] pub struct Rectangle { pub xy: PosC } +impl Rectangle { + #[throws(CoordinateOverflow)] + pub fn region(&self, centre: Pos) -> AreaC { + let offset = (self.xy * 0.5)?; + let offset = offset.try_map( + |c| c.floor().to_i32().ok_or(CoordinateOverflow) + )?; + let region = AreaC( + [-1,1].iter().map(|&signum| Ok::<_,CoordinateOverflow>({ + (centre + (offset * signum)?)? + })) + .collect::,_>>()? + .into_inner().unwrap() + ); + region + } +} + #[dyn_upcast] impl OutlineTrait for Rectangle { #[throws(IE)] -- 2.30.2