XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

C# 桌面第二轮:窗口、显示与图标

本轮以用户指定的 XFEToolBox 实际 XAML 为参考,保留 XFE 品牌与蓝色辨识度,采用浅色卡片、圆角窗框、紧凑标题区和底部任务栏。引用的源文件、颜色与尺寸见 ToolboxDesktopDesign.md;未修改该网站或工具箱工程。

窗口与输入

  • 拖动标题栏移动窗口;双击标题区最大化/还原。最大化窗口向下拖动时按原抓取比例恢复尺寸。
  • 拖动右下角调整大小;最小尺寸与屏幕工作区共同约束,最大化避开任务栏。
  • 标题栏提供最小化、最大化/还原、关闭入口。文件未保存时仍保留关闭保护。
  • 底部任务栏显示窗口,点击切换、最小化和恢复;开始菜单提供 Files、Editor、Browser、Terminal 入口。
  • 单独按下并松开 Win 打开开始菜单;Win+E 打开 Files,Win+D 显示/恢复桌面,Win+左右贴靠,Win+上最大化,Win+下还原/最小化。
  • Alt+Tab 在一轮稳定的最近使用顺序中切换;Shift 反向;松开 Alt 才结束该轮。Alt+F4 请求关闭当前窗口。
  • 编辑器 Ctrl+S、浏览器 Ctrl+L、F5 预览等继续可用。输入基于真实 make/break 修饰键事件,组合键不会把普通字符写入文档。

QEMU 必须获得键盘输入焦点;宿主 Windows 可能截获没有被虚拟机捕获的 Win/Alt 组合键。真实 QMP make/break 验收与宿主快捷键捕获是两个不同环节。

光标与图标

线条箭头保持明确指向,交点较粗、端点较细、拖尾缩短;文本 I 形的中柱较粗,横向端点渐细。扩大蓝色光晕,并在文字输入区、窗口右下角显示对应光标。

9 个应用/文件图标均使用内置 Imagegen 分别生成,透明背景,深蓝轮廓与浅蓝填色。源图位于 assets/DesktopIcons/Source,完整生成提示词和工具来源在 Provenance.json;Manifest.json 同时记录源图及编译数据哈希。Tools/BuildDesktopIcons.py 只作确定性分辨率采样和 RGBA 打包,原始 PNG 未修改。应用入口、标题、任务栏、文件列表及工具栏实际消费同一套图标。

分辨率与刷新

旧 C# 预览直接使用固件当前 GOP 模式,自动模式只有 1280×800。Preview2 启动链接入原有独立 UEFI 显示初始化助手,再进入 Limine/C# 内核;它选择可用最高匹配几何,并对共享 framebuffer 的聚合 GOP 去重,避免后一份记录把 3840×2160 覆盖为 4096×2160。此历史版本曾复用 Rust 引导组件;当前助手已完全迁移为 Source/XFESystem.Boot 的 C# 实现,旧源码已删除。内核和桌面为 C#,不使用 Linux/Windows 来宾内核。

Windows 启动脚本只读检测主显示器;本机主屏为 3840×2160、240 Hz,副屏为 3840×2160、160 Hz。QEMU 使用主屏几何、完整 EDID 与 64 MiB 显存。QEMU 的 refresh_rate 参数单位是毫赫兹,因此 240 Hz 对应 240000。默认关闭 GTK 缩放采样,-FitToWindow 可选择把整个来宾画面缩入窗口;它不会改变来宾实际 framebuffer 分辨率。

内核从原始固件交接数据读取完整 EDID,支持 base/CTA DTD 和 DisplayID 1.3 的 4K 高刷新时序,仅匹配当前 framebuffer 分辨率。有效 base 信息可在扩展缺失时保留,但缺失或校验失败的扩展不贡献时序;监视器范围上限也不会冒充当前模式的刷新率。绘制调度优先采用驱动确认值,否则采用该分辨率声明的最高刷新率;时序未知时使用明确的 60 Hz 绘制回退。调度使用 tick 精度,支持 239.760 Hz 等非整数频率,仅提交脏画面,超期跳过陈旧期限而不补画空帧。图形界面倍率独立于 framebuffer 像素,4K 默认 200%。

EDID 声明、绘制目标、实际绘制提交 FPS 和显示扫描刷新率分别记录。 GOP 没有提供可靠的当前扫描时钟或垂直同步接口;原生 GPU 刷新模式控制与 VSync 尚未实现,因此不能宣称已保证实体显示器 240 Hz 同步输出。QEMU TCG 与 GTK 展示也可能限制最终可见帧率。

减少重绘

鼠标移动只恢复和提交旧/新光标区域,不再重绘整个 4K 桌面。拖动、调整大小、滚动和编辑使用脏区域;字体覆盖率与图标像素缓存避免重复字体栅格化。实际 framebuffer 只复制所需行段;整屏回退另行计数,不冒充局部刷新。

编辑器和浏览器滚动使用 ScrollDamage:依据当前横向视口中整个文档的最大文字覆盖宽度,缓存一列足以覆盖旧/新文字和插入光标的损伤范围,不重画标题、工具栏、状态栏以及右侧空白列。内容、横向偏移或视口宽度改变时重新测量;其他窗口类型保留较宽的安全损伤区域。局部内容更新时,若鼠标位置未变、旧/新鼠标光标区域都不与损伤相交,则直接提交内容区域,省去鼠标光标恢复和重画。

XFE_RENDER_STATS 记录 TSC 时间、渲染帧、局部帧、提交像素、缓存字形、整屏回退和最近绘制耗时。Tools/TestDesktopUi.py 使用独立虚拟机验证交互,并采样密集光标移动/滚动的实际提交速度;这些测量不等同于物理屏幕扫描率。

既有 RAM live、受限托管 IL、HTTP/HTTPS 范围及实体 USB 输入边界继续适用。本轮不改变用户内置磁盘,既有发行目录和 ZIP 保留。