diff --git a/src/core/span.rs b/src/core/span.rs index 87accde..5856672 100644 --- a/src/core/span.rs +++ b/src/core/span.rs @@ -33,7 +33,7 @@ impl Widget for Span { } axis.bot_right.set(start); if self.dir.sign == Sign::Neg { - child_region.flip(); + child_region.flip(self.dir.axis); } painter.widget_within(child, child_region); } diff --git a/src/layout/pos.rs b/src/layout/pos.rs index 6dcba40..5507ec1 100644 --- a/src/layout/pos.rs +++ b/src/layout/pos.rs @@ -87,13 +87,14 @@ impl UiVec2 { } } - pub fn flip(&mut self) { - self.rel = 1.0 - self.rel; - self.abs = -self.abs; + /// reflection about an axis + pub fn flip(&mut self, axis: Axis) { + *self.rel.axis_mut(axis) = 1.0 - self.rel.axis(axis); + *self.abs.axis_mut(axis) = -self.abs.axis(axis); } - pub fn flipped(mut self) -> Self { - self.flip(); + pub fn flipped(mut self, axis: Axis) -> Self { + self.flip(axis); self } @@ -227,10 +228,13 @@ impl UiRegion { } } - pub fn flip(&mut self) { - self.top_left.flip(); - self.bot_right.flip(); - std::mem::swap(&mut self.top_left, &mut self.bot_right); + pub fn flip(&mut self, axis: Axis) { + self.top_left.flip(axis); + self.bot_right.flip(axis); + let tl = self.top_left.axis_mut(axis); + let br = self.bot_right.axis_mut(axis); + std::mem::swap(tl.rel, br.rel); + std::mem::swap(tl.abs, br.abs); } pub fn shift(&mut self, offset: impl Into) {