Skip to content

Latest commit

 

History

41 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pancake

面向教室大屏与触控设备的 Windows 班级作业看板。

Platform .NET WinUI

Pancake 将时间、日期、天气、教室噪音和各科作业集中在一块适合远距离阅读的深色看板中。它使用 WinUI 3 构建,支持鼠标、触控笔与触摸操作,并为教室大屏提供默认全屏展示。

✨ 功能

  • 大屏展示:实时显示时钟、日期、天气、噪音水平与今日作业。
  • 看板编辑:新增、重命名、移动、缩放和删除科目磁贴。
  • 布局模式:分屏、仅作业、仅时钟和自由布局;分屏可拖动分隔条调整两区大小,拖至两端进入单区;仅作业与仅时钟会把分隔条留在屏幕边缘,可随时拖回分屏。
  • 网格布局:磁贴默认吸附到 48 px 网格,设置中可调整网格大小;无限作业板支持滚动、平移和缩放,靠近画布边缘时继续扩展。
  • 对齐辅助:关闭网格时,拖动磁贴会吸附作业区域中轴以及其他磁贴的边缘、中心线,并显示辅助线;导出排版也使用同一规则。
  • 项目管理:顶栏在查看和编辑模式下均可切换最近项目;项目名后显示科目数量,文件菜单支持新建、重命名、删除、导入、保存和图片导出。
  • 作业文件:将布局、配色、富文本、图片和可编辑笔迹打包为 .pch,导入后可以继续修改并保存回原文件。
  • 作业内容:在磁贴内直接编辑,支持字体、加粗、斜体、下划线、文字颜色和高光,并可添加图片。
  • 图片附件:图片框按原图比例显示;点击图片后显示选中框及下方的裁切、旋转控件,拖动中央移动图片,拖动四角等比缩放。
  • 手写标注:编辑页底栏第一个图标开启全局画笔,弹出的画笔栏提供颜色、细/中/粗三档圆点粗细预设、橡皮擦及按磁贴或全部清空;缩放磁贴不会缩放已有笔迹。仅时钟模式下画笔可以写在屏幕任意位置,笔迹随项目保存并一起进入 .pch 作业包,清空按钮可只清时钟区域,也可连同全部磁贴一起清空。
  • 图片导出:支持常用比例和自定义尺寸,可调整背景、色系、标题、磁贴位置和等比缩放,输出不含时钟与编辑工具的 PNG。
  • 磁贴主题:每个科目可独立更换主题色。
  • 自动填充:设置中的「自动填充」可按学科补全磁贴标题(支持中文、全拼与首字母,采纳后同时套用学科颜色,学科可开启随机配色,每次采纳都从预设色里随机取一个),并按学科范围补全常输入的作业名称,两个补全默认关闭。
  • 编辑保护:进入编辑前创建快照,底栏倒数第二个按钮放弃修改并先询问确认,最后一个按钮保存本轮修改。
  • 噪音检测:通过麦克风实时估算环境音量,支持检测间隔、输入设备、吵闹阈值、提示音音量和目标音量校准。
  • 天气信息:按小米天气接口文档读取当前温度和天气状态,内置 2566 个可按名称搜索的地区。
  • 本地数据:所有项目持续自动保存到可执行文件旁的 data 目录,加入项目的图片会复制到对应项目资源目录。
  • 内置字体:界面与新文字默认使用 HarmonyOS Sans,功能图标使用随程序分发的 Fluent System Icons。
  • 自动更新:默认从 GitHub Release 检查更新,也可选择 Gitee;支持 ZIP、7z 与分卷更新包,确认后保存项目、校验解压、退出覆盖并重新启动,保留项目和软件配置,覆盖失败会尝试恢复旧文件。
  • 显示设置:支持深色、浅色和跟随系统主题,以及全屏和窗口模式。
  • 自适应布局:窄窗口下自动切换为上下排列。

🖥️ 使用方式

程序默认以全屏展示模式启动。查看模式下,浮动工具栏按编辑看板、设置、全屏切换排列;编辑模式仍以画笔开头、放弃和保存结尾。工具栏默认位于底部居中,可在外观设置中调整位置、大小、圆角、边距和按钮名称显示。

