Releases: SECTL/ViewStage
Releases · SECTL/ViewStage
Release list
v0.22.5
本次更新修复了部分bug,优化展台灯逻辑,新增缩放逻辑
Full Changelog: v0.22.0...v0.22.5
v0.22.0
✨ 新功能
手机互联(实验性)
- 通过局域网将手机连接到 ViewStage,实现遥控、文件传输、摄像头推流
- UDP 多播自动发现(224.0.0.167:53317),手机打开即发现电脑,无需扫码
- 支持 18 种遥控指令:翻页、首页/末页/跳页、批注/移动/橡皮擦、缩放、清除批注、撤销、截图、黑板、摄像头、镜像、设置
- 所有指令均适配文档阅读器(独立画笔模式、独立缩放、独立清除)
- 手机上传图片/文档,自动显示在画布并添加到侧边栏
- 心跳离线检测(90 秒超时,连续 3 次失败判定)
- H.264/MJPEG 摄像头推流协议(H.264 MSE → MJPEG 自动降级)
- phoneServerEnabled 配置持久化,重启自动恢复
- 连接信息(IP/验证码)默认隐藏,点击展开
椭圆笔迹渲染
- 开发者选项新增椭圆笔迹模式(实验性)
- 椭圆笔迹轮廓算法 + 笔锋效果
WebView2 权限自动授予 - 摄像头/麦克风权限自动授予,无需手动确认
🔧 改进
- 移除摄像头最大缩放限制,与图片缩放统一
- 重写手掌擦除逻辑,修复状态卡死
- 高缩放级别下笔迹尾部效果修正,椭圆笔迹添加锥形笔尖
🐛 修复
- 多指触控冲突
- 缩放时批注保留异常
- 阅读器拖动异常
- 批注系统多项问题
- 展台灯检测修复
- overlay DPR 回退为 1
v0.21.1
修复
- 笔画粗细缩放 — 绘制完成后笔画粗细固定在文档空间,随缩放自然放大缩小;绘制中预览仍保持屏幕像素恒定
- UUID 存储位置 — 设备 UUID 从 localStorage 迁移到 Rust 后端 %APPDATA%/SECTL/ViewStage/identity.json,清空应用数据或重装后不变
新功能
- NSIS 安装路径 — 默认安装目录改为 C:\Program Files\ViewStage(需管理员权限)
v0.21.0
Important
此版本建议选择卸载应用并清除应用数据后安装
✨ 新功能
- 展台灯 HID 控制 — 通过 USB HID 协议控制外接展台补光灯(开/关/状态查询),首次检测结果持久化到 device.json,后续启动不再重复枚举
- 毛玻璃模糊效果 — 工具栏/侧栏/菜单支持 backdrop-filter: blur(6px),可在设置 → 主题中开关,默认关闭
- 遥测模块 — 设备在线状态上报、CPU/GPU 上报、设置开关、地区中文翻译
- 文档阅读器增强 — 设置页独立分页(缩放、默认打开方式、恢复文档状态)、最小化按钮、缩放选项改为适合宽度/适合页面
- OOBE 重写 — 全新界面、Markdown 更新日志渲染、6 种语言支持、摄像头旋转/分辨率实时生效
- 内存清理增强 — 启动时/PDF 加载后自动清理(内存 > 80%)、10 分钟冷却
🚀 性能与架构
- 摄像头模块化 — 提取 camera.js,main.js 减负 586 行
- 笔画渲染模块化 — 提取 context-state、stroke-renderer、history-compactor
- 擦除系统重构 — 统一算法、手掌擦除迁移、移除 Rust 后端擦除逻辑
- 内存清理重构 — 从 Rust 迁移至独立子进程 memreduct-viewstage.exe
- 手势/黑板模块 — 移入 modules/ 目录统一管理
- 更新模块重构 — SECTL API + 模块化 + OOBE 风格界面
📷 摄像头优化
- 首次加载时自动按 label 匹配展台设备并优先选择
- 默认分辨率改为运行时 getCapabilities() 探测最高值(去除 1280×720 硬编码)
- 初始值从 1280×720 改为 null,无保存分辨率时自动探测
🐛 修复
- Word 文档打开异常
- OOBE 切换语言后保持滚动位置
- 摄像头关闭时 currentSourceId 未重置
- 阅读器批注错位、两指平移反向/误触冻结
- 内存清理自动任务创建/冷却逻辑
- 多项硬编码中文 → i18n 翻译
Full Changelog: v0.20.0...v0.21.0
v0.20.0
🚀 性能优化
- PDF 渲染管线重写 — PDF.js 从 v3 UMD 升级到 v6 ES Module,新增 Canvas 池、PDFPage 缓存、延迟瓦片初始化、空闲预加载、批量 cleanup 等,100 页文档元数据提取从 6-10s 降到 1.5-3s
- 缩放流畅度 — 滚轮/双指缩放添加 rAF 节流、transform 脏检查、will-change GPU 合成层优化
- GPU 显存 — 空面板/摄像头移除冗余 will-change(省 ~32MB),tile 合成层从 16 个合并为 1 个,缩放期间隐藏 overlay canvas
✨ 新功能
- 统一手势模块
- 计划任务管理 — 设置页新增"去除计划任务"按钮,可手动移除 ViewStage_MemClean
- 惯性移动开关 — Canvas 设置页新增 toggle(默认关闭)
♻️ 重构 & 清理
- 移除 29 个无用 JS 函数
- 移除 12 个死配置项 + 4 个遗留 image-adjustment 字段
- 完全移除文本层代码 — getTextContent + renderTextLayer 彻底删除,省去每页 50-200ms
- 统一 custom-select 下拉框打开/关闭逻辑
- memreduct 独立 C 项目文件夹删除
🐛 Bug 修复
- 小黑板模块加载失败 — _handle_touch_end 缺失闭合花括号导致语法错误
- DPR 切换白屏 — PDF canvas 先渲染到离屏 canvas,resize 后 drawImage 原子复制
- 手掌擦除 — 取 Math.min(w,h) 消除旋转角度影响,面积只计算一次
- 镜像站下载失败 — URL 拼接缺少 /,失败时自动回退到原始 GitHub URL
- 配置文件容错 — Rust 后端 20+ 数字字段范围校验,前端防御性处理 null/类型异常
- 动态 DPR — 被 idle-shrink 降为 1 的瓦片重新进入视野时正确更新
Full Changelog: v0.19.5...v0.20.0
v0.19.5
优化
- 双指缩放焦点改为可视区域中心 — 捏合缩放时不再跟随手指中点,缩放中心固定为屏幕中心,避免因手指偏移导致画面异常移动
- 额外手指触控保护 — 两指缩放中若有第 3 指意外触屏,缩放暂停;手指抬起后自动以当前画布位置无缝恢复缩放手势,无跳跃
修复
- 双指手势与画笔宽度 — 移除缩放死区与速度限制,消除画布抖动的根本原因;添加惯性滑动和平滑缓动;视觉笔触宽度在不同缩放级别下保持一致
- 笔锋算法统一 — 统一钢笔模式绘制算法
Full Changelog: v0.19.4...v0.19.5
v0.19.4
双指缩放/平移手势修复(main.js, blackboard.js, document_reader.js)
- 移除旧版 if/else 分支(缩放变化时用锚点公式,未变化时重置为起始位置+平移增量),
改为统一公式canvasX = centerX - (startScaleX - startCanvasX) * (newScale / startScale),
消除死区中平移重置导致的画面跳动 - 移除缩放死区内的纯平移分支,死区中保持当前缩放,画布位置始终由统一公式计算
- 速度限制改为基于目标位置的追赶式限幅(
clamp(target - current, -MAX, +MAX)),
取代旧的基于上一帧位移的钳制,消除累积滞后和拖尾感 - 清理废弃状态字段:
_lastGestureX/Y,touchStartCenterX/Y,_last_gesture_x/y,_dr_last_gesture_x/y
惯性滑动系统(main.js, blackboard.js, document_reader.js)
- 添加 EMA 速度追踪(单指 α=0.6,双指 α=0.4)
- 添加自适应摩擦系数:
friction = 0.85 - 0.20 * exp(-speed / 8),
高速时近似无摩擦,低速时快速停止,约 200ms 停稳 - 松手时速度 > 2px/帧 则启动惯性,否则直接缓动到位
- 新触摸/指针开始时自动取消惯性,防止新旧手势冲突
- 惯性结束时调用缓动动画归位
画笔/擦除视觉宽度恒定(main.js, drawing-engine.js, document_reader.js)
- batch_draw(overlay)的
cachedDrawLineWidth改为以当前缩放计算:
penWidth / currentScale,确保 overlay 经setTransform(scale)后视觉宽度恒为penWidth - 图块渲染
main_render_strokes_to_context中统一使用当前缩放重新计算线宽:
baseLineWidth = (storedLineWidth * strokeScale) / renderScale,
变宽笔迹同理乘以strokeScale / renderScale - 擦除(非速度模式)也统一使用
eraserSize / currentScale,与速度擦除和 tile 行为一致"
Full Changelog: v0.19.3...v0.19.4
v0.19.3
主要变更:钢笔模式重写
- 重写钢笔算法(pen_tessellator.js + batch-draw.js),优化可变宽度曲线细分渲染
- 新增速度擦末端绘制(Limited 模式按速度自动收尾)
- 开发者选项新增:收尾时长、单帧位移上限、速度阈值等调节项
修复 - 绘制时偶现的异常问题(main.js, batch-draw.js)
- 手势擦除显示范围与实际范围不一致
- 阅读器中残留的惯性移动逻辑(移除)
优化 - 添加位移限制,防止跳变(黑板 + 阅读器 + 主画布)
- 更新默认阈值参数
Full Changelog: v0.19.1...v0.19.3
v0.19.1
Important
这是一个修复更新,包含对上个版本的异常修复
🎯 新增功能
- 恢复上次阅读位置:重启应用后自动还原文档、缩放比例、平移位置和批注
- 手掌擦除大小提示:显示擦除范围虚线框
🐛 修复
- 两指不能移动画布:修复两指过渡到单指时拖拽状态重置、缩放死区、惯性滚动等
- 编译异常:修复 Rust 编译错误
⚡ 优化
- 两指平移无延迟:纯平移跳过 rAF 直接处理,消除阻尼感
- 重绘逻辑优化:减少无效重绘,修正撤销/清除白屏问题
- 存储逻辑重构:文档状态移至 configDir/doc_state/(独立于缓存目录),annotation cache 版本升级到 v4
🧹 清理机制
- 自动过期清理:cache_validate_auto_clear 删除 15 天未打开的文档状态记录
- 开关控制:设置页新增"恢复上次文档"开关,关闭时自动清理状态
Full Changelog: v0.19.0...v0.19.1
v0.19.0
新功能
- 手掌擦除 — 新增手掌擦除功能,擦除大小自动适配手掌尺寸,默认关闭(需在设置中开启)
- 速度擦 — 新增速度擦开关,支持独立橡皮擦粗细预设调节,默认关闭
- 开发者选项 — 全新开发者选项页面,包含:
- 开发者模式开关
- 性能监视器(实时显示 FPS、JS 堆内存、渲染 DPR、渲染压力)
- 监视器更新频率三档可选(快 100ms / 正常 200ms / 慢 500ms)
- 宽度比例调节
- Fluent UI 内联 SVG 图标
- 默认粗细可更换 — 允许用户自定义默认画笔粗细
- 文档转换检测 — 打开文档时自动检测是否需要转换,自动进入阅读器模式
- 阅读器模式增强 — 通过默认打开或拖入文件时自动进入阅读器模式
性能优化
- 批注绘制与 tile 渲染性能大幅提升(3-4x):
- 多 tile 场景预渲染至 offscreen canvas,drawImage 复合各 tile
- 变宽笔画逐段 Path2D 替换为 beginPath/stroke,减少 GC 暂停
- 路径批处理合并连续段 Canvas API 调用,减少 40-60%
- 自适应 FPS 升帧修复,后笔刷延迟从 600ms 降至 45ms
- 曲面细分渲染路径批处理 — 连续线宽相近的段合并为同一路径,Canvas 调用减少 40-60%
- 批注模式动态降摄像头帧率 — 批注/橡皮擦模式降至 15fps,移动模式恢复全帧率
- 监视器性能优化:
setInterval替代requestAnimationFrame,消除 GPU 空转- 增加 CSS
contain: paint layout style隔离,避免大范围重合成 - 缓存文本值,未变化跳过 DOM 写操作
- 渲染压力算法改进 — 从脏 tile 比例改为绘制耗时占比 + 待绘积压 + FPS 掉帧率,更准确反映真实负载
- 黑板启动性能优化 — 延迟子模块初始化到首次 open(),resize 去抖 100ms
- 批注
add_stroke移除冗余 clip 操作,减少 GPU 裁切管线开销
Bug 修复
- 全面修复极限情况崩溃与逻辑缺陷:
- Rust 后端 4 处
.expect()改为 match 优雅降级,避免 panic config_path.parent().unwrap()保护根路径- tile 尺寸/Canvas 宽高加非零守卫防除以零
batch-drawscreenW/screenH 空值保护 + getContext null 检查- IntersectionObserver 泄漏修复(实例属性存储 + close 时 disconnect)
- 5 处静默错误改为
console.warn - resize 匿名监听器改为具名函数,beforeunload 中移除
- Rust 后端 4 处
- 修复工具栏高度及异常问题
- 修复拍照效果与实时预览不一致(改用原始帧 + CSS filter)
- 修复
pen-control-panel无法唤出 - 修复开发者选项因 IIFE 头部丢失导致空白页
- 修复性能监视器因
display:none写死不可见 - 修复监视器 DPR 读取逻辑(改为读取可见 tile)
- 修复部分情况下 DPR 不生效、动态分辨率异常
- 修复图片错误使用摄像头亮度和对比度
- 修复部分条件下像素丢失、画笔丢失
- 修复 Linux 构建失败
- 修复切换图片后侧边栏缩略图变黑
UI/UX 改进
- 优化多指触控与触控体验
- 工具栏按钮尺寸优化(外置主题从 70/58 缩至 48×48)、sidebar 高度/宽度调整
- 工具栏按钮添加文字标签和 i18n 翻译键
- 外置主题新增适老化适配方案
- 清空屏幕方式体验优化
- 优化设置为默认打开方式的体验
- 缩放新增非线性动画
- 阅读器内打开黑板不再关闭阅读器面板
- 黑板关闭按钮添加图标
- 更换设置为默认程序的图标、返回摄像头的按钮
其他
- 模块文件与 src 目录整理
- 监视器标签中文化(压力、批绘、积压、耗时、模式、内存等)
- 命名调整:瓦片 → 分块
- 去除无用设置
New Contributors
- @hanzn-zzx made their first contribution in #2
Full Changelog: v0.18.3...v0.19.0