Skip to content

Releases: SECTL/ViewStage

v0.21.1

21 Jun 04:00

Choose a tag to compare

修复

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

新功能

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

v0.20.0

14 Jun 13:48

Choose a tag to compare

🚀 性能优化

  • 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

12 Jun 06:41

Choose a tag to compare

v0.19.5 Pre-release
Pre-release

优化

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

修复

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

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

v0.19.4

11 Jun 13:57

Choose a tag to compare

v0.19.4 Pre-release
Pre-release

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

10 Jun 23:01

Choose a tag to compare

主要变更:钢笔模式重写

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

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

v0.19.1

08 Jun 09:45

Choose a tag to compare

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

07 Jun 05:51

Choose a tag to compare

新功能

  • 手掌擦除 — 新增手掌擦除功能,擦除大小自动适配手掌尺寸,默认关闭(需在设置中开启)
  • 速度擦 — 新增速度擦开关,支持独立橡皮擦粗细预设调节,默认关闭
  • 开发者选项 — 全新开发者选项页面,包含:
    • 开发者模式开关
    • 性能监视器(实时显示 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

v0.18.3

02 Jun 05:47

Choose a tag to compare

晚点写更新报告~

Full Changelog: v0.18.2...v0.18.3

v0.18.2

01 Jun 06:48

Choose a tag to compare

Important

这是一个修复紧急更新

📝 Bug 修复

-修复文档阅读器无法触控批注的问题

Full Changelog: v0.18.1...v0.18.2

v0.18.1

31 May 06:57

Choose a tag to compare

📖 新功能:PDF 渲染与内存优化

  • PDF 页面改为阅读器内 Canvas 直接渲染,移除预渲染为 JPEG Blob 的中间流程,降低内存占用
  • 窗口 resize 时自动缩放批注坐标、重建 tiles、重绘页面,适配容器尺寸变化
  • 页面虚拟化:远离视口的页面自动释放 GPU 资源,保留占位符,滚回时重建
  • 批注缓存改为按文件 MD5 命名,避免移动后缓存冲突;退出时自动清理
  • 侧边栏页数超过 160 时切换虚拟列表,只渲染视口内 ±8 项
  • PDF 缩略图直接 Canvas 渲染 + Blob URL 缓存 + IntersectionObserver 懒加载

📖 新功能:PDF 高缩放倍数文字清晰度提升

  • 删除旧版 scale > 2 → return 1 错误逻辑,改为按缩放比例等比提升渲染 DPR(上限 4x),放大时文字锐利
  • 放大 >1.5x 时仅当前页使用高 DPR,其余页降为 1x 节约显存
  • 翻页后 DPR 变化自动强制重绘

🖊️ 新功能:MemReduct 内存清理集成

  • 设置页新增 MemReduct 清理开关,支持启动时自动清理
  • 未安装时灰掉开关并提示安装
  • 后端新增 Windows 内存监控线程,内存超 80% 自动调用 MemReduct 清理

🖊️ 交互改进

  • 阅读器内滚轮直接缩放,移除 Ctrl 键要求
  • 缩放期间仅更新 CSS transform,停止 300ms 后统一批量刷新渲染,消除连续缩放卡顿
  • 画笔/橡皮擦按钮双击弹出控制面板

🌐 国际化

  • 补充 MemReduct 清理功能及遗漏翻译条目,中/英/繁同步更新

📝 Bug 修复

  • 修复打开多个 PDF 后无法在文档间切换
  • 修复橡皮擦提示位置计算
  • 修复 PDF 文本层 --scale-factor 未设置导致的偏移
  • 修复 tile 可见区域未乘 cached_inv_scale 导致的计算偏差

Full Changelog: v0.18.0...v0.18.1