编辑模式下,控制窗旁边会多出两块悬浮岛:一侧是当前作业的富文本工具(打开画笔时换成画笔控件),另一侧是作业板缩放控件(缩小、当前比例、连续缩放滑条、放大;拖动滑条连续调整比例,点击比例回到 100%)。缩放控件固定在控制窗右侧,编辑工具占用相对的另一侧;控制窗设为左右居中竖置时,编辑工具改到控制窗上方、缩放控件改到下方。悬浮岛与控制窗等高(竖版控制窗下与它等宽),圆角、背景、毛玻璃、大小缩放和无字模式都跟随控制窗设置,看起来是同一套控制面板;关闭无字模式后,悬浮岛按钮的名称显示在图标下方。缩放控件只在编辑模式出现,查看模式不再占用屏幕,但缩放结果继续生效;分屏、仅作业和自由布局都可以用缩放控件,仅时钟模式没有作业板,缩放控件自动隐藏。竖版控制窗上下空间不够时先上下挪动控制窗让位,浮岛保持完整尺寸,不会缩成需要上下翻页的一条;连挪动都放不下才退回控制窗左右两侧。竖版控制窗只有一列按钮宽,字体选择框会收成字体图标,点一下在浮窗里显示完整的选择框(横版控制窗仍是工具条里的内联输入框),选完自动收起。

在“外观 → 控制窗”和“外观 → 磁贴”中,可以分别设置背景颜色与背景颜色透明度(0% 不透明,100% 完全透明,默认 20%)。控制窗设置同时应用于画笔栏。透明度只影响颜色层,不影响文字、按钮、背景媒体和模糊强度。“清除背景颜色”移除颜色层,保留已开启的毛玻璃效果;“恢复主题背景色”重新使用当前主题色并保留所设透明度。清除后也可以在选色器中点击“应用颜色”重新应用同一种颜色。这些设置会自动保存。

查看和编辑模式下,左上角都会显示当前项目与文件菜单。进入编辑模式后可以:

  1. 拖动磁贴顶部来移动磁贴;关闭网格后,靠近作业板中轴或其他磁贴对齐位置时会自动吸附并显示蓝色辅助线。
  2. 拖动四条边或四个角来调整磁贴大小,或点击底栏自动排列图标整理全部磁贴。
  3. 直接修改科目名和作业文字,或添加图片;点击图片后可拖动中央移动、拖动四角等比缩放,并可裁切、旋转、复位和删除。
  4. 点击作业文字,控制窗左侧的富文本悬浮岛会显示字体、加粗、斜体、下划线、文字颜色和高光;有选区时只修改选区,没有选区时设置后续输入格式。
  5. 点击底栏第一个画笔图标后在任意磁贴书写;一笔归属起笔磁贴,越界部分不会落笔,弹出的画笔栏统一切换画笔、橡皮擦、颜色和粗细,并占用富文本悬浮岛的位置;当前选中的颜色以白框和右上角勾选标记显示,粗细则用从小到大三个圆点表示细、中、粗,选中档位以强调色描边和实心圆点标记。
  6. 从文件菜单创建或切换项目、导入或保存 .pch,也可以进入图片排版页导出 PNG。
  7. 使用底栏最后一个按钮完成并保存编辑;倒数第二个按钮会在确认后放弃本轮全部修改。

新建项目时,“重置作业”会保留当前科目、布局和配色并清空全部内容;“重置作业和科目布局”会创建空白项目。项目默认按创建日期命名,同一天继续新建时会自动追加序号。

“保存”首次要求选择 .pch 位置,之后更新同一文件;“导出”直接打开图片排版页。项目切换或导入时,若项目记录的主题、色系与当前软件不同,可以分别选择是否应用。

“布局 → 自动布局”提供吸附到网格(与编辑工具栏的吸附按钮是同一个开关,两边状态实时同步)、磁贴最小间隔(默认 0)、自动对齐和自动调整磁贴大小(后两项默认开启)。自动排列先把一行从左到右排满,再换到下一行;内容过宽的磁贴会按列宽收窄并让文字换行,相近尺寸尽量向上统一,关闭自动调整后保留原尺寸。间隔滑块的步进跟随网格吸附:关闭吸附按 10px 调整,开启吸附按半格(网格大小的一半)调整。开启网格吸附与自动对齐时,位置尽量落在网格线上,因此实际间隔可能大于设置值。若按内容尺寸仍放不下,会等比缩小磁贴(磁贴内文字仍可滚动查看),低于最小尺寸时才提示开启无限作业板。

图片导出继承自动布局设置,并可单独调整标题字体、字号、背景颜色、背景图片、磁贴背景透明度和模糊程度。图片入口共用最近使用的图片历史,外观默认继承当前设置,导出中的修改不影响看板。笔迹只显示原磁贴边界以内的部分;导出画布不足时整体等比缩放磁贴。模糊背景先转换为像素图层,确保预览和 PNG 一致。

Esc 会先结束当前编辑;未在编辑时按下则退出全屏。

🚀 构建与运行

环境要求

  • Windows 10 1809(版本 17763)或更高版本
  • x64 设备
  • .NET 8 SDK
  • Visual Studio 2022(推荐),并安装“使用 .NET 的 Windows 应用 SDK”相关工作负载
  • .NET 8 Runtime(直接运行框架依赖产物时需要);正式便携包自带 .NET 与 Windows App SDK 所需运行资源

