logo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use std::char;

/// A simple set of static helper functions for mint controls to use
pub struct Helper {}

impl Helper {
    // static
    pub fn sign(x: f32) -> i32 {
        if x < 0.0 {
            -1
        } else if x > 0.0 {
            1
        } else {
            0
        }
    }

    // static
    pub fn in_rect(x: f32, y: f32, rx: f32, ry: f32, rw: f32, rh: f32) -> bool {
        if x < rx {
            return false;
        }

        if y < ry {
            return false;
        }

        if x > rx + rw {
            return false;
        }

        if y > ry + rh {
            return false;
        }

        true
    }

    // static
    // ?val:Option<i32>
    pub fn uniqueid(val: Option<u32>) -> String {
        let val = val.unwrap_or_else(rand::random);

        fn to_char(value: u32) -> char {
            if value > 9 {
                let mut ascii = 65 + (value - 10);
                if ascii > 90 {
                    ascii += 6;
                }
                char::from_u32(ascii).unwrap()
            } else {
                format!("{}", value).chars().next().unwrap()
            }
        } //to_char

        let r = (val % 62) as u32;
        let q = (val / 62) as u32;
        if q > 0 {
            return format!("{}{}", Self::uniqueid(Some(q)), to_char(r));
        } else {
            return format!("{}", to_char(r));
        }
    }
}