From 6480f84e8ee9839fb486916d708712daf34a0aff Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Thu, 12 Nov 2026 00:18:39 -0700 Subject: rounded corners fun that was some nontrivial type magick Force-Push: yes Change-Id: I9b2848cc76f3dfab5b87d7e6b2f28bf2a136fca5 --- src/x/geometry.rs | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/x/geometry.rs (limited to 'src/x/geometry.rs') diff --git a/src/x/geometry.rs b/src/x/geometry.rs new file mode 100644 index 0000000..fcbb15a --- /dev/null +++ b/src/x/geometry.rs @@ -0,0 +1,66 @@ +use crate::geometry::*; + +use std::fmt::Debug; + + +pub const X_CLOCKWISE_RIGHT_ANGLE: i16 = -90 * 64; + + +pub trait SideExt { + fn to_x_angle(&self) -> i16; +} + +impl SideExt for Side { + fn to_x_angle(&self) -> i16 { + match self { + Side::Top => 90 * 64, + Side::Right => 0, + Side::Bottom => 270 * 64, + Side::Left => 180 * 64, + } + } +} + + +pub trait RectangleExt { + fn to_x_rectangle(&self) -> xcb::x::Rectangle + where T: TryInto + TryInto + Debug, + >::Error: Debug, + >::Error: Debug; + fn to_x_arc(&self, angle1: i16, angle2: i16) -> xcb::x::Arc + where T: TryInto + TryInto + Debug, + >::Error: Debug, + >::Error: Debug; +} + + +impl RectangleExt for Rectangle { + fn to_x_rectangle(&self) -> xcb::x::Rectangle + where T: TryInto + TryInto + Debug, + >::Error: Debug, + >::Error: Debug + { + xcb::x::Rectangle { + x: self.left.try_into().unwrap(), + y: self.top.try_into().unwrap(), + width: self.width.try_into().unwrap(), + height: self.height.try_into().unwrap() + } + } + + fn to_x_arc(&self, angle1: i16, angle2: i16) -> xcb::x::Arc + where T: TryInto + TryInto + Debug, + >::Error: Debug, + >::Error: Debug + { + xcb::x::Arc { + x: self.left.try_into().unwrap(), + y: self.top.try_into().unwrap(), + width: self.width.try_into().unwrap(), + height: self.height.try_into().unwrap(), + angle1: angle1.try_into().unwrap(), + angle2: angle2.try_into().unwrap(), + } + } +} + -- cgit 1.4.1