命令行

git clone https://github.com/Edge-HH/Pancake.git
cd Pancake
dotnet restore .\src\Pancake\Pancake.csproj
dotnet build .\src\Pancake\Pancake.csproj -c Release -p:Platform=x64
dotnet run --project .\src\Pancake\Pancake.csproj -c Release -p:Platform=x64

也可以使用 Visual Studio 打开 Pancake.slnx,选择 x64 后启动 Pancake 项目。

自动构建与发布

  • 推送 v主版本.次版本.修订版本 格式的标签(例如 v1.2.3)时,GitHub Actions 会执行 Release x64 构建、设置和排版逻辑测试、更新覆盖/回滚测试以及静态交互契约检查。
  • 工作流名称为“📦 构建与发布”,各步骤均使用前置 emoji 的中文名称。
  • 发布包包含 .NET 与必要的 WinUI 运行时,精简未使用的 AI、ML、Widgets、WinForms 依赖,仅保留简体中文、繁体中文和英语语言回退资源。
  • 精简之后压缩 ZIP,再解压成品并在临时副本中实际加载主窗口,确认正常退出才创建 GitHub Release;EnableMsixTooling 保证主窗口与控件主题的 PRI/XBF 资源进入发布包。
  • 在 Actions 页手动运行该工作流只会生成 ZIP 产物供检查,不会创建 GitHub Release。

正式发布示例:

git tag v1.0.0
git push origin v1.0.0

请等待“📦 构建与发布”工作流成功后再分发 Release 地址。用户完整解压 ZIP 后运行 Pancake.exe 即可,不能只复制单个 EXE;项目数据保存在程序旁的 data 目录。

应用内确认更新后会自动解压并覆盖旧文件,再重新启动。更新不会覆盖 data,文件备份和执行日志保存在 data/updates/<随机标识>/backupupdate.log,覆盖失败时尝试回滚。请先关闭同一目录中其他 Pancake 实例;如果安装目录不可写,更新会在退出前报告错误。旧版无法启动或尚不支持自动覆盖时,需要首次手动解压新版,保留原 data 目录。

本地验证同样的发布流程:

dotnet publish .\src\Pancake\Pancake.csproj -c Release -r win-x64 --self-contained true -p:Platform=x64 -p:WindowsAppSDKSelfContained=true -o .\artifacts\publish
.\installer\Optimize-Publish.ps1 -PublishDirectory .\artifacts\publish
.\tests\verify-release-startup.ps1 -PublishDirectory .\artifacts\publish

精简脚本仅处理没有用户 data 的独立发布目录,保留运行库、字体和许可证。

启动参数

参数 作用
--windowed 使用普通窗口启动,而不是默认全屏
--view=editor 启动后直接进入看板编辑模式
--view=ink 启动后直接进入可手写的编辑模式
--view=settings 启动后直接打开设置页

例如:

dotnet run --project .\src\Pancake\Pancake.csproj -- --windowed --view=editor

🌤️ 天气配置

在设置页点击“选择地区”,输入地区名称搜索并从结果中选择。实现依据社区维护的 XiaomiWeather.md 及其配套地区数据库;该接口不是小米公开承诺稳定性的正式开放 API,若服务端变更可能需要同步适配。

🔒 隐私说明

  • 麦克风数据只用于实时计算音量,不录音,也不保存音频。
  • 添加图片时会复制到 data/projects/<项目标识>/assets,不会上传或改写原图片。
  • 项目清单、内容和软件设置写入 data/projects.json;旧版 data/pancake.json 首次启动时会迁移,并保留 .before-projects.bak 备份。
  • 自动填充只在本机记录学科与作业名称:数据属于软件设置,写在 data/projects.json 里,不上传,也不会写进 .pch 项目文件;关闭「自动记录常输入的作业名称」后不再学习新词,已记录的内容可在设置页逐条删除或一键清空。
  • .pch 是带版本清单的 ZIP 容器,只接受受控的附件路径;保存缺少附件的项目会明确报错,不会生成残缺文件。
  • 如果把程序放在无写入权限的目录(例如受保护的系统安装目录),自动保存会在设置页报告失败。

📁 项目结构

Pancake/
├─ src/Pancake/
│  ├─ Assets/         # 内置字体、图标与拼音数据(含许可说明)
│  ├─ Controls/       # 科目磁贴、拖动、缩放与手写交互
│  ├─ Models/         # 看板、作业、图片与笔迹模型
│  ├─ Services/       # 项目、作业包、导出排版、字体、自动填充、噪音、天气与更新
│  ├─ Themes/         # WinUI 主题资源
│  ├─ ViewModels/     # 主看板状态与编辑快照
│  └─ MainWindow.*    # 主界面与窗口交互
├─ tests/             # 项目逻辑、隔离 UI 渲染与交互契约验证
├─ design-qa.md       # 设计验收记录
└─ Pancake.slnx

