GUI 系统需求描述
作者: 刘鹏
日期: 2009-09-21
文本总结了一个 GUI 系统需要具备的 features 及其需要考虑的问题。

核心需求

  • 体系结构:C/S 架构,灵活,易于扩展
  • 消息驱动机制:消息队列、消息循环、消息处理
  • 鼠标、键盘、触摸屏的事件处理
  • 高效的窗口剪切算法:使用 Z 序管理窗口的覆盖关系;绘制窗口前要将多个 窗口映射到屏幕上,计算每个窗口受剪切的区域,被覆盖的部分被剪掉不绘 制,一个高效的窗口剪切算法非常重要3
  • 窗口管理器(Window Manager): 窗口管理,可以考虑做一个窗口管理器抽象 层,使 GUI 不依赖于某个具体的窗口管理器;
  • 组合窗口管理器(Compositing window manager): 多个 surface 的组合;
  • 强大高效的图形库:支持 2D/3D,2D图形库(矢量的/栅格的),3D图形库 (OpenGL)
  • 图像处理能力
  • 半透明窗口、不规则窗口
  • 图形抽象层:如 MiniGUI 的 GAL
  • 输入抽象层:如 MiniGUI 的 IAL
  • 字体引擎:text/font
  • 手势识别引擎(gesture recoginzation engine): 点击、滑动(fling)、多点触摸等;可纯软件实现,也可硬件支持;
  • 窗口主题(theme)
  • 窗口界面描述(UI define files):xml/css/JSON
  • 硬件加速功能
  • 支持定点数运算
  • 动画(animation)支持
  • SDK 和 IDE
  • 跨平台:linux, unix, windows, MacOS X,......
  • testing framework

图形功能

  • 基本图元的绘制:点、线、多边形
  • alpha blend:可用于实现光源、火光、烟雾等;
  • clip:支持任意形状的剪切域;
  • Compositing images:Porter-Duff operation,12 种组合方式;
  • gamma 校正:可用于实现淡入、淡出、渐变等效果;
  • gradient 梯度:可用于渐变填充;
  • Patterns 填充样式;
  • shadow 阴影;
  • Transparency Layers
  • Bitmap Images and Image Masks
  • 粒子系统及其辅助设计工具

图像处理功能12

  • 多种图像格式的支持
  • 复制(duplicate)
  • Mode (RGB, Grayscale, indexed)
  • 缩放、平移、旋转
  • 颜色:color balance,brightness-contrast,levels
  • 图像 Alpha 值的调整
  • 模糊 (blur)
  • 增强 (enhance)
  • 扭曲 (distort):page curl, ripple, wave
  • 光照和阴影 (light and shadow)
  • 噪声 (noise) 处理
  • 边缘检测 (edge detect)
  • 卷积矩阵 (convolution matrix)
  • 图像处理辅助设计工具

高级需求

  • video support
  • audio support
  • database support
  • xml support
  • webkit integrated
  • language bind
  • online desktop,与 web 集成

说明

  • 消息驱动机制,拟支持等待多个事件源,如 socket, 子进程退出和内核事件等;并且要降低消息源与消息目标之间的耦合程度
  • 需要支持多种输入的设备:鼠标、键盘、触摸屏、jobstick、.....
  • 关于控件,使用容器机制分离控件的职责,将控件做成容器,它可以容纳其它控件,容器机制的实现是使用组合还是继承,据说前者更符合现代设计规则。
  • 使用 layout 机制,避免硬编码
  • resolution independence
  • text/font 模块需要考虑 Unicode 的支持,考虑 Bidi 文本的处理

另外需要考虑的几点

  • separate engine and UI code
  • not hard-coding:
    • layout information
    • screen resolutin
    • screen color depth
  • design scalability in mind from the very beginning.

Reference

  1. PhotoShop/Gimp Filter
  2. ActionScript3.0 的显示虑镜
  3. MiniGUI 的窗口剪切算法