Skip to content
sofiworkerPublic

About

拾光 · Glint — Rust + Slint native screenshot tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Glint · 拾光

以热键、截图浮层和桌面贴图为中心的原生截图工具,暂定名。技术栈 Rust + Slint;平台顺序 Windows → macOS → Linux。

已有 Windows 原生开发版:后台热键 → 真实截图 → 浮层标注/打码 → 复制、保存或贴图,无需返回工作台。设置、首次引导与双语已接入;M0–M5 完整验收和正式首版发布仍未完成。

默认区域截图 Ctrl+Shift+S,窗口截图 Ctrl+Shift+W,重复区域 Ctrl+Shift+R,剪贴板贴图 Ctrl+Shift+P,隐藏/恢复贴图 Ctrl+Shift+H,救援 Ctrl+Alt+Escape。绑定可在设置中修改,冲突时以实际成功保存的绑定为准。默认 Enter 复制并退出,Esc 取消;关闭设置收起到托盘,从托盘菜单正常退出。

打开 prototype/index.html 浏览全流程原型。HTML 使用示意桌面,不会截取真实屏幕或修改系统设置,最终产品不使用 WebView。

cargo check --workspace
cargo check-shell
cargo lint
cargo test --workspace --features glint-app/native-shell

验证素材、旧 Demo 参考代码、开发说明与原型验收记录位于 .local/,已加入 Git 忽略。旧工作台仅作为辅助入口参考,不是新产品的主流程。

native-shell 默认启动 Windows 原生常驻与设置(M1 进行中):

cargo run -p glint-app --features native-shell
cargo run -p glint-app --features native-shell -- --settings
# 隔离配置目录的原生设置冒烟,目录必须为空
cargo run -p glint-app --features native-shell -- --m1-smoke .local/validation/settings-new
# 仅运行界面缩放验证(同样要求全新空目录,不替代上面的全流程回归)
cargo run -p glint-app --features native-shell -- --m4-scale-smoke .local/validation/scale-new
# 仅运行减少动效验证(实际软件渲染帧与设置事务,不替代全流程回归)
cargo run -p glint-app --features native-shell -- --m4-motion-smoke .local/validation/motion-new
# 仅运行真实诊断刷新、失败保留与双语验证(要求全新空目录)
cargo run -p glint-app --features native-shell -- --m4-diagnostics-smoke .local/validation/diagnostics-new
# 仅运行系统字体选择、草稿隔离与文字导出验证(要求全新空目录)
cargo run -p glint-app --features native-shell -- --m4-fonts-smoke .local/validation/fonts-new
# 仅运行输出目录草稿、取消与文件名预览验证(要求全新空目录)
cargo run -p glint-app --features native-shell -- --m4-output-settings-smoke .local/validation/output-settings-new
# Manual save conflict policy and numbered capture/pin output (new empty directory)
cargo run -p glint-app --features native-shell -- --m4-output-conflict-smoke .local/validation/output-conflict-new
# 配置选择器延后打开、取消/失败与嵌套回调隔离(选择结果由测试边界注入)
cargo run -p glint-app --features native-shell -- --m4-config-dialog-smoke .local/validation/config-dialog-new
# 本地图片选择器取消/失败/过期结果、救援事件和真实 PNG 解码(选择结果注入)
cargo run -p glint-app --features native-shell -- --m4-local-dialog-smoke .local/validation/local-dialog-new
# 固定行为的实际状态、导入关闭值保留与双语设置布局(全新空目录)
cargo run -p glint-app --features native-shell -- --m4-settings-policy-smoke .local/validation/settings-policy-new
# 诊断日志开关、真实事件、失败重试及清理隔离(全新空目录)
cargo run -p glint-app --features native-shell -- --m4-log-smoke .local/validation/diagnostic-log-new
# 排除程序:真实可见窗口拒绝、倒计时后检查、隐藏后重试、本地图片绕过(全新空目录)
cargo run -p glint-app --features native-shell -- --m4-exclusion-smoke .local/validation/exclusion-new
# 显式构建真实 Windows 输入验证器(普通 native-shell 不包含输入注入代码)
cargo run -p glint-app --features input-probe -- --m5-input-smoke .local/validation/native-input-new
cargo run -p glint-app --features input-probe -- --m5-dialog-input-smoke .local/validation/native-dialog-input-new
cargo run -p glint-app --features input-probe -- --m5-dialog-conflict-input-smoke .local/validation/native-dialog-conflict-input-new
# 界面缩放,以及主题事件前后标注/文字草稿/贴图几何/源像素输出保持(事件注入,不改系统主题)
cargo run -p glint-app --features native-shell -- --m4-scale-smoke .local/validation/scale-theme-new
# 真实常驻 / 冻结浮层 / 标注 / PNG 导出的阶段资源记录(全新空目录)
cargo run --release -p glint-app --features native-shell -- --m5-resources .local/validation/resources-new
# 生成真实 3840×2160 PNG,通过本地图片入口测量原生预览 / 编辑 / 导出(全新空目录)
cargo run --release -p glint-app --features native-shell -- --m5-resources-4k .local/validation/resources-4k-new
# 30 轮真实采集/标注/PNG/贴图旋转关闭,约十分钟(全新空目录,保存真实桌面 QA 图像)
cargo run --release -p glint-app --features native-shell -- --m5-endurance .local/validation/endurance-new

--m5-resources 会采集真实桌面,连续三轮保存合成 PNG 到指定验证目录,并写入 resources.toml。记录进程 CPU、内存与句柄的阶段边界值和耗时;静止阶段每次等待 5 秒,无验证器轮询,采集/导出等待期间每 20 毫秒检查完成。绘图事件为程序批量触发,渲染通过软件快照确认,保存路径预先指定;不测物理输入、系统保存对话框、合成器显示延迟或内存峰值,也不代替长期常驻与 4K / 多屏验收。正常启动不会执行此验证或保存这些图像。

--m5-resources-4k 使用生成的 4K PNG,三轮经过实际本地文件解码、完整源像素画布、软件预览、600 次画笔移动、实心遮盖、撤销重做和 PNG 导出。保留源图、预览、三张导出图及资源报告,并核对源图未改动、遮盖和未编辑边缘像素。生成源图不计入基线,导出像素校验不计入导出耗时;这验证合成 4K 图片编辑,不能代替物理 4K 显示器采集或连续交互帧率验收。

