use crate::{prelude::*, ISize, Matrix};
use skia_bindings::{self as sb, SkEncodedOrigin};
#[repr(i32)]
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Default)]
pub enum EncodedOrigin {
#[default]
TopLeft = SkEncodedOrigin::TopLeft as _,
TopRight = SkEncodedOrigin::TopRight as _,
BottomRight = SkEncodedOrigin::BottomRight as _,
BottomLeft = SkEncodedOrigin::BottomLeft as _,
LeftTop = SkEncodedOrigin::LeftTop as _,
RightTop = SkEncodedOrigin::RightTop as _,
RightBottom = SkEncodedOrigin::RightBottom as _,
LeftBottom = SkEncodedOrigin::LeftBottom as _,
}
native_transmutable!(SkEncodedOrigin, EncodedOrigin);
impl EncodedOrigin {
pub const LAST: Self = EncodedOrigin::LeftBottom;
pub const DEFAULT: Self = EncodedOrigin::TopLeft;
pub fn to_matrix(self, size: impl Into<ISize>) -> Matrix {
let size = size.into();
let mut m = Matrix::default();
unsafe {
sb::C_SkEncodedOriginToMatrix(
self.into_native(),
size.width,
size.height,
m.native_mut(),
)
};
m
}
pub fn to_matrix_inverse(self, size: impl Into<ISize>) -> Matrix {
let size = size.into();
let mut m = Matrix::default();
unsafe {
sb::C_SkEncodedOriginToMatrixInverse(
self.into_native(),
size.width,
size.height,
m.native_mut(),
)
};
m
}
pub fn swaps_width_height(self) -> bool {
(self as i32) >= EncodedOrigin::LeftTop as i32
}
}