🧪 验证

运行静态交互契约检查:

powershell -NoProfile -ExecutionPolicy Bypass -File .\tests\verify-interaction-contract.ps1

该脚本检查触控交互、网格吸附、全局手写工具栏和全屏退出提示等关键实现是否存在。项目与 .pch 往返测试可运行 dotnet run --project tests/ProjectLogic/ProjectLogic.csproj -c Release,也覆盖紧密网格排版、区域中轴和相邻磁贴吸附。更新测试运行 dotnet run --project tests/UpdateLogic/UpdateLogic.csproj -c Release,在临时目录检查解压、覆盖、数据保留、锁定文件回滚和危险路径拒绝。仓库还包含按条件编译的隔离 WinUI 渲染测试,用于验证内置字体、长富文本、图片、笔迹、多比例 PNG、图标、底栏顺序和实际点击后的色卡选中状态;它不会随正式构建进入应用。

🚧 当前限制

  • Release 中优先选择 x64 便携版 ZIP 自动更新,也支持 7z 和上述分卷格式;.exe.msix.msixbundle 仍按安装包启动。更新包需与便携版一致,将 Pancake.exe 等文件放在压缩包根目录。文件被占用或目录不可写时可能无法更新,可查看保留的备份和日志。
  • 小米天气来自第三方整理的非正式接口文档,服务端兼容性不由本项目控制。
  • 噪音数值是基于 PCM 电平和校准偏移的估算值,不等同于经过认证的声级计读数。
  • 原生触屏手势、触控笔压感和目标教室大屏的视觉比例仍需在实际设备上完成最终验收。

🤝 参与开发

欢迎通过 Issue 报告问题或提出建议。提交代码前,请至少完成 Release 构建和交互契约检查,并说明是否在真实触控设备上验证过相关操作。

📄 许可证

本项目采用 GNU General Public License v3.0 开源许可证。你可以在遵守 GPL-3.0 条款的前提下使用、修改和分发本项目;分发衍生作品时需以 GPL-3.0 提供对应源代码。