--m5-endurance 扩展为 30 轮真实桌面工作流,每轮另外核对冻结源图边缘与实心遮盖像素,将实际导出图创建为贴图、旋转 90°、逐像素核对、软件渲染并关闭,要求贴图数量和预留预算归零。每轮等待渲染、反馈释放与五秒静止区间,保留 30 张 PNG 和阶段资源报告;额外校验与贴图分配开销单独标明。它用于观察重复工作流后的资源趋势,不代表多日常驻、物理输入、内存峰值或所有环境的无泄漏证明。正常启动不运行该验证,也不会额外保存这些图像。

--m5-input-smoke 仅在显式 input-probe feature 下可用,要求全新空目录。它会移动系统鼠标、激活自有测试窗口、使用 Ctrl+Alt+Shift+F21–F24 临时全局热键并改写系统剪贴板,应在空闲桌面运行。通过真实 SendInput、WM_HOTKEY 和 Slint 输入路径验证框选、点击打码工具与绘制、Ctrl+Z/重做、Enter 复制、剪贴板贴图、穿透确认、救援、隐藏/恢复、再次截图的隐藏/取消恢复以及标题栏关闭;全部复制像素与冻结原图加遮盖比较。仅配置准备、清理和退出使用应用回调;截图动作不预置输出路径。每次输入前核对 HWND 属于当前进程、前台归属、实际命中窗口、坐标范围、鼠标位置及按键状态;被遮挡或外部输入介入时停止,不向其他应用点击,清理本验证注入后尚未释放的按键。激活夹具只点击其未被遮挡的位置;贴图仍保持不抢焦点。保留真实采集区域、复制图和结果记录。普通构建拒绝该命令,不包含输入注入模块。此验证不是人手操作、托盘点击、系统文件对话框或多显示器/远程环境验收。

--m5-dialog-input-smoke 使用相同的显式 feature、空目录和实际截图输入,单独验证系统“另存为”:真实点击保存、Esc 取消后保留选区/打码/撤销历史、再次撤销/重做、重新打开保存框、输入含中文文件名的绝对路径并按 Enter 保存,逐像素检查 PNG,成功后才关闭浮层。系统模态框由独立 QA 输入线程操作,只接受本进程截图窗口直接拥有的前台标准对话框,输入文件名前检查 Edit 焦点。不会预设截图导出路径或替换系统对话框返回值。每次只能选择一种 QA 模式;运行时应保持桌面空闲。此项不覆盖覆盖确认、保存失败恢复、人手输入、托盘或跨环境验收。

设置确认弹窗打开时,底层设置控件暂停交互;Tab / Shift+Tab 在弹窗按钮内循环,初始焦点为取消或继续编辑,Esc 取消。恢复默认取消后焦点回到恢复默认按钮;设置页右上角无关闭按钮,Esc 或托盘单击即可回到托盘。快捷键录入保留专用按键捕获。--m5-input-smoke 在截图与贴图流程后,追加真实点击打开恢复默认和未保存离开弹窗、双向 Tab、Esc 与 Enter 取消验证,并比对草稿、已保存配置及磁盘字节。导入预览由回调打开,仅测试未选文件状态的取消;不代表已验证实际文件选择或合并确认。

贴图标题拖动使用 Windows 指针捕获与不激活的位置更新,点击通过 WM_MOUSEACTIVATE 明确保留原窗口焦点。--m5-input-smoke 追加真实标题拖动、锁定后禁止移动、加减缩放、滚轮缩放、Ctrl+滚轮透明度和菜单四次旋转验证,核对源像素及焦点;隔离测试关闭吸附,仍需物理手势、多屏混合 DPI 与系统恢复验收。

截图画布收到指针取消事件时,撤回对象移动/调整的临时预览,并丢弃尚未提交的绘制;已提交标注与撤销/重做历史保留。迟到的鼠标释放不会补交这次绘制。该路径已通过 Slint 取消事件与渲染检查,实际系统捕获丢失和设备切换仍需现场验收。

取色单击在有效源像素处按下、并在有效范围内释放后复制颜色;取消、仅释放或从范围外按下不会复制。独立取色成功后离开,截图内取色保留编辑;独立取色可用 Enter 确认,两种场景均可用 HEX/RGB 按钮复制。默认工具为取色时,先完成框选,再单击取色。

快捷键弹窗中,录入区获得焦点时捕获组合键;Tab / Shift+Tab 在录入区、取消、可用的清除与使用按钮之间循环,Enter 激活聚焦按钮,Esc 从任意位置取消。Ctrl+Tab 等带 Ctrl / Alt / Win 的 Tab 组合仍可录入。录入期间,本应用已注册的非救援热键进入候选校验,不直接启动截图等动作;救援保持可用。--m5-input-smoke 另外通过实际按键验证窗口截图绑定的录入与草稿确认、已注册重复组合、Ctrl+Tab、可选清除和救援绑定不可清除;后续重新打开弹窗使用回调。这不替代所有动作的录入、系统占用冲突或人手操作验收。

--m5-dialog-conflict-input-smoke 在同样的隔离条件下增加真实覆盖确认:检查默认焦点是取消,Enter 取消后保留文件和编辑;再次选择时,在确认框出现后修改隔离测试文件,再用真实按键确认,验证正式导出因文件已变化而失败,并保留文件、编辑和撤销历史;最后重新选择、确认并保存,逐像素检查最终 PNG。覆盖确认只接受本进程截图窗口直接拥有、标题匹配且按钮焦点符合预期的系统对话框。此项验证文件变化导致的发布失败与重试,不代表已验证磁盘满、权限不足或所有文件系统故障。

配置位于系统 RoamingAppData 下的 Glint/config.toml;可用 --config-dir <目录> 隔离运行。首次正常启动显示引导,完成或跳过后默认留在托盘。关闭设置隐藏窗口,托盘退出才结束进程。设置中可编辑的项目已连接对应配置与运行行为,包括快捷键、截图、工具条、标注、输出、贴图和外观等;未接入或明确延后的能力保持灰显,并展示实际限制。登录启动默认关闭,仅保存该选项变更时修改当前用户 Run 项,并与热键、配置保存一起回滚。单实例唤回与保存失败保留草稿已连接。

