pub use fret_core::LayoutDirection;
use fret_core::{Edges, Px, Rect, Size};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Side {
Top,
Bottom,
Left,
Right,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Align {
Start,
Center,
End,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum StickyMode {
Partial,
#[default]
Always,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct Offset {
pub main_axis: Px,
pub cross_axis: Px,
pub alignment_axis: Option<Px>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct CollisionOptions {
pub padding: Edges,
pub boundary: Option<Rect>,
}
#[derive(Debug, Clone, Copy, Default, PartialEq)]
pub struct AnchoredPanelOptions {
pub direction: LayoutDirection,
pub offset: Offset,
pub shift: ShiftOptions,
pub arrow: Option<ArrowOptions>,
pub collision: CollisionOptions,
pub sticky: StickyMode,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ShiftOptions {
pub main_axis: bool,
pub cross_axis: bool,
}
impl Default for ShiftOptions {
fn default() -> Self {
Self {
main_axis: true,
cross_axis: true,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ArrowOptions {
pub size: Size,
pub padding: Edges,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ArrowLayout {
pub side: Side,
pub offset: Px,
pub alignment_offset: Px,
pub center_offset: Px,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct AnchoredPanelLayout {
pub rect: Rect,
pub side: Side,
pub align: Align,
pub arrow: Option<ArrowLayout>,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct AnchoredPanelLayoutTrace {
pub outer_input: Rect,
pub outer_collision: Rect,
pub anchor: Rect,
pub desired: Size,
pub side_offset: Px,
pub preferred_side: Side,
pub align: Align,
pub options: AnchoredPanelOptions,
pub gap: Px,
pub preferred_rect: Rect,
pub flipped_rect: Rect,
pub preferred_fits_without_main_clamp: bool,
pub flipped_fits_without_main_clamp: bool,
pub preferred_available_main_px: f32,
pub flipped_available_main_px: f32,
pub chosen_side: Side,
pub chosen_rect: Rect,
pub rect_after_shift: Rect,
pub shift_delta: fret_core::Point,
pub layout: AnchoredPanelLayout,
}