//! Coordinate transformation module for Wayland output transforms. //! //! Historically exposed a family of `Rect`/`screen_to_frame`/`fit_inside_bounds` //! helpers for ROI-based capture clipping. Those were never wired into the //! capture pipeline (we capture full frames and let FFmpeg's filter graph handle //! any scaling/rotation); they have been removed. Only `Transform` and the //! `transpose_if_transform_transposed` helper remain — both are actively used by //! `state.rs` and `avhw.rs`. /// Wayland output transform enum, matching `wl_output::Transform`. #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Transform { Normal, Normal90, Normal180, Normal270, Flipped, Flipped90, Flipped180, Flipped270, } /// Swap width and height for 90° or 270° rotations. /// /// After a quarter-turn rotation the output dimensions are transposed /// relative to the input. This helper returns `(h, w)` for those cases /// and `(w, h)` unchanged otherwise. pub fn transpose_if_transform_transposed(transform: Transform, w: i32, h: i32) -> (i32, i32) { match transform { Transform::Normal90 | Transform::Normal270 | Transform::Flipped90 | Transform::Flipped270 => (h, w), _ => (w, h), } } #[cfg(test)] mod tests { use super::*; // ── transpose_if_transform_transposed ───────────────────────── #[test] fn transpose_normal_no_swap() { assert_eq!( transpose_if_transform_transposed(Transform::Normal, 1920, 1080), (1920, 1080) ); } #[test] fn transpose_90_swaps() { assert_eq!( transpose_if_transform_transposed(Transform::Normal90, 1920, 1080), (1080, 1920) ); } #[test] fn transpose_180_no_swap() { assert_eq!( transpose_if_transform_transposed(Transform::Normal180, 1920, 1080), (1920, 1080) ); } #[test] fn transpose_270_swaps() { assert_eq!( transpose_if_transform_transposed(Transform::Normal270, 1920, 1080), (1080, 1920) ); } #[test] fn transpose_flipped_no_swap() { assert_eq!( transpose_if_transform_transposed(Transform::Flipped, 1920, 1080), (1920, 1080) ); } #[test] fn transpose_flipped90_swaps() { assert_eq!( transpose_if_transform_transposed(Transform::Flipped90, 1920, 1080), (1080, 1920) ); } #[test] fn transpose_flipped180_no_swap() { assert_eq!( transpose_if_transform_transposed(Transform::Flipped180, 1920, 1080), (1920, 1080) ); } #[test] fn transpose_flipped270_swaps() { assert_eq!( transpose_if_transform_transposed(Transform::Flipped270, 1920, 1080), (1080, 1920) ); } }