托盘“区域截图”或默认 Ctrl+Shift+S 已连接真实冻结桌面:框选、选区移动/边缘与角调整、标注与打码、撤销/重做、复制、PNG/JPEG 保存和取消在同一浮层完成,结束后继续常驻。启用窗口检测时,未框选前悬停高亮并单击选择窗口,拖动仍可手动框选;托盘或自定义“窗口截图”快捷键直接选中采样时指针下的窗口,检测失败允许手动框选。窗口列表与桌面一同冻结,使用可见桌面裁剪,不恢复被遮挡内容;窗口几何与像素采样并非原子操作。选区工具显示八个手柄和方向光标;标注跟随选区原点,缩小只裁剪显示,扩大可恢复。保存使用原生文件对话框,默认拒绝覆盖已有文件,也可设置自动编号或每次确认覆盖;失败保留编辑,可选择其他文件名重试。设置有未保存修改时,进入截图会先询问保存/放弃/继续编辑。浮层使用已保存的语言、主题、强调色和高对比边框,设置草稿不会泄漏到截图;工具条向选区上方避让、窄宽度换行,属性区保持可达。右键/Esc 取消;Ctrl+Z 撤销,Ctrl+Y 或 Ctrl+Shift+Z 重做。多屏/DPI、人工交互与故障环境的完整验收仍未完成,不能据此勾选 M2。

退出截图时先检查前台归属,再隐藏浮层:Glint 仍持有前台才尝试恢复此前窗口;用户已切换到其他应用时保留当前选择。已隐藏、最小化或失效的此前窗口不会被主动激活。恢复仍受 Windows 前台策略约束,不绕过系统限制。

托盘新增“全屏截图(所有屏幕)”与“当前屏幕截图”。前者选中冻结虚拟桌面的完整范围(含任务栏),后者选中采集时指针所在显示器的源像素范围;均可在浮层内继续调整、标注和导出,不经过工作台。两者遵守已保存的延迟、包含指针和隐藏贴图设置。指针或屏幕几何不可用时显示原因并回到手动框选;未保存设置提示与延迟取消均保留所选入口的语义。当前未为这两项新增独立热键。真实多屏、混合 DPI 与物理托盘操作仍待验收。

托盘“独立取色”及可选全局热键已接入(默认未绑定)。打开冻结桌面后显示 HEX/RGB 和像素放大镜,单击或 Enter 复制 HEX,按钮可复制 RGB;复制成功后才离开,失败保留当前取色可重试,Esc 取消。独立取色遵守已保存延迟与隐藏贴图设置,采样时不合成鼠标指针,不生成图片、自动副本或区域记忆;普通截图内的取色工具复制后仍留在编辑中。热键支持录入、清除与冲突回滚。

设置页整合为 8 个分类:常规与外观、快捷键、截图(含工具条编辑与标注默认值)、输出与保存、桌面贴图、历史与隐私、平台与资源、关于(含后续能力说明与配置导入导出);页内保留原小节标题与全部约束说明。“重新查看首次引导”保留在常规与外观页作为次级入口。

正常首次启动显示六步原生引导:语言与流程、快捷键、完成动作与隐私、外观、真实截图演练、完成。设置中的“重新查看首次引导”可再次打开。保存并演练或完成时才应用草稿与真实热键;冲突或写入失败保留修改和原可用绑定。演练跳过截图延迟,取消返回练习页,输出成功后返回完成页,失败保留浮层编辑;完成或“稍后设置”后收起托盘,并持久化已查看状态。未保存修改离开时可保存、放弃或继续编辑。显式 --settings、后台启动与配置恢复提示优先走原有入口;引导不提前申请录屏/麦克风权限。历史仍未接入,相关引导项灰显;减少动效可预览和保存。

关于页已接入 TOML 配置导入/导出预览。导出仅使用已保存快照,包含设置、快捷键、路径和隐私策略,不包含草稿、引导状态、截图/历史资产或系统授权;选择新文件,拒绝覆盖已有文件和应用自己的配置/恢复文件。导入接受不超过 256 KiB、版本为 1 的 UTF-8 TOML,可预览逐字段前后值与跳过项;无效或未知字段保持原值,快捷键冲突时保留原整组绑定。确认仅合并到当前草稿,保存设置时才执行系统注册和持久化;取消修改可恢复已保存配置。预览后草稿发生变化时必须重新预览。配置读写使用单个后台任务,取消后迟到的读取结果不会重新打开预览;已开始的导出写入不能撤销。只读恢复状态禁用导入/导出,未接入的配置项仍保持灰显,不因导入而宣称具备系统能力。原生文件选择器的物理操作仍待人工验收。

托盘“重复上次区域”及可自定义/清除的对应快捷键会重新采集当前桌面,恢复本次运行内最后一次成功输出的区域,不恢复旧标注。区域记忆可在截图设置关闭;保存关闭后立即清除,取消设置草稿不改变记忆。无成功记录、记忆关闭或显示布局/DPI 已变化时回到手动框选并显示原因。取消、输出失败和贴图再编辑不覆盖记录;几何与像素均不写入配置。

截图前延迟可设为 0–10 秒,默认 0。区域、窗口和重复区域入口遵守已保存的延迟,倒计时结束后才采集并冻结桌面;窗口截图在结束时检测指针下的目标。倒计时显示中英文、主题与强调色,Esc 或按钮取消;打开设置或退出也会停止等待,取消后不再执行已排队的采集。已有贴图在倒计时期间保持原状,真正采集时再按设置隐藏。贴图再编辑不等待截图延迟。多屏/DPI、锁屏/休眠/RDP 和物理输入仍待验收。

