PicoGUI Book outline

# Preliminary outline for the PicoGUI Book

- Motivation for PicoGUI
- Big picture - overview of PicoGUI's architecture
- Tutorial
  - Using PicoGUI
    - Obtaining a source distribution
    - Compile-time configuration
    - Themes
    - Runtime configuration
    - Client libraries
    - Applications
  - Programming for PicoGUI
    - PicoGUI's widget model
    - Annotated examples, at least in C and Python
      - Hello World
      - Widget overview
      - Memory management
      - Layout
      - Managing events
      - Widget templates
      - Themes
      - Bitmaps
      - Fonts
      - Drawing on canvases and bitmaps
      - Shared memory
      - Input filters
      - Where to get more information
  - The PicoGUI protocol
    - Comparison to other systems
      - The X window system
      - Fresco
      - Qt
    - Widget layer
      - Reference for all widget properties, commands, and events
    - Request layer
      - Reference for requests and responses (from pgui-protocol document
    - Transport layer
      - Current TCP/IP transport
      - libpgserver transport
      - Future transports:
        - Enhanced TCP/IP transport with fewer round-trips
        - Shared memory and semaphores
        - CORBA
  - Client libraries
    - Theory of client library design
    - C client library
      - Examples
      - Reference
    - Python client library
      - Examples
      - Reference
    - waba, lua, tcl, perl...
    - Future client libraries:
      - C++
      - cli_c2
  - pgserver
    - Coding conventions
    - Theory of pgserver's layout and rendering
      - The divtree
      - gropnodes and groplists
      - Abstract video interface
      - The role of themes
      - PicoGUI from the widget's point of view
    - Source tree organization
    - Widgets
      - Widget object model and subclassing
      - Overview of how all existing widgets are implemented
      - How to write new widgets
    - Video
      - Intro to video drivers, video wrappers, and video base libraries
        - Rotation support
        - Rootless support
      - Overview of existing video drivers and video base libraries
      - How to write new video drivers and VBLs
    - Input filters
      - Writing server-side input filters and input drivers
      - Client side input filters and input drivers
    - Application manager
      - How the app manager communicates with the application and with widgets
      - Current app managers
      - Ideas for future app managers
    - Network layer
      - Overview of data flow from an application to an internal call
      - TCP/IP interface
      - The server's main loop
    - Memory management
      - Handles
      - The memory debugger
    - Debugging
      - Exception handling in pgserver
      - Compile-time debug options
      - Magic keys
      - guru() and DBG()
      - Benchmarking
    - Text
      - Fonts
        - Common interface for font engines
        - The built-in BDF engine
        - The freetype engine
        - Support for text-mode video devices
        - Support for OpenGL
      - pgstring
        - Unicode support
        - Encodings
    - Format loaders
      - Image formats
        - Image format loader interface
        - Existing image format loaders
      - Text formats
        - Text format loader interface
        - Existing test format loaders
    - Configuration management
      - Compile-time configuration
      - Runtime config variables
    - Operating system interface
      - Timers
      - Networking
      - Filesystem
      - Shared memory
    - Theme system
      - Theory behind PicoGUI themes
      - The theme file format
      - In-memory representation of themes
      - Themes from the widget's point of view
      - Theme compiler
    - Widget templates
      - Theory behind widget templates
      - Binary WT file format
      - In-memory representations
      - Loading WTs
      - Instantiating WTs
      - XML widget templates

The End