Begin porting the PaneAxis element
This commit is contained in:
@@ -57,8 +57,12 @@ where
|
||||
T: 'static,
|
||||
E: 'static + Debug,
|
||||
{
|
||||
#[track_caller]
|
||||
pub fn detach_and_log_err(self, cx: &mut AppContext) {
|
||||
cx.foreground_executor().spawn(self.log_err()).detach();
|
||||
let location = core::panic::Location::caller();
|
||||
cx.foreground_executor()
|
||||
.spawn(self.log_tracked_err(*location))
|
||||
.detach();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,54 @@ use std::{
|
||||
ops::{Add, Div, Mul, MulAssign, Sub},
|
||||
};
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||
pub enum Axis {
|
||||
Vertical,
|
||||
Horizontal,
|
||||
}
|
||||
|
||||
impl Axis {
|
||||
pub fn invert(&self) -> Self {
|
||||
match self {
|
||||
Axis::Vertical => Axis::Horizontal,
|
||||
Axis::Horizontal => Axis::Vertical,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl sqlez::bindable::StaticColumnCount for Axis {}
|
||||
impl sqlez::bindable::Bind for Axis {
|
||||
fn bind(
|
||||
&self,
|
||||
statement: &sqlez::statement::Statement,
|
||||
start_index: i32,
|
||||
) -> anyhow::Result<i32> {
|
||||
match self {
|
||||
Axis::Horizontal => "Horizontal",
|
||||
Axis::Vertical => "Vertical",
|
||||
}
|
||||
.bind(statement, start_index)
|
||||
}
|
||||
}
|
||||
|
||||
impl sqlez::bindable::Column for Axis {
|
||||
fn column(
|
||||
statement: &mut sqlez::statement::Statement,
|
||||
start_index: i32,
|
||||
) -> anyhow::Result<(Self, i32)> {
|
||||
String::column(statement, start_index).and_then(|(axis_text, next_index)| {
|
||||
Ok((
|
||||
match axis_text.as_str() {
|
||||
"Horizontal" => Axis::Horizontal,
|
||||
"Vertical" => Axis::Vertical,
|
||||
_ => anyhow::bail!("Stored serialized item kind is incorrect"),
|
||||
},
|
||||
next_index,
|
||||
))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Describes a location in a 2D cartesian coordinate space.
|
||||
///
|
||||
/// It holds two public fields, `x` and `y`, which represent the coordinates in the space.
|
||||
@@ -94,6 +142,19 @@ impl<T: Clone + Debug + Default> Point<T> {
|
||||
y: f(self.y.clone()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn apply_along(&self, axis: Axis, f: impl FnOnce(T) -> T) -> Point<T> {
|
||||
match axis {
|
||||
Axis::Horizontal => Point {
|
||||
x: f(self.x.clone()),
|
||||
y: self.y.clone(),
|
||||
},
|
||||
Axis::Vertical => Point {
|
||||
x: self.x.clone(),
|
||||
y: f(self.y.clone()),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Point<Pixels> {
|
||||
@@ -373,6 +434,32 @@ impl Size<Pixels> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Size<T>
|
||||
where
|
||||
T: Clone + Default + Debug,
|
||||
{
|
||||
pub fn along(&self, axis: Axis) -> T {
|
||||
match axis {
|
||||
Axis::Horizontal => self.width.clone(),
|
||||
Axis::Vertical => self.height.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the value of this size along the given axis.
|
||||
pub fn apply_along(&self, axis: Axis, f: impl FnOnce(T) -> T) -> Self {
|
||||
match axis {
|
||||
Axis::Horizontal => Size {
|
||||
width: f(self.width.clone()),
|
||||
height: self.height.clone(),
|
||||
},
|
||||
Axis::Vertical => Size {
|
||||
width: self.width.clone(),
|
||||
height: f(self.height.clone()),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Size<T>
|
||||
where
|
||||
T: PartialOrd + Clone + Default + Debug,
|
||||
|
||||
@@ -477,3 +477,12 @@ impl From<Pixels> for AvailableSpace {
|
||||
AvailableSpace::Definite(pixels)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Size<Pixels>> for Size<AvailableSpace> {
|
||||
fn from(size: Size<Pixels>) -> Self {
|
||||
Size {
|
||||
width: AvailableSpace::Definite(size.width),
|
||||
height: AvailableSpace::Definite(size.height),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user