“包含鼠标指针”默认关闭,保存开启后将 Windows 采样时可见的真实指针按热点合成进冻结源图;透明颜色与单色反色由系统 GDI 处理,后续编辑鼠标不会移动已捕获的指针。复制、保存和贴图沿用这份源像素,指针不是可移除的标注对象。指针隐藏/被系统抑制时不添加;采样或合成失败会报告截图错误,可关闭选项后重试。桌面与指针并非原子采样;动画指针使用 DrawIconEx 的第 0 帧,不保证与屏幕瞬时动画一致。自定义系统指针、混合 DPI 与远程环境仍待实测。

截图显示设置已接入像素放大镜、选区尺寸/坐标开关和 20–80% 选区外遮罩强度。放大镜读取冻结原图的 11×11 像素,显示中心 HEX 和桌面坐标,避让工具条与顶部提示,空间不足时隐藏。仅随输入更新,相同源像素复用采样图,静止时不持续刷新;离开画布后隐藏。这些界面提示不写入导出图片。

截图工具条支持图标+文字/仅图标、名称提示、分组线和跟随/顶部/底部定位。仅图标模式下,键盘焦点也显示当前工具名称;Tab/Shift+Tab 遍历可用按钮,空格/Enter 执行聚焦动作,提示限制在浮层边界内。自绘按钮已提供名称与状态元数据,但当前构建未启用屏幕阅读器桥接,不能据此视为读屏支持。右键工具条或点自定义,可勾选显示、拖动/按钮排序、隐藏至更多;选区、取消、复制与自定义入口保留。应用仅持久化工具条字段,失败保留草稿可重试;应用、取消与恢复默认均保留截图选区与标注。设置页与浮层共用工具条编辑器,支持显示模式、定位、分组线、显示勾选、排序和即时外观预览。设置页修改先留在草稿,保存后影响下次截图;取消会恢复已保存的外观和顺序。预览区的恢复默认仅重置工具条,不改动其他设置草稿。

浮层中的自定义与更多工具弹窗打开后先聚焦取消,Tab/Shift+Tab 只遍历弹窗内可用控件,背景画布与属性控件不参与导航。Enter 执行聚焦动作,Esc 关闭弹窗;取消、应用或选择隐藏工具后回到画布,保留选区和标注。

输出设置已接入 PNG/JPEG、JPEG 质量、初始保存目录和 {date} / {time} / {width} / {height} 文件名模板。目录留空使用系统图片目录下的 Glint。Enter/双击使用已保存的“复制”或“另存为”动作,工具条显式复制/保存保持独立。实际输出格式按最终文件扩展名确定;目录准备、合成与编码在有界后台任务中完成,JPEG 透明区域合成到白底,输出只包含合成像素。取消保存或输出失败保留编辑,手动保存按已保存的重名策略处理。

额外自动保存默认关闭,开启后先写文件副本,再完成复制或手动保存;副本重名自动编号。副本已写入但复制失败时显示保存位置,保留选区和标注;未修改的重试复用本次副本,修改图像后重新输出。自动目录失败时可明确选择“改为另存为(不写自动副本)”,仅跳过本次副本,不改变已保存设置。设置页复选框使用原生控件并同步取消后的状态。可配置完成反馈与手动重名策略已接入;原生保存对话框的物理操作仍待人工验证。

截图可直接生成独立桌面贴图;Enter/双击也可配置为“复制并贴图”,在真实剪贴板写入成功后创建贴图,窗口准备成功后才关闭浮层,失败保留编辑。支持多张贴图、标题栏拖动、缩放、不透明度、位置锁定、置顶、单张关闭/隐藏,以及托盘或自定义快捷键隐藏/恢复全部和救援。截图时按已保存设置隐藏已有贴图,结束或取消后恢复原先可见的贴图。设置可保存初始缩放/透明度/置顶、截图时隐藏及贴图内存预算;预算按源图和渲染面估算,拒绝创建/放大时保留已有贴图,不代表实测进程内存上限。贴图菜单支持顺时针 90° 无损旋转,后台生成预览,复制/保存采用当前方向的原始像素,不包含窗口缩放与透明度。会话恢复仍待连接。

贴图支持拖动结束时吸附到屏幕工作区或可见顶层窗口边缘,距离为 12 个逻辑像素,选择最近边缘;可在设置中关闭,位置锁定时不吸附,不自动贴边隐藏。Windows 显示器、工作区或 DPI 变化通知会重新适配布局并找回越界位置,保留隐藏、置顶、透明度、锁定与穿透状态;忙碌时先找回位置,完成后再调整布局。处理依赖消息通知,不持续轮询。已验证本机真实窗口与注入的原生消息;物理拖动、多屏拔插及混合 DPI 尚未验收。

托盘“贴出剪贴板图像”或默认 Ctrl+Shift+P 可在后台读取真实剪贴板图像并创建独立贴图;支持自定义或清除此绑定。只处理一个读取/创建请求,成功不抢焦点;无图像、剪贴板占用或预算不足时显示真实错误,保留已有贴图,可重新复制图像后重试。不自动保存剪贴板图像或开启历史。设置页下拉框也会同步取消/配置变更后的实际选项。

贴图图像区支持滚轮缩放、Ctrl + 滚轮调透明度,也可在设置中交换两者;保存后更新已有贴图,草稿及取消不影响已生效映射。每步缩放 25 个百分点、透明度 5 个百分点,细增量逐步累积;缩放受屏幕布局与 1–200% 范围限制,透明度为 20–100%。位置锁定不影响滚轮,菜单与错误详情独立滚动;缩放超预算保留原尺寸,可减小或调整预算后重试。只改变显示,复制/保存仍使用原始像素。

贴图菜单“原地继续标注”可重新打开选区原图、独立标注对象和撤销/重做历史,不经过工作台,也不重新截取桌面。编辑使用原图方向与固定图像范围;“应用”替换当前贴图并保留其旋转、位置、锁定、置顶、缩放和透明度。复制/保存只输出当前编辑画布,不更改原贴图;取消恢复原贴图。预算或输出失败时保留编辑,可重试;取消后返回的后台结果不能再应用。原图和对象仅存内存并计入贴图预算,不保留选区外桌面像素,不写入配置或历史;导出仍只有合成像素。剪贴板图像也可进入同一编辑流程,其原有像素没有可移除的标注对象。

