Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rustcapeify

将 Windows 鼠标指针主题包(zip:.cur / .ani + install.inf)转换为 macOS Mousecape 使用的 .cape 主题文件。

纯 Rust 实现,零第三方依赖(无 crates.io 依赖):ZIP 解析、DEFLATE 解压、ICO/CUR 解码、ANI(RIFF) 解码、BMP 解码、PNG 编解码、GBK 解码、plist(XML) 生成全部手写实现。

格式参考:

构建

cargo build --release
# 产物:target/release/rustcapeify

macOS(含 Apple Silicon)

项目零第三方依赖、无平台特定代码,可直接在 macOS 上编译:

# Apple Silicon(M1/M2/M3…)或 Intel Mac 本机构建
./scripts/build-macos.sh

# 构建 universal2 二进制(同时支持 arm64 与 x86_64,可分发)
./scripts/build-macos.sh universal

也可以直接用 cargo:

# Apple Silicon 本机
cargo build --release

# 显式指定目标(需 rustup target add aarch64-apple-darwin)
rustup target add aarch64-apple-darwin
cargo build --release --target aarch64-apple-darwin

要求:macOS 11+、Xcode Command Line Tools、Rust 工具链(rustup)。生成产物为原生 Mach-O 二进制。

GitHub Actions(.github/workflows/build.yml)会在 macos-14(arm64 runner)上自动构建并跑测试,可直接下载 rustcapeify-macos-arm64 构件。

用法

rustcapeify <输入主题包.zip> <输出.cape> [选项]

选项:
  --inf <name>    指定 install.inf 文件名(默认自动查找)
  -v, --verbose   输出详细转换日志
  -h, --help      显示帮助

示例:

rustcapeify MyCursorPack.zip MyCursorPack.cape -v

转换完成后,在 macOS 上双击 .cape 文件即可导入 Mousecape,然后在 Mousecape 中应用该主题。

功能

能力 说明
ZIP 读取 支持 STORE / DEFLATE 压缩,UTF-8 与 GBK 文件名(中文主题包)
install.inf 解析 [Strings] 变量、[DefaultInstall(.nt)]、AddReg 单槽位行与整方案(Schemes)行
.cur 解码 32/24/16/8/4/1 bpp BMP(含 AND mask 与调色板)以及内嵌 PNG 图像;热点取自 ICONDIR
.ani 解码 RIFF/ACON:anih/fram/seq/rate 块;按播放顺序展开帧,帧时长取平均(1/60s 单位)
动画限制 Mousecape 单光标最多 24 帧;超过 24 帧的动画会被抽帧压缩(保持总时长)
macOS 映射 Windows 槽位 → com.apple.* 标识符(含 SizeNS/WE/NWSE/NESW 的多分辨率光标)
.cape 输出 XML plist v2 格式,Cursors 字典 + Representations(PNG 字节),动画帧竖直堆叠

Windows → macOS 光标映射

Windows 槽位 macOS 标识符
Arrow com.apple.coregraphics.Arrow
Help com.apple.cursor.40
AppStarting com.apple.cursor.4
Wait com.apple.coregraphics.Wait
Crosshair com.apple.cursor.7/8/41
IBeam com.apple.coregraphics.IBeam
No com.apple.cursor.3
SizeNS com.apple.cursor.32/21/22/23/31/36
SizeWE com.apple.cursor.28/17/18/19/27/38
SizeNWSE com.apple.cursor.34/33/35
SizeNESW com.apple.cursor.30/29/37
SizeAll com.apple.cursor.39
UpArrow com.apple.cursor.2
Hand com.apple.cursor.13

NWPen / Pin / Person 在 macOS 无对应,自动跳过。

测试

cargo test

集成测试使用 Python 脚本(tests/)生成真实的 .cur / .ani / install.inf 字节数据(含 32bpp 带 alpha 的 BMP、24bpp、8bpp 调色板、内嵌 PNG、带 seq/rate 的动画、两种 AddReg 布局),转换后用 plistlib + PIL 校验结构、元数据与像素。

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages