From aea9055b2fc72b84ad7a0115f091f52f3c113903 Mon Sep 17 00:00:00 2001 From: Noratrieb <48135649+Noratrieb@users.noreply.github.com> Date: Sun, 28 Dec 2025 19:51:50 +0100 Subject: [PATCH] switch to palette since we're gonna need to do color things later --- Cargo.lock | 125 +++++++++++++++++++++++++++++++++++++++++++++++----- Cargo.toml | 5 ++- src/main.rs | 28 +++++++----- 3 files changed, 134 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c9cf3d5..370335e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -61,12 +61,33 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + [[package]] name = "bitflags" version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +[[package]] +name = "by_address" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" + [[package]] name = "bytemuck" version = "1.24.0" @@ -292,13 +313,12 @@ dependencies = [ ] [[package]] -name = "oklab" -version = "1.1.2" +name = "num-traits" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e35ab3c8efa6bc97d651abe7fb051aebb30c925a450ff6722cf9c797a938cc" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "fast-srgb8", - "rgb", + "autocfg", ] [[package]] @@ -313,6 +333,72 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "palette" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbf71184cc5ecc2e4e1baccdb21026c20e5fc3dcf63028a086131b3ab00b6e6" +dependencies = [ + "approx", + "fast-srgb8", + "palette_derive", + "phf", +] + +[[package]] +name = "palette_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" +dependencies = [ + "by_address", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -381,6 +467,21 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + [[package]] name = "regex" version = "1.12.2" @@ -410,12 +511,6 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" -[[package]] -name = "rgb" -version = "0.8.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" - [[package]] name = "rustix" version = "1.1.3" @@ -455,6 +550,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.11" @@ -564,7 +665,7 @@ dependencies = [ "env_logger", "eyre", "log", - "oklab", + "palette", "smithay-client-toolkit", "wayland-client", ] diff --git a/Cargo.toml b/Cargo.toml index 503f24f..0c450be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,9 @@ edition = "2024" env_logger = "0.11.8" eyre = "0.6.12" log = "0.4.29" -oklab = "1.1.2" +palette = "0.7.6" smithay-client-toolkit = "0.20.0" wayland-client = "0.31.11" + +[profile.dev] +opt-level = 1 \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 665cc76..9921ea2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::time::Duration; use eyre::{Context, Result}; use log::{info, warn}; +use palette::FromColor; use smithay_client_toolkit::{ compositor::{CompositorHandler, CompositorState}, output::{OutputHandler, OutputState}, @@ -224,19 +225,12 @@ impl LayerShellHandler for App { let x = (index % width as usize) as u32; let y = (index / width as usize) as u32; - let xf = x as f32 / width as f32; - let yf = y as f32 / height as f32; - - let srgb = oklab::oklab_to_srgb(oklab::Oklab { - l: 0.7, - a: xf * 0.8 - 0.4, - b: yf * 0.8 - 0.4, - }); + let srgb = color_for_pixel(x, y, width, height); let a = 0xFF; - let r = srgb.r as u32; - let g = srgb.g as u32; - let b = srgb.b as u32; + let r = srgb.red as u32; + let g = srgb.green as u32; + let b = srgb.blue as u32; let color = (a << 24) + (r << 16) + (g << 8) + b; let array: &mut [u8; 4] = chunk.try_into().unwrap(); @@ -260,6 +254,18 @@ impl LayerShellHandler for App { } } +fn color_for_pixel(x: u32, y: u32, width: u32, height: u32) -> palette::Srgb { + let xf = x as f32 / width as f32; + let yf = y as f32 / height as f32; + + palette::Srgb::from_color(palette::Oklab { + l: 0.7, + a: xf * 0.8 - 0.4, + b: yf * 0.8 - 0.4, + }) + .into_format::() +} + impl ShmHandler for App { fn shm_state(&mut self) -> &mut Shm { &mut self.shm