贴图菜单支持复制及 PNG/JPEG 保存,输出原始图像像素,排除窗口显示缩放、透明度和控件。文件名模板、初始目录与 JPEG 质量使用已保存设置;耗时操作在后台,并与截图共享输出任务限额。成功或取消均保留贴图,复制失败可重试;目录/文件失败可另选位置,不改变设置、不覆盖已有文件。小贴图使用可滚动的不透明错误详情层;保存成功可点状态区查看路径。系统保存对话框的物理操作仍待验证。

贴图菜单可开启鼠标穿透,先确认已保存的救援快捷键与托盘入口;原生会核对热键线程中的实际注册,救援不可用或确认期间失效时拒绝开启。“新贴图默认穿透”也先逐张确认,取消保留可点击窗口。托盘或救援热键可显示并找回全部贴图、取消穿透;热键服务失效时主动取消穿透。截图中失效会继续隐藏贴图并保留当前编辑,结束或取消后恢复可点击贴图。真实 Windows 命中测试已在本机通过,物理鼠标/托盘/热键、多屏及 Explorer 重启仍待验收。

原生浮层另已接入空心矩形、实心/开放箭头和半透明高亮。矩形/箭头使用当前颜色与线宽,高亮使用当前颜色及 45% 不透明度;高亮不遮蔽敏感内容。箭头样式可在“标注与打码”设置中保存,影响下一次截图中新建的箭头。这些对象支持连续撤销/重做,并随选区原点移动和裁剪。

浮层取色器读取选区内的冻结原图像素,不包含遮罩或标注,显示 HEX/RGB 与桌面坐标;单击复制 HEX,也可分别复制 HEX/RGB。复制使用后台任务,成功后保留编辑;剪贴板占用时显示真实错误,释放占用后可重试。它不会修改标注颜色。独立取色可从托盘或用户配置的全局快捷键进入,默认未绑定快捷键;独立取色复制成功后退出浮层。

像素化工具以 16 px 方块平均实际画面,按对象顺序处理已合成的底图与标注,不会把已有实心遮盖替换回原图。选区移动后按新底图重新计算,支持撤销/重做,复制和 PNG 使用与预览一致的合成路径。像素化仅作视觉处理,不保证保密;敏感内容应使用实心遮盖。方块大小固定,作用区域可通过对象手柄调整。

文字工具支持选区内单击输入单行文字、当前颜色与 12–48 px 字号,Enter/放置确认,Esc/取消文字保留截图。字体和默认字号可在设置中保存,当前输入框也可修改字体名称;字体不可用时保留输入并允许修正后重试。字形由 Windows 系统字体在后台生成,预览、撤销/重做与合成输出共享结果,不打包系统字体。选中已有文字后可原地重编内容、字体、字号与颜色,确认替换对象,取消或失败保留原对象;纯颜色修改复用字形。当前最多 80 字符,系统字体列表及物理输入法组合流程尚未验收。

选择工具可单击最上层标注,拖动实时移动,Delete 或“删除标注”移除;支持撤销/重做并恢复原有叠放顺序。矩形、遮盖、高亮与像素化有八个尺寸手柄,箭头可调整两个端点,笔迹可缩放路径并保持线宽;纯水平/垂直笔迹只显示适用的两个手柄,单点通过线宽调整大小。一次对象拖动对应一步撤销,交叉时不翻转对象。空白处移动选区;已有对象的可见手柄优先,再次点击“选区”工具可取消对象选择并调整截图边缘。属性区支持六色、适用对象的 1–12 px 线宽、实心/开放箭头;单次确认属性变化对应一步撤销。文字通过字号重编调整大小,移动时复用字形;编辑早期对象会刷新后续像素化的依赖区域。

以下是独立的 Windows GDI + Slint software 技术探针:

# 真实冻结桌面;拖动框选、实心遮盖、撤销/重做、复制、PNG 输出
cargo run -p glint-app --features native-shell -- --m0-overlay screenshot.png
# 原生渲染与像素一致性检查,输出本地验证截图并退出
cargo run -p glint-app --features native-shell -- --m0-smoke overlay-check.png
# 使用明确生成的 3840×2160 测试图验证软件渲染,不代表真实 4K 采集
cargo run -p glint-app --features native-shell -- --m0-4k-smoke overlay-4k-check.png
# 生成 4K 图上的画笔增量预览、导出一致性及撤销/重做,输出 PNG 和计时 JSON
cargo run --release -p glint-app --features native-shell -- --m0-brush-smoke brush-check.png 600
# 生成 4K 图上的像素化增量预览、导出一致性和撤销/重做,输出 PNG 与计时 JSON
cargo run --release -p glint-app --features native-shell -- --m0-pixelation-smoke pixelation-check.png 60
# 显示器坐标 / DPI / 远程会话及连续采集后的 GDI / USER 资源释放,不写截图文件
cargo run --release -p glint-app --features native-shell -- --m0-environment 128
# 透明贴图、托盘与救援验证;省略图片路径时使用一次真实桌面采集
cargo run -p glint-app --features native-shell -- --m0-pin
# 合成像素、穿透/救援、屏外找回、不抢焦点和隐藏恢复的自动探针
cargo run -p glint-app --features native-shell -- --m0-pin-smoke pin-check.png
# 临时制造救援热键冲突,核对错误可见且穿透被禁用
cargo run -p glint-app --features native-shell -- --m0-pin-conflict-smoke pin-conflict-check.png
# 实际 Windows 热键注册、冲突回滚、动作交换及释放检查
cargo test -p glint-platform real_registration -- --ignored --nocapture
# 临时显示非激活窗口,验证窗口层次、透明过滤、隐藏/最小化和采集排除
cargo test -p glint-platform real_window_order -- --ignored --nocapture
# 临时显示置顶夹具、向其发送一次受保护的自动点击并更改系统光标,核对真实采集包含/排除像素;单独串行运行
cargo test -p glint-platform actual_desktop_cursor_option -- --ignored --test-threads=1 --nocapture

这是独立技术探针,不是正式常驻入口。浮层 PNG 输出在工作线程完成,拒绝覆盖已有文件;失败保留编辑。未指定输出路径时可复制,保存按钮说明所缺参数。贴图探针支持一张贴图、标题栏拖动、缩放、不透明度、锁定位置、置顶、隐藏、穿透前确认及托盘救援;Ctrl+Alt+Esc 救援,Ctrl+Shift+H 隐藏/恢复。热键冲突时展示错误并禁用穿透。退出需从托盘菜单选择“退出 M0 验证”,隐藏窗口继续运行消息循环。

浮层探针另支持圆头画笔、六色与 2/3/5/8 像素线宽;以源像素网格分块更新标注,撤销只保存对象。画笔探针测量程序回调到重绘完成的时间,不能代替物理输入延迟或真实 4K 屏幕采集验收。

M1 配置基础已接入原生设置:版本化 TOML、原型默认值、草稿预览/取消/恢复默认/未保存离开提示;同目录临时文件、可靠替换、备份与损坏原件保留。损坏配置仅在明确保存后修复,未来版本只读保护。可编辑设置不代表完整产品能力;只读项按说明展示固定行为或尚未接入的配置值。

Windows 排除程序列表已接入桌面采集:填写完整 .exe 文件名(最多 128 项,以英文分号、逗号或换行分隔,不接受路径/通配符),保存后按顶层窗口所属进程文件名进行序数忽略大小写匹配。采集前后各检查一次;未隐藏、未最小化且与屏幕相交的窗口命中列表,或检查无法完成时,拒绝整次截图。被遮挡/透明/其他虚拟桌面的窗口也可能导致拒绝;最小化或关闭目标窗口后重试。仅跳过本进程已知的不绘制内容的 Winit 事件窗口。宿主窗口按宿主进程名匹配,不识别子窗口背后的其他应用身份;两次检查不能覆盖间隙出现的内容,不提供原子或持续隐私保护,也不从已采集图像中移除其他程序像素。本地图片、贴图再编辑与剪贴板贴图不经过桌面检查。旧配置中的无效列表保留,其他设置可继续保存,但桌面采集会提示修正或清空列表;新编辑保存和新导入的列表执行格式校验。

单实例、关闭设置回托盘、完成前保留可编辑对象、导出不复制原文件元数据、静止时不持续刷新是首版固定行为。对应控件显示实际开启状态及说明;导入或旧配置中的关闭值暂不生效,会保留用于配置往返,不因查看或保存其他选项而自动改写。尚未接入的其他功能仍单独说明。

截图浮层、贴图与倒计时采用创建时已保存的主题。选择“跟随系统”时,已有窗口按系统深浅色事件更新;手动主题不跟随,设置草稿不会改变已有窗口。主题与 DPI 共用窗口事件过滤器,不轮询系统主题,不重采集桌面或改动源图、标注、文字草稿和贴图位置。真实操作系统主题切换仍需现场验收,自动验证向同一事件适配器注入主题事件。

托盘“辅助工作台”可打开真实本地 PNG/JPEG,在独立浮层中标注、撤销重做、复制、另存或生成新贴图。取消或输出成功后回到桌面;读取失败留在工作台可重新选择,输出失败保留当前编辑。文件读取/解码在后台执行,文件与解码后 RGBA 各限 64 MiB、画布限 128 MiB;打开不覆盖原文件,不采集桌面,不应用截图延迟,也不改写上次截图区域。该入口不提供尚未实现的历史浏览。

滚动长截图与屏幕录制已实现基本功能(用户确认转正)。对照飞书《录屏和滚动截图》官方布局:框选后从"滚动长截图"入口或默认快捷键 Ctrl+Shift+L 启动,滚动采集期间选区保留不透明强调色边框,右侧为白色实时拼接预览卡片(强制浅色、随拼接滚动到最新、首帧前显示加载态),选区正下方为操作条(自动滚动 / 结束采集 / 编辑 / 保存 / 取消 / 复制 + 状态文字),其中编辑、保存、复制在滚动中点击即结束采集并执行对应输出;选区外桌面轻度暗化,面板与操作条位于蒙层之上。滚轮触发立即首帧后按 110ms 突发连续采样,连续两帧无变化自动收尾,550ms 静止防抖兜底;拼接采用游标 + 位置模型:向上、向下、往返滚动均以"最近视口所在帧"为对齐锚点,回看已采集内容自动跳过,新内容按位置插入长条(含中部插入与撤销恢复)。匹配不确定的片段保留,预览面板提供接缝调整与撤销;"继续采集"回到实时预览。录屏支持区域/屏幕/窗口、MP4/GIF、指针与音频选项,编码面 16 对齐(边缘像素延续)避免绿色填充边。仍在待验收清单:4K 长图编辑、混合 DPI 与多屏、长时常驻资源占用、物理滚轮/触控板与第三方页面的拼接质量。M6 保持未完成。

仍未实现窗口子元素检测、完整贴图能力与输出策略。系统合成像素、窗口几何过滤、命中测试和部分双语设置已在本机验证,但真实登录启动、托盘点击、物理热键、鼠标拖动以及混合 DPI、多屏负坐标、RDP、HDR 与受保护内容尚未验收。逐像素透明窗口的可见形状尚未识别,按矩形边界处理。默认无 feature 的启动只打印说明;OCR 依赖尚未引入;手动长截图使用现有图像依赖,Windows 录屏接入 Windows Graphics Capture 与系统 Media Foundation,真实环境待手动验收。

桌面贴图设置可主动开启“重启后恢复贴图”(默认关闭,独立于历史)。正常从托盘退出时,后台将原图、当前标注和窗口状态保存到配置目录的 pins.session,上限 256 MiB;原图包含被遮盖内容,文件未加密。恢复后可继续编辑,窗口可见且不穿透;不保存旧撤销历史。崩溃或强制结束仅保留上次成功会话。关闭并保存设置会清理会话;也可单独确认删除,保留当前贴图与导出文件。保存失败保留当前贴图并提供重试或明确不保存退出;恢复失败或配置损坏时保留原资产,不自动覆盖。

标注设置已接入默认工具、1–12 px 线宽、HEX 标注色及优先打码方式,保存后用于下一次截图或图片编辑。默认工具为“打码”时使用优先方式,工具条上的实心遮盖和像素化仍可分别选择;标注颜色不改变实心遮盖的不透明深色。自定义颜色会出现在浮层色块中,当前浮层的临时调整不会改写全局默认值。

完成反馈已接入轻提示、不提示与 Windows 系统通知,适用于截图输出、独立取色、剪贴板贴图与贴图输出。只在真实操作成功后提示;取消静默,失败仍保留当前任务和重试入口。轻提示三秒后关闭;系统通知只发送通用完成文案,不含图片、正文或路径。通知提交失败回退轻提示;API 接受不代表 Windows 已展示,发送方安装与实际通知展示仍需发布验收。

界面缩放支持跟随当前屏幕 DPI,以及以 96 DPI 为基准的 100%/125%/150%/175%。设置草稿即时预览,取消或确认恢复默认会还原比例;保存后用于新截图/图片编辑、贴图、倒计时和完成提示。已有贴图保留当前显示,图像缩放与界面缩放独立;导出仍使用源像素。窄设置窗口采用上下排列并可滚动。实际多屏混合 DPI 仍需实机验收。

HTML 已补齐减少动效的交互规格:默认开启,控件颜色立即切换;关闭时使用 150ms 颜色过渡。设置与首次引导即时预览草稿,取消还原,保存后持久化;不改变选区拖动、绘制和倒计时。原生已接入所用 Fluent 控件的动效控制,开启时立即显示目标状态,包括正在过渡的控件;已有贴图保留原有偏好。系统窗口转场使用 DWM 写入接口,实际系统视觉效果仍需物理验收。

截图期间全局热键服务失效时,浮层保留独立错误提示;鼠标移动、框选、标注和撤销不会擦掉提示,也不会关闭编辑。成功重新注册热键后才清除该提示;取消截图仍恢复可交互的贴图。

编辑预览预算支持 64–512 MiB(默认 128 MiB),保存后用于新截图、本地图片和贴图再编辑的标注像素分块;已有编辑保留当前预算,重新框选不会重置预算。超限时保留源图、对象与原有预览,暂停输出,可通过撤销或重新框选恢复。预算按完整 RGBA 分块保守计数,不包含源图、导出、临时栅格缓冲或渲染器缓存,不代表进程总内存上限。

Windows 常驻现已订阅当前会话锁定/解锁、连接/断开及休眠/恢复通知。默认“锁屏 / 休眠时释放捕获资源”会结束未完成截图并停止倒计时;关闭后隐藏并保留已有编辑,待所有暂停状态解除后显示。运行中的采集返回后丢弃结果,不自动重放截图;进行中的导出仍可能完成。事件映射和原生协调器已验证,真实锁屏、休眠、RDP 与恢复后的物理焦点仍待现场验收。

“平台与权限”现提供按需刷新的只读运行诊断:分别标明 Slint software 界面渲染与 GDI 截图后端,显示真实显示器边界、工作区、DPI、远程会话及进程内存、句柄、GDI/USER 对象和累计 CPU 时间。一次只运行一个后台查询;失败保留已有快照,可重试,关闭设置不会被结果重新打开。诊断不读取截图、窗口标题或剪贴板,不保存或上传;单次快照不代表峰值、空闲占用或环境兼容性验收。

“历史与隐私”的诊断日志默认关闭,保存开关后生效。采集采用 tracing 0.1.44 与 tracing-subscriber 0.3.23,仅接收 Glint 白名单事件,忽略第三方依赖及任意文本字段;file-rotate 0.8.0 负责轮转。记录事件发生时的 Unix 毫秒时间、进程号、线程号和固定代码:应用启动、窗口焦点变化、快捷键触发、截图与长截图阶段、系统锁屏/睡眠、设置保存、失败及正常退出。在焦点切换时只读记录本线程鼠标捕获及光标范围受限与否,不轮询、不采集鼠标坐标,不修改输入状态。不记录具体按键、截图像素、标注/剪贴板正文、路径、窗口标题、配置值或原始错误/崩溃正文。

日志位于配置目录的 logs:Windows 默认 %APPDATA%\Glint\logs\events.log。在“历史与隐私 → 日志”中配置等级(Error/Warn/Info/Debug/Trace,默认 Info)、单文件大小(64–16384 KiB,默认 512)及轮转备份份数(0–20,默认 1,不含当前文件),支持草稿、保存、取消与恢复默认。选择的等级包含更严重的事件;Debug 增加阶段信息,Trace 增加只读输入状态。保存后生效,日志行包含实际等级。当前 events.log 加上 events.log.1、events.log.2 等备份,总份数为备份数加一,默认共 2 份;0 备份表示仅保留当前文件。按大小轮转且不拆分事件行;新大小用于后续写入,不截断已存在的日志,旧备份可能暂时超过新上限。降低备份份数时,日志开启则在后台清理多余备份,关闭则下次启用写入时清理。只使用 logs,不迁移或清理旧目录及旧文件名。

独立线程通过最多 64 项队列写盘,满队列丢弃而不阻塞 UI,丢弃数量和失败可在设置中查看。退出排空队列;关闭停止接收并丢弃尚未处理的旧队列事件,已开始的写盘可能完成。清理只删除 logs 中的当前日志和受管理轮转备份,不改变配置、当前编辑或贴图会话。日志不等于完整审计、系统输入跟踪或崩溃转储;强制结束进程可能丢失队列中的最后几条事件。

当前工作区的 RustRover Glint 运行配置已设置 GLINT_DIAGNOSTICS=1,临时开启本次日志,便于排查启动和 Alt+Tab 问题(.run/ 是本地忽略目录;其他工作区需自行设置该环境变量)。设置页显示开发覆盖状态,保存关闭开关不会停掉本次强制采集。需要关闭时,移除该环境变量并重启应用,恢复使用已保存的开关。该覆盖不写入用户配置。普通启动且未启用日志时,不创建日志目录或日志线程。日志初始化在单实例确认后、设置窗口显示前;字体初始化、窗口后端创建及单实例获取之前的故障仍通过启动错误反馈。