设置侧边栏

  • 设置采用 WinUI 侧边栏导航,一级分类为布局、外观、组件、自动填充和关于;外观、组件与自动填充的具体页面显示为可展开的左侧层级子项,关于页将版本、仓库和更新合并在同一个可滚动页面,不再在内容区使用横向分页按钮。首次进入默认选中“磁贴”,切换页面时只保留当前项的选中背景和指示条。右侧内容可滚动;左右面板使用直角连接,背景透出 Windows Mica 系统材质。不支持 Mica 时由系统回退到 Desktop Acrylic。
  • 布局 / 布局模式:选择分屏、仅作业、仅时钟、自由布局。分屏的分隔条可横向或纵向拖动,拖至起点显示仅作业,拖至终点显示仅时钟;单区模式会把分隔条留在被占满的一侧边缘(仅作业在左、仅时钟在右,窄窗口改为上、下),往回拖动即可恢复分屏,不用再进设置切换。时钟数字与下方组件栏、日期共用同一条中轴线,秒数占用的横向空间会被等宽补齐,不会把大号时间挤偏。仅时钟模式没有作业板,编辑工具栏只保留画笔、放弃和保存,添加磁贴、自动排列和网格吸附不再显示;画笔可在整块屏幕上书写,笔迹属于当前项目。分屏和仅时钟模式进入编辑后,可从时钟或组件栏的任意位置拖动;时钟只能沿时钟区域中轴线上下移动并等比缩放,其缩放框按当前时钟内容的实际宽高比贴合,避免单侧空白造成视觉偏移;天气与噪音保持同一排并作为整体沿中轴线上下移动和缩放。自由布局中每个作业磁贴、时钟、天气和噪音组件仍可独立放置和拖动。指针落在组件上时描一圈选中框表示当前操作的组件,缩放入口同时出现在右下角,方块内带指向右下角的箭头;拖动或缩放期间选中框保持显示,松手后指针仍停在组件上时继续显示,指针离开才收起。位置随软件设置保存,并支持放弃本轮组件位置修改。未手动调整时,分屏时钟会随时钟区域尺寸保持较大的居中偏上默认布局。后续组件使用稳定标识注册并复用同一套布局规则。
  • 无限作业板:开启后使用滚动条、鼠标中键拖动或触摸平移,Ctrl + 滚轮与双指手势缩放;画板向右、向下持续扩展,网格仅绘制视口附近的部分。关闭后恢复正常比例和原点,保留磁贴原始坐标。网格大小可在 16–160 px 之间按整数调整,拖动过程中看板上的磁贴会一直重新吸附到新网格,不会停在旧网格线上。
  • 布局 / 网格大小与自动排列预览:“网格大小”上方有一张实时预览,同时显示网格大小和自动排列结果:它使用与看板相同的真实磁贴控件和作业板区域背景,示例磁贴按当前的吸附到网格、自动排版间隔、自动对齐和自动调整磁贴大小排布在看板同款网格上,网格大小、样式、颜色、粗细都取自当前设置;预览左上角标注网格大小、右上角标注排版间隔。示例是固定的四个科目,内容与真实作业一样走富文本测量和自动收紧,但不读取或修改项目作业。缩放只跟随看板视口,因此拖动排版间隔时预览里的网格不会跟着变大变小;缩小时网格线宽按比例补偿,观感与看板一致。预览里的吸附开关就是“自动布局 → 吸附到网格”,关闭后示例磁贴仍按自动排列结果摆放,但不再吸附到网格线上。
  • 外观 / 网格:可选择网格、点阵或不显示;网格可设置颜色和粗细,点阵可设置颜色和点直径。三种样式只改变显示,不影响网格吸附逻辑。“编辑时显示常规网格”默认开启,进入编辑时临时显示网格,退出后恢复用户选择的样式。
  • 外观 / 磁贴:设置标题大小、背景颜色、图片或视频、图片模式、毛玻璃开关和模糊程度。缩放为保持比例铺满并裁剪,拉伸为填满区域,适应为保持比例完整显示。选择的背景媒体复制到 data/backgrounds,清除背景媒体可回到纯色背景。
  • 外观 / 背景板:跨区背景仅在分屏模式生效,开启后两区共用一张连续底图,区域底图设置暂时禁用,但时钟区和作业区仍能独立开启毛玻璃与调整模糊。时钟区域背景只在分屏、仅时钟中可设置,作业板区域背景只在分屏、仅作业中可设置。模式切换保留已有背景配置。
  • 外观 / 控制窗:默认无字模式;关闭后在靠近边框的一侧显示按钮名称并增加按钮间距。页面顶部通过屏幕示意图的 8 个圆点选择左下、下居中、右下、上居中、左上、右上及左右居中竖置;下方实时预览放大显示控制窗附近,背景裁剪铺满,不留黑边,画笔菜单跟随主控制窗位置,粗细预设也会随控制窗横置或竖置;大小、圆角、边距可连续调节,角落位置显示两个边距设置。支持毛玻璃与模糊程度,窗口放不下工具栏时可滚动访问按钮;全屏查看时滑动会短暂展开“退出全屏”提示,横置控制窗向图标右侧展开,竖置控制窗则在图标下方纵向显示四字,避免增加窗口宽度。这些设置同时决定编辑模式下富文本悬浮岛、画笔栏和缩放悬浮岛的外观与尺寸:三块窗口等高(竖版控制窗下等宽),改动大小、圆角、背景或无字模式会立即同步;竖版控制窗在编辑模式下还会为了让开上下的两块浮岛自动上下挪动一点。
  • 外观:深色、浅色、跟随系统;鲜明和马卡龙色系。内置磁贴主题色(包括旧项目中曾被误标为手动色的内置颜色)以及画笔、高光、磁贴色卡和文字色卡中的彩色色块会跟随色系;文字色卡始终保留纯黑和纯白。已有文字、高光和笔迹颜色保持原值,自定义磁贴颜色也保持原值。色卡使用 Windows 强调色边框和右上角勾选标记当前颜色;混合选区或不在当前色卡内的颜色不会误标为其他颜色。项目与文件操作在查看和编辑模式下均位于顶栏,项目名前显示文件夹图标,最近项目之间留有间隔。
  • 组件 / 天气:选择地区、刷新天气和显示极端天气预警。读取接口的完整预警列表,包括强对流、海区大风等类型;看板显示预警标题,悬停和设置页可查看详情。是否有预警取决于该地区接口返回的信息。
  • 组件 / 噪音检测:检测间隔为 0.1–2 秒,步长 0.1 秒(这是音量统计间隔,音频采样格式由设备决定);可选择系统默认或指定输入设备,并刷新设备列表。设备失联会报错,不会自动切换到其他麦克风。
  • 吵闹阈值可在 20–120 dB 调整,提示音音量可在 0–100% 调整并直接试听。提示音为三声短促的“嘀嘀嘀”;报警使用独立的约 50 ms 采集通道,不等待音量显示的统计间隔。新一轮噪音立即提醒,持续超阈值时每 2 秒重复一次;播放后的 750 ms 内抑制回授,音量低于阈值 3 dB 后重新待命。实际响应还受输入输出设备延迟影响。
  • 校准时先填写当前环境实际音量(20–120 dB),等待有效读数后点击“校准到此音量”;偏移由该目标值减去原始测量值计算,重复校准不会累加偏差。更换输入设备会重置偏移,需要重新校准。
  • 自动填充 / 学科补全:总开关默认关闭;匹配程度分宽松(输入 1 个字符即提示,首字母允许跳字)、正常(汉字 1 个或字母 2 个起按前缀匹配)与严格(2 个字符起,只认完整前缀)。下方列表逐项显示学科、启用开关与颜色色卡,可添加或删除;色卡始终显示当前色系(鲜艳/马卡龙)下的学科颜色,预设色跟随色系、真正的自定义色原样显示,切换色系后列表会立即重算。颜色浮层默认只给常用预设色,需要精确取色时再展开「自定义颜色」;「自定义颜色」右侧的「随机」按钮让该学科每次采纳都从预设色里随机取一个颜色(不连续重复),再点一次或手动取色即恢复固定颜色,随机模式的色卡显示为预设色渐变。内置语文、数学、英语等 16 个学科,学科库只包含内置学科和设置页手动添加的学科,程序不会自动收录项目或磁贴里的科目;列表上方提供「刷新列表」。在磁贴标题里输入中文、全拼(yuwyuwen,输入法用撇号分隔的 yu'wen 同样支持)或首字母(yw)会弹出候选浮层:上下键切换、Tab 或回车采纳、Esc 关闭,也可以直接点击,按键由窗口统一接管,不受输入框焦点导航影响;采纳后标题与磁贴主题色一起切换为该学科的颜色(开启随机配色时每次换一个预设色),预设色跟随色系、真正的自定义色保持不变。新增磁贴的默认标题「新科目」在点击时会自动清空并列出全部推荐学科。候选浮层一次最多显示 5 条候选,更长的列表在浮层内滚动,鼠标滚轮和触屏滑动都能滚动,点候选是选中、拖动则是滚动;浮层宽度按内容放宽到 240–520 像素,长学科名不会被截断。输入法组合期间候选浮层照常按拼音给出学科(带隔音撇号的 yu'wen 同样能匹配),可以直接点击采纳;输入法结束这次组合时会把组合内容按原始拼音再写回文档、覆盖刚采纳的候选,窗口会在组合结束、输入框失焦或文本回退时把被覆盖的那一段补写回候选,所以不需要再点第二次,补写不抢回输入焦点、也不重复套色或重复统计。组合期间上下键与 Tab 被输入法自己的候选窗占用(应用收不到这些按键),需要用键盘选择时先让输入法上屏(空格或回车)或直接输入:上屏后浮层会立即给出候选,上屏的学科名本身也会作为候选出现,此时上下键、Tab、回车与点击都可用。候选浮层绘制在窗口最上层并跟随输入位置,滚动看板时按新位置重新贴合,不会被磁贴裁剪或缩放影响。
  • 自动填充 / 作业补全:可分别开关整体补全与「自动记录常输入的作业名称」,收录阈值分宽松 2 次、正常 3 次、严格 5 次;记录隔离可选全局或分学科,分学科时自动学习写入当前学科桶,全局词始终可用,切换隔离不迁移历史数据。一条作业的文本真正变化后统计一次:按空白、标点与数字切分,只保留长度 2–12 且含汉字或两个以上连续字母的词,因此页码碎片、单字母(如 P)和默认占位文字都不会入库,双练一测P30双练一测第 3 页 这类写法只记录「双练一测」;同一条内重复出现的词只累计一次,反复打开同一条作业不会重复计数。列表顶部有「刷新列表」按钮,会先清理过期条目再刷新下方两个列表。已收录(含手动添加项)可改生效范围为全局或任选若干学科,也可编辑名称、屏蔽或删除;待收录显示还差几次输入与剩余过期天数,可删除或不再收录,被屏蔽的词灰显在列表末尾并可恢复。待收录 14 天未再出现会清除,已收录 90 天未使用会自动移除,手动添加的条目永不过期;上限为自动词条 300、手动词条 200、学科库 200,超出按最久未用淘汰。作业正文与学科标题一样在输入法组合态下可用:采纳候选后输入法再把拼音上屏时,只会把被覆盖的那一段改回候选,其余文字与富文本格式保持不动,失焦结算统计排在补写之后。作业补全与标题补全共用同一个候选浮层,一次最多显示 5 条,超出可在浮层内用鼠标滚轮或触屏滑动查看。
  • 关于:提供 GitHub 与 Gitee 仓库图标链接、实际构建版本、检查更新和启动时自动检查开关。更新源默认 GitHub;选择 Gitee 时比较两个源的最新版本,若 Gitee 落后,会在设置与看板提醒切换 GitHub。无法连接 GitHub 时不会把网络错误误报为版本一致,仍可使用 Gitee 更新。
  • 分卷更新:支持 .zip.001/.002/....7z.001/.002/...,以及 .z01/.z02/.../.zip 标准分卷 ZIP。同一发布中需要包含完整且同名的全部分卷,自动按序下载并校验,再复用便携版更新流程;缺卷、损坏、危险路径或试图覆盖 data 的包会被拒绝,当前应用保持运行。独立 7z 解压工具及许可随包分发,来源与源码地址见 Tools/7zip/README.md
  • 画笔菜单:画笔和橡皮擦改为图标切换,不再显示“当前:科目”;红色垃圾桶可选择清空当前磁贴或全部笔迹。菜单具有边框,笔模式隐藏无法操作的添加、排列与网格按钮,退出后恢复。画笔和橡皮擦按钮按控制窗大小同步缩放、圆角跟随控制窗圆角,图标在按钮内居中且完整显示;画笔栏占用富文本悬浮岛的槽位,并同样与控制窗等高(竖版控制窗下等宽)。
  • 作业板缩放:分屏、仅作业与自由布局下,编辑模式在控制窗右侧(竖版控制窗时下方)提供缩放悬浮岛:减号、当前比例、连续缩放滑条和加号。拖动滑条在 20%–400% 之间连续调整比例,减号与加号按常用档位增减,点击中间的比例回到 100%;比例文字、滑条和档位按钮任何一处改动都会同步另外两处。缩放直接作用于作业板视口,放大后可以滚动或触摸平移到四周的磁贴;无限作业板的画板尺寸与网格按新比例实时重算。缩放悬浮岛只在编辑模式显示,查看模式不再占用屏幕,但已设定的比例继续生效,看板也仍然可以滚动与触摸平移。
  • 浅色模式使用白色界面背景及黑色默认前景,补全候选浮层同样按当前主题取色(浅色为白底黑字),已有默认白色文字和笔迹也会适配;切回深色时默认内容恢复白色,彩色内容保持原色。笔迹原始数据不因切换主题改写。
  • 上述设置会保存到 data/projects.json;项目内容和软件设置分开建模,旧配置缺少的新字段使用默认值。

