MonoUI 2?

自从制作了一套自用的 UI 组件集之后,使用过程中我发现仍然有各种不顺心的地方。可能思维被 Flash 传统的 UI 组件固化了。于是萌生出制作第二版的想法。

但,真的能突破吗?

首先,我打算弃用 MonoUI 这个名字,原因就是已经有一个叫 Mono 的东东了,很容易会被人误会我这个是 .Net 的 Mono…

那么新名字先放一边,如何改进才是麻烦事。使用 Flash 做 GUI,渲染方式现在只有 2 种选择:

  1. 传统 DisplayList
  2. Stage3D

考虑到日后项目的通用性,我觉得必然要选用 DisplayList。然而麻烦的根源也是这里:

DisplayList 的架构没办法改变。

以上种种,导致使用 DisplayList 作为 UI 渲染方式的时候性能优化很有限。尤其是实现皮肤功能的时候,简化显示列表会变得困难,但想实现动态皮肤,又不得不利用更多显示层级来实现。

CodeName: MonoUI2

Plan:

  1. MVC 结构、流程等,一定程度参考 Flex Spark Life Cycle
  2. 支持动态加载皮肤,支持 TextureAtlas(类似 CSS-Sprites)
  3. 尽可能简化显示列表
  4. 预设组件集参考 Minimalcomps, jQuery UI, AWT
  5. 鼠标键盘交互、触控交互的组件集分别实现
  6. Layout 另外实现,或通过第三方库实现

(粗体部分已实现)
Classes:

UIComponent <- SkinnableComponent
UISkin
UITextureProvider <- UITextureClip

Button
Toggle (CheckBoxSkin, RadioSkin, ExpandButtonSkin)
ToggleGroup
Input
Spinner (decrementButton + incrementButton)
NumericStepper (Input + Spinner)
Slider(Horizontal,Vertical)
RangeSilder
ScrollBar (Slider + Spinner)
Scroller (container w/mask + ScrollBar)
ProgressBar(Indeterminate state)
Label
Canvas <- Image
Container
Panel
Accordion
List <- PopupMenu
ListItem
AutoComplete <- ComboxBox
Grid
Tabs
ToolTip
DatePicker/Calendar
ColorPicker/ColorChooser
ActivityIndicator

Layouts:
HBoxLayout
VBoxLayout

Behaviers: Draggable
Droppable
Resizable
Selectable
Sortable