Express 中文文档 Express 中文文档
指南
GitHub (opens new window)
指南
GitHub (opens new window)
  • 快速入门

    • 安装
    • 你好世界
    • Express 生成器
    • 基本路由
    • 静态文件
    • 更多示例
    • 常见问题
  • 使用指南

  • express()
  • 应用
  • 请求
  • 响应
  • 路由


UI system for pixi.js 4, inspired by feathers-ui.

Features


Basic UI components

Button: simple Button, with label and background, easy to extend using themes
CheckBoxa simple checkbox
ToggleButton: a button with pressed state
Slidera simple slider with modifyable start and end value

Layouting

LayoutGroup: a component to create horizontal, vertical or tile-based layouts

Scrollable container

ScrollContainer: provides a viewport that can be scrolled using mouse or touch gestures.  When its content is a LayoutGroup the scroll behavior will be dependent on its layout: a horizontal layoutgroup will default to horizontal scrolling, vertical layout to vertical scrolling.  But you are in control and can manually overwrite the scroll behavior.
ScrollBar: providing a scroll thumb that can be moved. Part of ScrollContainer and List, but can be used separately.

A Text input providing text and password input (based on PIXI Input )

Basic shapes that provide width and height that can be changed easily (for use in themes for example)

Examples


see the examples-folder in this repo or play with some example online at: http://greyrook.github.io/gown.js/examples/

Folder structure


examples - simple examples to show the usage (and to have something more graphical besides the jasmine-tests)

lib - required libraries (just pixi-dev)

src - source code for gown.js

test - unit tests, run coverage_karma_istanbul.sh to get a table providing all files and their coverage, run coverage_blanket to start a web server that shows you the coverage for all lines of the generated browserify output file.

themes - basic UI example themes

AeonTheme.js A theme based on Feather's AeonDesktopTheme making use of 9-tiled images

MetalWorksDesktopTheme.js a theme based on Feather's MetalWorksDesktopTheme

Themes/ShapeTheme.js a theme using only basic shapes.

Installation


Check out the repository from the GreyRook/gown github repository.
Install node.js (if its not even installed).
Change into the path for the checked out repository and run npm install
run npm run dist to build the library (it will be in docs/dist )
start a webserver e.g. python -m SimpleHTTPServer to show the examples ( find them at /docs/examples/ )

Theming


Using the python script themes/xml_to_json.pyyou can convert your XML file from feathers-ui into JSON so the default PIXI loader can parse it.

example:

  1. ``` shell
  2. python xml_to_json.py assets/aeon/aeon_desktop.xml
  3. ```

the script requires PIL (or Pillow ) to determine the texture width/height

It is possible to have different themes in one project
Themes can be switched at run time
For reference how to create your own theme check the themes folder.  It contains two different approaches on creating themes
The test/src/TestTheme.js is a fake theme used only for the unit tests

Under the hood


Center of the theming system is the "skins"-object. It holds unique names of different controls as key (e.g. "button" as identifier for GOWN.Button) and nested objects as value. These nested objects allow you to save different graphics for different skins (e.g. "down" when the user pressed a button down). The graphic for the state can be an images but also any kind of shape (you can set everything that can be added to a PIXI-DisplayObjectContainer as skin). It is important that the variable width/height of your skin can be changed so your skin can be layouted correctly. Every control need its own instance for the skin, so you have to wrap it in a function that creates a new instance of the skin.

In short, the skins-object looks like this: theme.skins = {<control>: {<state>: function () { new <skin>() } }}

Rendering


When changing a component the corresponding setter updates an invalid flag.  This will force a redraw on the next frame. (this can be the recalculation of the position and dimensions or a skin change on user interaction).

The loop looks like this:

redraw (gown)
updateTransform (PIXI)
render (PIXI)

The redraw function is hooked into PIXI's render loop in the updateTranform methond but called before the actual calcluation of updateTransform.

Known Bugs


see Issues
Last Updated: 2023-08-12 10:03:02