运行设置逻辑回归测试:dotnet run --project tests/SettingsLogic/SettingsLogic.csproj -c Release;追加 -- --live 可验证实际天气接口。该测试覆盖预设色系往返、富文本保留和特殊天气预警解析,不替代界面及真实音频设备验收。 该测试同时覆盖自动填充的学科库登记、三档拼音匹配、随机配色取色、作业切词与阈值、分学科隔离、过期清理与屏蔽词。汉字拼音数据来自 pinyin-data(MIT),随包分发在 src/Pancake/Assets/Pinyin,许可原文见同目录的 LICENSE.txt

新版设置与布局的真实窗口回归测试:

dotnet publish src/Pancake/Pancake.csproj -c Release -p:Platform=x64 -p:EnableUiVerification=true -o artifacts/ui-check
./tests/verify-ui.ps1 -PublishDirectory artifacts/ui-check -EvidenceDirectory artifacts/ui-evidence

测试每次在不含旧数据的临时目录启动,覆盖四种布局、组件持久化、无限画板缩放与复位、跨区背景、独立模糊、画笔图标、八种控制窗位置、富文本与画笔悬浮岛的位置和等高关系、缩放悬浮岛的滑条与档位、编辑模式显隐规则、查看模式保留缩放结果、超宽工具栏滚动及全部设置层级子页面。正式发布会关闭 EnableUiVerification,不会携带测试入口;目标设备的触屏与压感体验仍需设备验收。

补全候选的按键操作会经系统输入队列投递真实按键,需要窗口位于前台,因此单独作为可选模式:用同一个发布目录执行 pwsh -File tests/verify-ui.ps1 -PublishDirectory <发布目录> -EvidenceDirectory <证据目录> -AutofillKeysOnly,逐次核对上下键切换一格、Tab 与回车采纳、Esc 关闭,以及作业正文里的同名候选;标准回归里的浮层配色检查覆盖浅色白底黑字与深色深底浅字。中文输入法下的补全行为另有可选模式 -AutofillImeOnly:它会切到中文输入法并投递真实拼音按键,核对组合期间按拼音给出学科候选、采纳候选后输入法上屏不会再覆盖候选、以及输入法上屏学科名后仍能用 Tab 采纳,需要系统装有中文输入法。

外观实时预览与自动隐藏

  • 网格和控制窗设置页顶部居中显示实时预览;磁贴外观页把预览固定在设置页右侧,向下滚动编辑“标题大小”“背景”等选项时预览始终可见,设置页宽度不足(窗口较窄或屏幕缩放较大)时自动回到“标题大小”上方的页内位置。背景板页在跨区背景、时钟区域背景和作业板区域背景选项上方分别显示预览;布局页在“网格大小”上方用真实磁贴控件和作业板背景预览网格大小与自动排列结果。修改背景图片、图片模式、颜色、毛玻璃、标题大小、控制窗外观、网格大小、网格样式或自动布局选项后即时刷新。
  • 磁贴外观页使用独立的固定示例:主题色为预设黄色(跟随预设色系),标题“这是标题~”,正文为默认字体、加粗、白色,第一行为“当有一天你不再纠结于答案 当我们又重逢于天涯或沧海”,后两行为“Through hardships to the stars.”和“Per ardua ad astra.”(其中“astra”带当前色系的高光色),不读取或修改项目作业;示例后方使用提亮的蓝紫色纹理图片,便于观察毛玻璃效果,图片铺满整块预览区域,深色模式保持原图、切换到浅色模式会明显提亮,右侧固定区里的示例磁贴也按预览区宽度放大显示。拖动标题大小时只更新字号,保留预览控件及背景资源;切换主题或色系会重建示例,示例的主题色和高光色始终与当前色系一致。背景板预览仍展示当前项目内容;网格同时展示查看模式与编辑模式效果,时钟随当前时间更新。
  • 外观 / 控制窗:开启“自动隐藏”后,在查看模式中连续无操作达到“自动隐藏时间”便隐藏控制窗,时间可设为 1–600 秒,初始为 5 秒。移动鼠标、触摸、滚轮或键盘操作后重新显示;编辑、设置、弹出菜单和持续触摸期间保持可用。缩放悬浮岛只在编辑模式出现,因此不会和查看模式的自动隐藏互相影响,飞出动画仍沿用同一段位移。默认关闭自动隐藏,兼容原有使用方式。
  • 隐藏动画:“渐入渐出”改变控制窗透明度;“飞出”使用非线性缓进缓出动画,按控制窗到窗口四边的实际距离选择最近边框,并在操作恢复后返回原位。
  • 组件 / 噪音检测:开启“最小化时暂停监测”后,最小化会停止麦克风采集和噪音提示音,恢复窗口时重新启动所选输入设备并保留原校准设置;默认关闭。

最近图片、动态壁纸与播放队列

磁贴、跨区背景、时钟背景、作业板背景的“选择图片或视频”按钮下方,以及添加作业图片的选择窗口中,都显示一排“最近使用的图像”。最近八张图片在这些入口间共享,点击即可复用;视频不会混入图片历史。资源保存在 data/backgrounds,原文件或原项目删除后仍可选择,手动删除的历史文件自动隐藏。

各背景可以选择 PNG、JPEG、BMP、WebP、GIF 图片,或 MP4、M4V、MOV、WMV、AVI、WebM 视频。视频默认静音、循环播放,实际格式支持取决于 Windows 安装的解码器;优先使用 H.264 编码的 MP4。缩放、拉伸、适应和毛玻璃效果同样适用于视频。媒体无法播放时跳过该项,全部不可播放时显示提示并停止重试。隐藏预览或卸载控件后会暂停或释放播放器。

打开“播放队列模式”后,可一次添加多个图片与视频,在列表中上移、下移、移除,并选择按顺序循环或随机播放(有多个可用媒体时不连续重复同一项)。各背景独立保存队列,重启后保留配置。

  • 按固定时间切换:间隔为 1~86400 秒,每次切换后重新计时。
  • 视频播放完成时切换:视频结束后切换到下一项;关闭后当前视频循环播放。
  • 两项都开启时,以先触发的条件为准;两项都关闭时停留在当前媒体。图片与 GIF 不使用视频结束事件,需开启定时切换才能自动轮换。
  • 关闭队列模式恢复单媒体背景;清除背景媒体会同时清空单媒体和队列,保留背景色。

检测到通过 Steam 安装的 Wallpaper Engine 后会显示“从 Wallpaper Engine 导入”,可以选择本地已下载的视频壁纸;队列模式下可多选。扫描 Steam 的多个库、创意工坊及本地项目目录,导入后复制视频,播放不依赖 Wallpaper Engine 持续运行。场景、网页和应用壁纸不支持导入为 Pancake 背景;场景并非视频文件,参见 Wallpaper Engine 官方说明。未检测到安装时仍可手动选择本地视频。

媒体逻辑回归包含在 tests/SettingsLogic 中。实际播放验证先以 EnableUiVerification=true 发布,再执行 pwsh -File tests/verify-ui.ps1 -PublishDirectory <发布目录> -EvidenceDirectory <证据目录> -BackgroundMediaOnly;该模式需要 FFmpeg 生成短视频,在隔离目录验证真实解码、播放结束/定时切换、失效跳过、资源释放与缩略图选择。如果本机安装了 Wallpaper Engine 且存在 MP4 视频项目,还会验证真实资源复制与播放。

About

多功能自习时钟作业板

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages