nines/lib.rs
1//! 9-Slice scaling math.
2//!
3//! ```text
4//! left right ┌──→ +x
5//! ┊←──── outer ────→┊ │
6//! ┊ ┊ ↓
7//! ┊ ┊←─ inner ─→┊ ┊ + y
8//! ┊ ┊ ┊ ┊
9//! ┌──┬───────────┬──┐┈┈┈┈┈┈┈┈ top
10//! │ │ │ │ ↑
11//! ├──┼───────────┼──┤┈┈┈┈ │
12//! │ │ │ │ ↑ │
13//! │ │ │ │ inner outer
14//! │ │ │ │ ↓ │
15//! ├──┼───────────┼──┤┈┈┈┈ │
16//! │ │ │ │ ↓
17//! └──┴───────────┴──┘┈┈┈┈┈┈ bottom
18//! ```
19//!
20//! ### References
21//!
22//! * [Wikipedia: 9-slice scaling](https://en.wikipedia.org/wiki/9-slice_scaling)
23//! * [Unity: 9-slicing Sprites](https://docs.unity3d.com/Manual/9SliceSprites.html)
24//! * [CSS Backgrounds and Borders ML3: ¶6 Border Images](https://www.w3.org/TR/css-backgrounds-3/#border-images)
25//!
26//! [Scalar]: trait.Scalar.html
27//! [uNN]: https://doc.rust-lang.org/std/primitive.u32.html
28//!
29//! ### Crate Features
30//!
31//! | feature | Overview |
32//! | ----------------- | -------- |
33//! | debug | Enable extra asserts for debugging nines itself.
34//! | unsigned-scalar | Allow [Scalar] to use underflow-prone [uNN] types.
35
36
37
38const DEBUG : bool = cfg!(feature = "debug");
39
40mod dimensions;
41mod error;
42mod layout;
43mod rect;
44mod scalar;
45mod scale;
46mod style;
47
48pub use dimensions::{Dimensions, ValidDimensions};
49pub use error::Error;
50pub use layout::Layout;
51pub use rect::{Rect, ValidRect};
52pub use scalar::Scalar;
53pub use scale::Scale;
54pub use style::Style;
55
56pub(crate) use error::err;
57
58
59
60/// A { horizontal, vertical } pair.
61#[derive(Clone, Copy, Debug, Default)]
62pub struct Axises<V: std::fmt::Debug> {
63 /// A horizontal (x-axis) value
64 pub horizontal: V,
65
66 /// A vertical (y-axis) value
67 pub vertical: V,
68}