文字标注和“标注与打码”设置提供本机系统字体选择器,可按名称搜索,也可继续手动输入。字体列表按需在后台读取,选择只更新当前草稿;取消选择器保留输入文字、选区和已有标注。设置仍需保存后用于新编辑;文字放置时才生成实际字形,字体覆盖与回退由系统决定。取消后的迟到查询结果不会重新打开窗口。

输出设置提供 Windows 原生目录选择器,也可手动输入路径。选择只更新草稿,保存设置后生效;取消或失败保留原目录,关闭设置会取消选择。文件名预览使用与导出相同的模板计算,明确标注示例日期、时间和尺寸,随格式切换 PNG/JPEG 扩展名;预览与选择本身不创建应用目录或文件。真实 COM 对话框打开与程序取消已验证,物理选择目录仍待人工验收。

手动保存重名策略适用于截图、本地图片编辑和贴图:默认保留已有文件并报错,也可选择自动编号或每次确认覆盖。自动副本始终编号。覆盖会先询问,再在后台完整编码并同步同目录临时文件,通过 Windows 替换接口发布;文件身份、大小或修改时间已变化时要求重新选择,文件被占用时保留编辑可重试。普通成功/失败不生成旧图备份,进程异常中止可能遗留临时文件。真实确认框取消与确认返回已通过定向消息测试,物理选择与点击仍待人工验收。

Windows 开发包可使用 Python 3.11+ 执行 python tools/package_windows.py --output .local/distribution/windows-dev-01 生成,输出目录必须不存在。脚本不修改用户配置,不提交 Git;先复制项目源码、标准 Cargo vendoring 和许可材料,再从该副本执行 --frozen Release 构建,生成包含可执行文件、对应源码 ZIP、依赖清单及 SHA-256 的开发包。构建需要 Rust、MSVC C++ 构建工具与 Windows SDK,收集 Rust 标准库版权材料还需匹配工具链的 rust-docs。源码内固定实际编译器版本;这是可重复执行的构建流程,不承诺跨 SDK 的二进制逐字节一致。

开发包解压后运行 glint-app.exe,设置仍使用正常 AppData 目录;隔离体验可用 --settings --config-dir <新目录>。运行需 Windows x64 和 Microsoft Visual C++ 2015–2022 Redistributable(x64);包内不复制系统 DLL。未提供安装器、签名或自动更新,也未完成干净机器、物理输入、混合 DPI / 多屏和长期资源验收,不能当作首版发布包。打包器自身的验证命令为 python -m unittest discover -s tools -p test_package_windows.py。

开源许可

Glint 自有代码与 HTML 原型采用 GNU GPL v3.0 only(GPL-3.0-only)。允许使用、修改、再分发和商业收费;分发应用时须遵守 GPLv3,包括提供对应源码及保留许可声明。软件不提供担保。

Slint 1.18.1 在本项目中选择其 GPL-3.0-only 许可路径。第三方依赖仍遵循各自许可,不因 Glint 的许可而改变。来源及分发说明见 第三方许可说明。

Shared UI components

Shared native controls, settings cards, shortcut recording, font and toolbar editors, plus theme and motion policies live in glint-ui. The application supplies copy, state and system effects; the component crate stays independent of business configuration and platform integration.

Windows 录屏

托盘“录屏…”或设置“截图增强与后续能力 → 打开录屏…”进入。屏幕/窗口从列表选择,支持刷新;区域录屏从截图框选后“更多工具 → 录制此区域”进入,选区须位于单个显示器内且无批注。MP4 可选 15/30/60/120/144 FPS,并可录制指针、系统声音与麦克风(声音默认关闭);GIF 可选 15/30 FPS。设置保存目录后倒计时 3 秒开始。可暂停/继续、停止并保存、放弃录制。关闭控制窗口会停止并保存;正常退出会等待编码收尾,失败保留控制窗口和错误。锁屏、断开会话或休眠请求停止,不自动恢复录屏。120/144 FPS 是编码目标值,实际帧率受显示器刷新率、Windows Graphics Capture 回调、编码器和系统负载影响,队列溢出会计入丢帧。

Windows Graphics Capture 在独立采集线程提交到最多三帧的队列;编码线程直接调用 Media Foundation H.264/AAC Sink Writer,未使用 windows-capture 的无界编码通道。H.264 按 16 对齐宏块编码:不足 16 的尺寸会把填充区留在编码面里,个别播放器忽略裁剪元数据时会显示为绿色边缘。录制帧在送入编码器前向右/下以自身边缘像素延续到 16 对齐尺寸,因此编码面无未定义区域,录制的 MP4 尺寸为对齐后大小(每边至多多 15 像素边缘延续)。静态画面在编码端复用最新帧;声音经独立 WASAPI 线程获取默认设备的 48 kHz 双声道 PCM,系统声音和麦克风按共同时间轴混音,暂停不计入时长。队列溢出计数展示在控制窗口,不静默宣称无丢帧。排除程序策略在视频帧读取前后检查,音频不是按程序隔离采集;有排除命中时整次录屏停止。

MP4 输出先写 Glint-<唯一编号>.recording.mp4,GIF 写 .recording.gif;停止且编码成功后发布为正式文件,不覆盖已有文件。取消成功才删除本次临时文件。采集/编码/保存失败显示真实错误及已创建临时文件路径,该文件可能尚不可播放,并非断电恢复保证。奇数边长 MP4 编码时裁去最右/下方一个像素,以满足 H.264 偶数尺寸。GIF 限制为 30 FPS、30 秒、最长边 1280 像素且无音频;画面按 GIF 格式量化为每帧最多 256 色,渐变/细节可能失真,连续帧文件体积也可能很大。超长录制会在 30 秒自动结束。

MP4 依赖 Windows Graphics Capture / D3D11 和可用的系统 H.264/AAC 编码器;GIF 使用内置 GIF 编码器。录屏不提供 GDI 回退。Windows N 缺少媒体组件、RDP、无 3D 环境、混合 DPI、设备切换、HDR 和受保护内容尚未实测。控制窗口设置排除捕获,失败会拒绝启动;不改鼠标范围、不安装输入钩子。录后裁剪/批注/重新导出及 macOS/Linux 录屏尚未实现。这里只完成实现及静态检查,M8 仍未验收。

About

拾光 · Glint — Rust + Slint native screenshot tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages