forked from AbleOS/ableos
114 lines
2 KiB
Rust
114 lines
2 KiB
Rust
|
use rhai::INT;
|
||
|
|
||
|
pub type Rgba64 = u64;
|
||
|
|
||
|
pub fn get_r(rgba: Rgba64) -> u8 {
|
||
|
let x: u64 = rgba;
|
||
|
|
||
|
let y = x >> 24;
|
||
|
|
||
|
return (y & 0xff).try_into().unwrap();
|
||
|
}
|
||
|
pub fn get_g(rgba: Rgba64) -> u8 {
|
||
|
let x: u64 = rgba;
|
||
|
|
||
|
let y = x >> 16;
|
||
|
|
||
|
return (y & 0xff).try_into().unwrap();
|
||
|
}
|
||
|
pub fn get_b(rgba: Rgba64) -> u8 {
|
||
|
let x: u64 = rgba;
|
||
|
|
||
|
let y = x >> (24 - 16);
|
||
|
|
||
|
return (y & 0xff).try_into().unwrap();
|
||
|
}
|
||
|
pub fn get_a(rgba: Rgba64) -> u8 {
|
||
|
let x = rgba;
|
||
|
|
||
|
let y = x >> (24 - 16 - 8);
|
||
|
|
||
|
return (y & 0xff).try_into().unwrap();
|
||
|
}
|
||
|
|
||
|
pub fn set_r(rgba: Rgba64, r: u8) -> Rgba64 {
|
||
|
let z = (r as Rgba64) << 24;
|
||
|
let y = rgba & 0xffffff;
|
||
|
return z | y;
|
||
|
}
|
||
|
|
||
|
pub fn set_g(rgba: Rgba64, r: u8) -> Rgba64 {
|
||
|
let z = (r as Rgba64) << 16;
|
||
|
let y = rgba & 0xffffff;
|
||
|
return z | y;
|
||
|
}
|
||
|
|
||
|
pub fn set_b(rgba: Rgba64, r: u8) -> Rgba64 {
|
||
|
let z = (r as Rgba64) << 26 - 16;
|
||
|
let y = rgba & 0xffffff;
|
||
|
return z | y;
|
||
|
}
|
||
|
|
||
|
pub fn set_a(rgba: Rgba64, r: u8) -> Rgba64 {
|
||
|
let z = (r as Rgba64) << 8;
|
||
|
let y = rgba & 0xffffff;
|
||
|
return z | y;
|
||
|
}
|
||
|
|
||
|
#[derive(Debug, Clone)]
|
||
|
pub struct RGBA {
|
||
|
pub r: INT,
|
||
|
pub g: INT,
|
||
|
pub b: INT,
|
||
|
pub a: INT,
|
||
|
}
|
||
|
impl RGBA {
|
||
|
pub fn new(r: INT, g: INT, b: INT, a: INT) -> Self {
|
||
|
Self { r, g, b, a }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pub fn rgba_div(a: Rgba64, b: Rgba64) -> Rgba64 {
|
||
|
let mut fin: Rgba64 = 0;
|
||
|
|
||
|
// println!("{}", fin);
|
||
|
fin = set_r(fin, get_r(a) / get_r(b));
|
||
|
// println!("{}", fin);
|
||
|
|
||
|
fin = set_g(fin, get_g(a) / get_g(b));
|
||
|
/*
|
||
|
|
||
|
get_b(a) / get_b(b);
|
||
|
|
||
|
get_a(a) / get_a(b);
|
||
|
*/
|
||
|
|
||
|
return fin;
|
||
|
}
|
||
|
|
||
|
pub fn rgba_mult(a: RGBA, b: RGBA) -> RGBA {
|
||
|
RGBA {
|
||
|
r: a.r * b.r,
|
||
|
g: a.g * b.g,
|
||
|
b: a.b * b.b,
|
||
|
a: a.a * b.a,
|
||
|
}
|
||
|
}
|
||
|
pub fn rgba_add(a: RGBA, b: RGBA) -> RGBA {
|
||
|
RGBA {
|
||
|
r: a.r + b.r,
|
||
|
g: a.g + b.g,
|
||
|
b: a.b + b.b,
|
||
|
a: a.a + b.a,
|
||
|
}
|
||
|
}
|
||
|
pub fn rgba_sub(a: RGBA, b: RGBA) -> RGBA {
|
||
|
RGBA {
|
||
|
r: a.r - b.r,
|
||
|
g: a.g - b.g,
|
||
|
b: a.b - b.b,
|
||
|
a: a.a - b.a,
|
||
|
}
|
||
|
}
|
||
|
//
|