Skip to main content

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}