classicube_sys/
packed_col.rs1use crate::bindings::{
2 PACKEDCOL_A_SHIFT, PACKEDCOL_B_SHIFT, PACKEDCOL_G_SHIFT, PACKEDCOL_R_SHIFT, PackedCol,
3};
4
5#[must_use]
6#[expect(
7 clippy::cast_possible_truncation,
8 reason = "extracting low byte of packed color"
9)]
10pub const fn PackedCol_R(col: PackedCol) -> u8 {
11 (col >> PACKEDCOL_R_SHIFT) as u8
12}
13#[must_use]
14#[expect(
15 clippy::cast_possible_truncation,
16 reason = "extracting low byte of packed color"
17)]
18pub const fn PackedCol_G(col: PackedCol) -> u8 {
19 (col >> PACKEDCOL_G_SHIFT) as u8
20}
21#[must_use]
22#[expect(
23 clippy::cast_possible_truncation,
24 reason = "extracting low byte of packed color"
25)]
26pub const fn PackedCol_B(col: PackedCol) -> u8 {
27 (col >> PACKEDCOL_B_SHIFT) as u8
28}
29#[must_use]
30pub const fn PackedCol_A(col: PackedCol) -> u8 {
31 (col >> PACKEDCOL_A_SHIFT) as u8
32}
33
34#[must_use]
35pub const fn PackedCol_R_Bits(col: u8) -> PackedCol {
36 (col as PackedCol) << PACKEDCOL_R_SHIFT
37}
38#[must_use]
39pub const fn PackedCol_G_Bits(col: u8) -> PackedCol {
40 (col as PackedCol) << PACKEDCOL_G_SHIFT
41}
42#[must_use]
43pub const fn PackedCol_B_Bits(col: u8) -> PackedCol {
44 (col as PackedCol) << PACKEDCOL_B_SHIFT
45}
46#[must_use]
47pub const fn PackedCol_A_Bits(col: u8) -> PackedCol {
48 (col as PackedCol) << PACKEDCOL_A_SHIFT
49}
50
51#[must_use]
52pub const fn PackedCol_Make(r: u8, g: u8, b: u8, a: u8) -> PackedCol {
53 PackedCol_R_Bits(r) | PackedCol_G_Bits(g) | PackedCol_B_Bits(b) | PackedCol_A_Bits(a)
54}
55
56pub const PACKEDCOL_WHITE: PackedCol = PackedCol_Make(255, 255, 255, 255);
57
58#[test]
59fn test_packed_col() {
60 let c = PackedCol_Make(1, 2, 3, 4);
61
62 assert_eq!(PackedCol_R(c), 1);
63 assert_eq!(PackedCol_G(c), 2);
64 assert_eq!(PackedCol_B(c), 3);
65 assert_eq!(PackedCol_A(c), 4);
66}