Fork of https://github.com/lelgenio/wl-crosshair - A crosshair overlay for wlroots compositor

Add support for loading any image, add some default cursors

lelgenio d642e72c 081f6bed

+1
.gitignore
···
/target
.direnv/
+
cursors/*~
+934 -6
Cargo.lock
···
version = 3
[[package]]
+
name = "adler"
+
version = "1.0.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+
[[package]]
+
name = "aligned-vec"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1"
+
+
[[package]]
+
name = "anyhow"
+
version = "1.0.83"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3"
+
+
[[package]]
+
name = "arbitrary"
+
version = "1.3.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110"
+
+
[[package]]
+
name = "arg_enum_proc_macro"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn",
+
]
+
+
[[package]]
+
name = "arrayvec"
+
version = "0.7.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+
[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
+
name = "av1-grain"
+
version = "0.2.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf"
+
dependencies = [
+
"anyhow",
+
"arrayvec",
+
"log",
+
"nom",
+
"num-rational",
+
"v_frame",
+
]
+
+
[[package]]
+
name = "avif-serialize"
+
version = "0.8.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2"
+
dependencies = [
+
"arrayvec",
+
]
+
+
[[package]]
+
name = "bit_field"
+
version = "0.10.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
+
name = "bitstream-io"
+
version = "2.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7c12d1856e42f0d817a835fe55853957c85c8c8a470114029143d3f12671446e"
+
+
[[package]]
+
name = "built"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "41bfbdb21256b87a8b5e80fab81a8eed158178e812fd7ba451907518b2742f16"
+
+
[[package]]
+
name = "bumpalo"
+
version = "3.16.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+
[[package]]
+
name = "bytemuck"
+
version = "1.15.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15"
+
+
[[package]]
+
name = "byteorder"
+
version = "1.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+
[[package]]
+
name = "byteorder-lite"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
+
+
[[package]]
name = "cc"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
dependencies = [
+
"jobserver",
+
]
+
+
[[package]]
+
name = "cfg-expr"
+
version = "0.15.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
+
dependencies = [
+
"smallvec",
+
"target-lexicon",
+
]
[[package]]
name = "cfg-if"
···
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
+
name = "color_quant"
+
version = "1.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+
[[package]]
+
name = "crc32fast"
+
version = "1.4.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa"
+
dependencies = [
+
"cfg-if",
+
]
+
+
[[package]]
+
name = "crossbeam-deque"
+
version = "0.8.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
+
dependencies = [
+
"crossbeam-epoch",
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-epoch"
+
version = "0.9.18"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+
dependencies = [
+
"crossbeam-utils",
+
]
+
+
[[package]]
+
name = "crossbeam-utils"
+
version = "0.8.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+
[[package]]
+
name = "crunchy"
+
version = "0.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+
[[package]]
name = "dlib"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+
[[package]]
+
name = "either"
+
version = "1.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
+
+
[[package]]
+
name = "equivalent"
+
version = "1.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
···
]
[[package]]
+
name = "exr"
+
version = "1.72.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4"
+
dependencies = [
+
"bit_field",
+
"flume",
+
"half",
+
"lebe",
+
"miniz_oxide",
+
"rayon-core",
+
"smallvec",
+
"zune-inflate",
+
]
+
+
[[package]]
name = "fastrand"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
+
name = "fdeflate"
+
version = "0.3.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645"
+
dependencies = [
+
"simd-adler32",
+
]
+
+
[[package]]
+
name = "flate2"
+
version = "1.0.30"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
+
dependencies = [
+
"crc32fast",
+
"miniz_oxide",
+
]
+
+
[[package]]
+
name = "flume"
+
version = "0.11.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+
dependencies = [
+
"spin",
+
]
+
+
[[package]]
+
name = "getrandom"
+
version = "0.2.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+
dependencies = [
+
"cfg-if",
+
"libc",
+
"wasi",
+
]
+
+
[[package]]
+
name = "gif"
+
version = "0.13.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2"
+
dependencies = [
+
"color_quant",
+
"weezl",
+
]
+
+
[[package]]
+
name = "half"
+
version = "2.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
+
dependencies = [
+
"cfg-if",
+
"crunchy",
+
]
+
+
[[package]]
+
name = "hashbrown"
+
version = "0.14.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+
+
[[package]]
+
name = "heck"
+
version = "0.5.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+
[[package]]
name = "hermit-abi"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
[[package]]
+
name = "image"
+
version = "0.25.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "fd54d660e773627692c524beaad361aca785a4f9f5730ce91f42aabe5bce3d11"
+
dependencies = [
+
"bytemuck",
+
"byteorder",
+
"color_quant",
+
"exr",
+
"gif",
+
"image-webp",
+
"num-traits",
+
"png",
+
"qoi",
+
"ravif",
+
"rayon",
+
"rgb",
+
"tiff",
+
"zune-core",
+
"zune-jpeg",
+
]
+
+
[[package]]
+
name = "image-webp"
+
version = "0.1.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d730b085583c4d789dfd07fdcf185be59501666a90c97c40162b37e4fdad272d"
+
dependencies = [
+
"byteorder-lite",
+
"thiserror",
+
]
+
+
[[package]]
+
name = "imgref"
+
version = "1.10.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "44feda355f4159a7c757171a77de25daf6411e217b4cabd03bd6650690468126"
+
+
[[package]]
+
name = "indexmap"
+
version = "2.2.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
+
dependencies = [
+
"equivalent",
+
"hashbrown",
+
]
+
+
[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if",
+
]
+
+
[[package]]
+
name = "interpolate_name"
+
version = "0.2.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn",
]
[[package]]
···
]
[[package]]
+
name = "itertools"
+
version = "0.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+
dependencies = [
+
"either",
+
]
+
+
[[package]]
+
name = "jobserver"
+
version = "0.1.31"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e"
+
dependencies = [
+
"libc",
+
]
+
+
[[package]]
+
name = "jpeg-decoder"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
+
+
[[package]]
+
name = "lebe"
+
version = "0.5.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+
[[package]]
name = "libc"
-
version = "0.2.144"
+
version = "0.2.154"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
+
+
[[package]]
+
name = "libfuzzer-sys"
+
version = "0.4.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a96cfd5557eb82f2b83fed4955246c988d331975a002961b07c81584d107e7f7"
+
dependencies = [
+
"arbitrary",
+
"cc",
+
"once_cell",
+
]
[[package]]
name = "libloading"
···
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
+
name = "lock_api"
+
version = "0.4.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+
dependencies = [
+
"autocfg",
+
"scopeguard",
+
]
+
+
[[package]]
name = "log"
version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
[[package]]
+
name = "loop9"
+
version = "0.1.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
+
dependencies = [
+
"imgref",
+
]
+
+
[[package]]
+
name = "maybe-rayon"
+
version = "0.1.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
+
dependencies = [
+
"cfg-if",
+
"rayon",
+
]
+
+
[[package]]
name = "memchr"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
+
name = "minimal-lexical"
+
version = "0.2.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+
[[package]]
+
name = "miniz_oxide"
+
version = "0.7.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
+
dependencies = [
+
"adler",
+
"simd-adler32",
+
]
+
+
[[package]]
+
name = "new_debug_unreachable"
+
version = "1.0.6"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
+
+
[[package]]
name = "nix"
version = "0.26.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
+
name = "nom"
+
version = "7.1.3"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+
dependencies = [
+
"memchr",
+
"minimal-lexical",
+
]
+
+
[[package]]
+
name = "noop_proc_macro"
+
version = "0.3.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
+
+
[[package]]
+
name = "num-bigint"
+
version = "0.4.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7"
+
dependencies = [
+
"num-integer",
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-derive"
+
version = "0.4.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn",
+
]
+
+
[[package]]
+
name = "num-integer"
+
version = "0.1.46"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
+
dependencies = [
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-rational"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+
dependencies = [
+
"autocfg",
+
"num-bigint",
+
"num-integer",
+
"num-traits",
+
]
+
+
[[package]]
+
name = "num-traits"
+
version = "0.2.19"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+
dependencies = [
+
"autocfg",
+
]
+
+
[[package]]
+
name = "once_cell"
+
version = "1.19.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+
[[package]]
+
name = "paste"
+
version = "1.0.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
+
+
[[package]]
name = "pkg-config"
version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
+
name = "png"
+
version = "0.17.13"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1"
+
dependencies = [
+
"bitflags",
+
"crc32fast",
+
"fdeflate",
+
"flate2",
+
"miniz_oxide",
+
]
+
+
[[package]]
+
name = "ppv-lite86"
+
version = "0.2.17"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+
[[package]]
name = "proc-macro2"
-
version = "1.0.59"
+
version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
+
checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b"
dependencies = [
"unicode-ident",
]
[[package]]
+
name = "profiling"
+
version = "1.0.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58"
+
dependencies = [
+
"profiling-procmacros",
+
]
+
+
[[package]]
+
name = "profiling-procmacros"
+
version = "1.0.15"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd"
+
dependencies = [
+
"quote",
+
"syn",
+
]
+
+
[[package]]
+
name = "qoi"
+
version = "0.4.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+
dependencies = [
+
"bytemuck",
+
]
+
+
[[package]]
+
name = "quick-error"
+
version = "2.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+
[[package]]
name = "quick-xml"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
[[package]]
name = "quote"
-
version = "1.0.28"
+
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
+
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [
"proc-macro2",
]
[[package]]
+
name = "rand"
+
version = "0.8.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+
dependencies = [
+
"libc",
+
"rand_chacha",
+
"rand_core",
+
]
+
+
[[package]]
+
name = "rand_chacha"
+
version = "0.3.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+
dependencies = [
+
"ppv-lite86",
+
"rand_core",
+
]
+
+
[[package]]
+
name = "rand_core"
+
version = "0.6.4"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+
dependencies = [
+
"getrandom",
+
]
+
+
[[package]]
+
name = "rav1e"
+
version = "0.7.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9"
+
dependencies = [
+
"arbitrary",
+
"arg_enum_proc_macro",
+
"arrayvec",
+
"av1-grain",
+
"bitstream-io",
+
"built",
+
"cfg-if",
+
"interpolate_name",
+
"itertools",
+
"libc",
+
"libfuzzer-sys",
+
"log",
+
"maybe-rayon",
+
"new_debug_unreachable",
+
"noop_proc_macro",
+
"num-derive",
+
"num-traits",
+
"once_cell",
+
"paste",
+
"profiling",
+
"rand",
+
"rand_chacha",
+
"simd_helpers",
+
"system-deps",
+
"thiserror",
+
"v_frame",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "ravif"
+
version = "0.11.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "bc13288f5ab39e6d7c9d501759712e6969fcc9734220846fc9ed26cae2cc4234"
+
dependencies = [
+
"avif-serialize",
+
"imgref",
+
"loop9",
+
"quick-error",
+
"rav1e",
+
"rayon",
+
"rgb",
+
]
+
+
[[package]]
+
name = "rayon"
+
version = "1.10.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
+
dependencies = [
+
"either",
+
"rayon-core",
+
]
+
+
[[package]]
+
name = "rayon-core"
+
version = "1.12.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
+
dependencies = [
+
"crossbeam-deque",
+
"crossbeam-utils",
+
]
+
+
[[package]]
name = "redox_syscall"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
]
[[package]]
+
name = "rgb"
+
version = "0.8.37"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8"
+
dependencies = [
+
"bytemuck",
+
]
+
+
[[package]]
name = "rustix"
version = "0.37.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
+
name = "scopeguard"
+
version = "1.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+
[[package]]
+
name = "serde"
+
version = "1.0.201"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c"
+
dependencies = [
+
"serde_derive",
+
]
+
+
[[package]]
+
name = "serde_derive"
+
version = "1.0.201"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn",
+
]
+
+
[[package]]
+
name = "serde_spanned"
+
version = "0.6.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "simd-adler32"
+
version = "0.3.7"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+
[[package]]
+
name = "simd_helpers"
+
version = "0.1.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
+
dependencies = [
+
"quote",
+
]
+
+
[[package]]
name = "smallvec"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
+
name = "spin"
+
version = "0.9.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
dependencies = [
+
"lock_api",
+
]
+
+
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
+
name = "syn"
+
version = "2.0.61"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"unicode-ident",
+
]
+
+
[[package]]
+
name = "system-deps"
+
version = "6.2.2"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
+
dependencies = [
+
"cfg-expr",
+
"heck",
+
"pkg-config",
+
"toml",
+
"version-compare",
+
]
+
+
[[package]]
+
name = "target-lexicon"
+
version = "0.12.14"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
+
+
[[package]]
name = "tempfile"
version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
"redox_syscall",
"rustix",
"windows-sys 0.45.0",
+
]
+
+
[[package]]
+
name = "thiserror"
+
version = "1.0.60"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18"
+
dependencies = [
+
"thiserror-impl",
+
]
+
+
[[package]]
+
name = "thiserror-impl"
+
version = "1.0.60"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn",
+
]
+
+
[[package]]
+
name = "tiff"
+
version = "0.9.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e"
+
dependencies = [
+
"flate2",
+
"jpeg-decoder",
+
"weezl",
+
]
+
+
[[package]]
+
name = "toml"
+
version = "0.8.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3"
+
dependencies = [
+
"serde",
+
"serde_spanned",
+
"toml_datetime",
+
"toml_edit",
+
]
+
+
[[package]]
+
name = "toml_datetime"
+
version = "0.6.5"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+
dependencies = [
+
"serde",
+
]
+
+
[[package]]
+
name = "toml_edit"
+
version = "0.22.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef"
+
dependencies = [
+
"indexmap",
+
"serde",
+
"serde_spanned",
+
"toml_datetime",
+
"winnow",
]
[[package]]
···
checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
[[package]]
+
name = "v_frame"
+
version = "0.3.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b"
+
dependencies = [
+
"aligned-vec",
+
"num-traits",
+
"wasm-bindgen",
+
]
+
+
[[package]]
+
name = "version-compare"
+
version = "0.2.0"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
+
+
[[package]]
+
name = "wasi"
+
version = "0.11.0+wasi-snapshot-preview1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+
[[package]]
+
name = "wasm-bindgen"
+
version = "0.2.92"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+
dependencies = [
+
"cfg-if",
+
"wasm-bindgen-macro",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-backend"
+
version = "0.2.92"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+
dependencies = [
+
"bumpalo",
+
"log",
+
"once_cell",
+
"proc-macro2",
+
"quote",
+
"syn",
+
"wasm-bindgen-shared",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-macro"
+
version = "0.2.92"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+
dependencies = [
+
"quote",
+
"wasm-bindgen-macro-support",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-macro-support"
+
version = "0.2.92"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+
dependencies = [
+
"proc-macro2",
+
"quote",
+
"syn",
+
"wasm-bindgen-backend",
+
"wasm-bindgen-shared",
+
]
+
+
[[package]]
+
name = "wasm-bindgen-shared"
+
version = "0.2.92"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
+
+
[[package]]
name = "wayland-backend"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
"log",
"pkg-config",
]
+
+
[[package]]
+
name = "weezl"
+
version = "0.1.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
[[package]]
name = "winapi"
···
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
+
name = "winnow"
+
version = "0.6.8"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d"
+
dependencies = [
+
"memchr",
+
]
+
+
[[package]]
name = "wl-crosshair"
version = "0.1.0"
dependencies = [
+
"image",
"log",
"tempfile",
"wayland-client",
"wayland-protocols",
"wayland-protocols-wlr",
]
+
+
[[package]]
+
name = "zune-core"
+
version = "0.4.12"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
+
+
[[package]]
+
name = "zune-inflate"
+
version = "0.2.54"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+
dependencies = [
+
"simd-adler32",
+
]
+
+
[[package]]
+
name = "zune-jpeg"
+
version = "0.4.11"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448"
+
dependencies = [
+
"zune-core",
+
]
+1
Cargo.toml
···
log = { version = "0.4", optional = true }
tempfile = "3.2"
+
image = "0.25.1"
cursors/inverse-v.png

This is a binary file and will not be displayed.

cursors/test-colors.png

This is a binary file and will not be displayed.

cursors/wojak-cursor.png

This is a binary file and will not be displayed.

+7
flake.nix
···
version = "0.1.0";
src = ./.;
cargoLock.lockFile = ./Cargo.lock;
+
nativeBuildInputs = with pkgs; [ makeWrapper ];
+
postInstall = ''
+
mkdir -p $out/share
+
cp -rv ${./cursors} $out/share/cursors
+
wrapProgram $out/bin/* \
+
--set WL_CROSSHAIR_IMAGE_PATH $out/share/cursors/inverse-v.png
+
'';
};
};
+64 -40
src/main.rs
···
use std::{fs::File, io::Write, os::unix::prelude::AsRawFd};
+
use image::{GenericImageView, Pixel};
use wayland_client::{
protocol::{
-
wl_buffer, wl_compositor, wl_keyboard, wl_region::WlRegion, wl_registry, wl_seat, wl_shm, wl_shm_pool, wl_surface
+
wl_buffer, wl_compositor, wl_keyboard, wl_region::WlRegion, wl_registry, wl_seat, wl_shm,
+
wl_shm_pool, wl_surface,
},
Connection, Dispatch, Proxy, QueueHandle,
};
···
struct State {
running: bool,
-
cursor_size: u32,
+
cursor_width: u32,
+
cursor_height: u32,
+
image_path: String,
compositor: Option<wl_compositor::WlCompositor>,
base_surface: Option<wl_surface::WlSurface>,
···
wm_base: Option<xdg_wm_base::XdgWmBase>,
}
+
fn get_cursor_image_path() -> String {
+
if let Some(p) = std::env::args().skip(1).next() {
+
return p;
+
}
+
+
if let Ok(p) = std::env::var("WL_CROSSHAIR_IMAGE_PATH") {
+
return p;
+
}
+
+
[
+
std::option_env!("WL_CROSSHAIR_IMAGE_PATH").map(String::from),
+
Some("cursors/inverse-v.png".to_string()),
+
]
+
.into_iter()
+
.flatten()
+
.filter(|p|
+
std::fs::metadata(p)
+
.map(|m| m.is_file())
+
.unwrap_or(false)
+
)
+
.next()
+
.expect("Could not find a crosshair image, pass it as a cli argument or set WL_CROSSHAIR_IMAGE_PATH environment variable")
+
}
+
fn main() {
let conn = Connection::connect_to_env().unwrap();
···
let mut state = State {
running: true,
-
cursor_size: 10,
+
cursor_width: 10,
+
cursor_height: 10,
+
image_path: get_cursor_image_path(),
compositor: None,
base_surface: None,
layer_shell: None,
···
} else if interface == wl_shm::WlShm::interface().name {
let shm = registry.bind::<wl_shm::WlShm, _, _>(name, version, qh, ());
-
let (init_w, init_h) = (state.cursor_size, state.cursor_size);
-
let mut file = tempfile::tempfile().unwrap();
-
draw(&mut file, (init_w, init_h));
+
state.draw(&mut file);
+
+
let (init_w, init_h) = (state.cursor_width, state.cursor_height);
+
let pool = shm.create_pool(file.as_raw_fd(), (init_w * init_h * 4) as i32, qh, ());
let buffer = pool.create_buffer(
0,
···
}
}
-
fn draw(tmp: &mut File, (buf_x, buf_y): (u32, u32)) {
-
let mut buf = std::io::BufWriter::new(tmp);
-
for y in 0..buf_y {
-
for x in 0..buf_x {
-
let ix = x as i32;
-
let iy = y as i32;
-
-
let dist = if x <= (buf_x / 2) {
-
ix + iy - (buf_y as i32)
-
} else {
-
iy - ix
-
};
-
-
let a: u32 = match dist.abs() {
-
0 => 0xFF,
-
1 => 0x88,
-
_ => 0x00,
-
};
-
-
let c: u32 = match dist.abs() {
-
0 => 0xFF,
-
1 => 0x88,
-
_ => 0x00,
-
};
-
-
let color = (a << 24) + (c << 16) + (c << 8) + c;
-
buf.write_all(&color.to_ne_bytes()).unwrap();
-
}
-
}
-
buf.flush().unwrap();
-
}
-
impl State {
fn init_layer_surface(&mut self, qh: &QueueHandle<State>) {
let layer = self.layer_shell.as_ref().unwrap().get_layer_surface(
···
// Center the window
layer.set_anchor(Anchor::Top | Anchor::Right | Anchor::Bottom | Anchor::Left);
layer.set_keyboard_interactivity(zwlr_layer_surface_v1::KeyboardInteractivity::None);
-
layer.set_size(self.cursor_size, self.cursor_size);
+
layer.set_size(self.cursor_width, self.cursor_height);
// A negative value means we will be centered on the screen
// independently of any other xdg_layer_shell
layer.set_exclusive_zone(-1);
// Set empty input region to allow clicking through the window.
if let Some(compositor) = &self.compositor {
let region = compositor.create_region(qh, ());
-
self.base_surface.as_ref().unwrap().set_input_region(Some(&region));
+
self.base_surface
+
.as_ref()
+
.unwrap()
+
.set_input_region(Some(&region));
}
self.base_surface.as_ref().unwrap().commit();
self.layer_surface = Some(layer);
+
}
+
+
fn draw(&mut self, tmp: &mut File) {
+
let mut buf = std::io::BufWriter::new(tmp);
+
+
let i = image::open(&self.image_path).unwrap();
+
+
self.cursor_width = i.width();
+
self.cursor_height = i.height();
+
+
for y in 0..self.cursor_height {
+
for x in 0..self.cursor_width {
+
let px = i.get_pixel(x, y).to_rgba();
+
+
let [r, g, b, a] = px.channels().try_into().unwrap();
+
+
let color = u32::from_be_bytes([a, r, g, b]);
+
+
buf.write_all(&color.to_le_bytes()).unwrap();
+
}
+
}
+
buf.flush().unwrap();
}
}