Skip to content

Releases: SECTL/ViewStage

v0.22.5

Choose a tag to compare

@github-actions github-actions released this 05 Jul 02:40

本次更新修复了部分bug,优化展台灯逻辑,新增缩放逻辑

Full Changelog: v0.22.0...v0.22.5

v0.22.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 05:59

✨ 新功能

手机互联(实验性)

  • 通过局域网将手机连接到 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

Choose a tag to compare

@github-actions github-actions released this 21 Jun 04:00

修复

  • 笔画粗细缩放 — 绘制完成后笔画粗细固定在文档空间,随缩放自然放大缩小;绘制中预览仍保持屏幕像素恒定
  • UUID 存储位置 — 设备 UUID 从 localStorage 迁移到 Rust 后端 %APPDATA%/SECTL/ViewStage/identity.json,清空应用数据或重装后不变

新功能

  • NSIS 安装路径 — 默认安装目录改为 C:\Program Files\ViewStage(需管理员权限)

v0.21.0

Choose a tag to compare

@github-actions github-actions released this 28 Jun 08:04

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

Choose a tag to compare

@github-actions github-actions released this 14 Jun 13:48

🚀 性能优化

  • 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

v0.19.5 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Jun 06:41

优化

  • 双指缩放焦点改为可视区域中心 — 捏合缩放时不再跟随手指中点,缩放中心固定为屏幕中心,避免因手指偏移导致画面异常移动
  • 额外手指触控保护 — 两指缩放中若有第 3 指意外触屏,缩放暂停;手指抬起后自动以当前画布位置无缝恢复缩放手势,无跳跃

修复

  • 双指手势与画笔宽度 — 移除缩放死区与速度限制,消除画布抖动的根本原因;添加惯性滑动和平滑缓动;视觉笔触宽度在不同缩放级别下保持一致
  • 笔锋算法统一 — 统一钢笔模式绘制算法

Full Changelog: v0.19.4...v0.19.5

v0.19.4

v0.19.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Jun 13:57

双指缩放/平移手势修复(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

Choose a tag to compare

@github-actions github-actions released this 10 Jun 23:01

主要变更:钢笔模式重写

  • 重写钢笔算法(pen_tessellator.js + batch-draw.js),优化可变宽度曲线细分渲染
  • 新增速度擦末端绘制(Limited 模式按速度自动收尾)
  • 开发者选项新增:收尾时长、单帧位移上限、速度阈值等调节项
    修复
  • 绘制时偶现的异常问题(main.js, batch-draw.js)
  • 手势擦除显示范围与实际范围不一致
  • 阅读器中残留的惯性移动逻辑(移除)
    优化
  • 添加位移限制,防止跳变(黑板 + 阅读器 + 主画布)
  • 更新默认阈值参数

Full Changelog: v0.19.1...v0.19.3

v0.19.1

Choose a tag to compare

@github-actions github-actions released this 08 Jun 09:45

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

Choose a tag to compare

@github-actions github-actions released this 07 Jun 05:51

新功能

  • 手掌擦除 — 新增手掌擦除功能,擦除大小自动适配手掌尺寸,默认关闭(需在设置中开启)
  • 速度擦 — 新增速度擦开关,支持独立橡皮擦粗细预设调节,默认关闭
  • 开发者选项 — 全新开发者选项页面,包含:
    • 开发者模式开关
    • 性能监视器(实时显示 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-draw screenW/screenH 空值保护 + getContext null 检查
    • IntersectionObserver 泄漏修复(实例属性存储 + close 时 disconnect)
    • 5 处静默错误改为 console.warn
    • resize 匿名监听器改为具名函数,beforeunload 中移除
  • 修复工具栏高度及异常问题
  • 修复拍照效果与实时预览不一致(改用原始帧 + CSS filter)
  • 修复 pen-control-panel 无法唤出
  • 修复开发者选项因 IIFE 头部丢失导致空白页
  • 修复性能监视器因 display:none 写死不可见
  • 修复监视器 DPR 读取逻辑(改为读取可见 tile)
  • 修复部分情况下 DPR 不生效、动态分辨率异常
  • 修复图片错误使用摄像头亮度和对比度
  • 修复部分条件下像素丢失、画笔丢失
  • 修复 Linux 构建失败
  • 修复切换图片后侧边栏缩略图变黑

UI/UX 改进

  • 优化多指触控与触控体验
  • 工具栏按钮尺寸优化(外置主题从 70/58 缩至 48×48)、sidebar 高度/宽度调整
  • 工具栏按钮添加文字标签和 i18n 翻译键
  • 外置主题新增适老化适配方案
  • 清空屏幕方式体验优化
  • 优化设置为默认打开方式的体验
  • 缩放新增非线性动画
  • 阅读器内打开黑板不再关闭阅读器面板
  • 黑板关闭按钮添加图标
  • 更换设置为默认程序的图标、返回摄像头的按钮

其他

  • 模块文件与 src 目录整理
  • 监视器标签中文化(压力、批绘、积压、耗时、模式、内存等)
  • 命名调整:瓦片 → 分块
  • 去除无用设置

New Contributors

Full Changelog: v0.18.3...v0.19.0