DEPUI, DEGFX and DETK
Portable gui, graphics and toolkit source code libraries under a GPL licence
Download DEPUI 3.0 (stable) (includes DEPUI, DEGFX and DETK)
Page at Freshmeat
Work-in-progress DEPUI 3.1 WIP and history
Doug Eleveld (deleveld@dds.nl)
DEPUI 3.0 - A GPL portable gui library

DEPUI is a small extremely portable user interface library. It uses an object oriented C API with reference counting for many of the objects. Platform dependant functions are all kept in a single file and allow run-time theme changes. DEPUI is independant of the supporting graphics library, all platform dependent functions are in a single file. Support for platforms DEGFX and Allegro is included.
DEGFX 1.0 - A GPL portable graphics library

DEGFX is a small extremely portable graphics library. It has only 6 (!) platform dependant functions. It uses a clean object oriented C API with reference counting and delete locking for (almost) all the objects. The library supports transparency for bitmaps and all drawing functions and antialiased fonts. The user has very fast pixel level access to bitmaps using iterators. DEGFX has no external library dependencies. Compared to other portable graphics libraries DEGFX is: DEGFX uses a different approach than most graphics libraries. Some Features:
DETK 1.0 - A portable toolkit library
DETK is a small toolkit library for commonly used functions
Library structure diagram for DEPUI, DEGFX and DETK
If DEPUI platform is set to DEGFX then the library structure is:
    +------------------------------------------------------------+
    |                        DETK library                        |
    +----------------+-----------+-------------------+-----------+
                     |           |                   |
                     |           |                   |
    +------------+---+---+-------+-------+           |
    |  Hardware  |       |               |           |
    +------------+       |               |           |
    |  struct MX_DRIVER  |               |           |
    +--------------------+               |           |
    |           DEGFX library            |           |
    +----------+-------------------------+           |
               |                                     |
               |                                     |
    +----------+---------------+---------------------+-----------+
    |  Platform/Theme driver   |                                 |
    +--------------------------+                                 |
    |                        DEPUI library                       |
    +------------------------------------------------------------+

Another possibility is if DEPUI uses Allegro as its platform:
    +----------+---------+---------------+
    |      Hardware      |               |
    +--------------------+               |
    |               Allegro              |
    +----------+-------------------------+
               |
               |                       +-------------------------+
               |                       |      DETK library       |
               |                       +-------------+-----------+
               |                                     |
    +----------+---------------+---------------------+-----------+
    |  Platform/Theme driver   |                                 |
    +--------------------------+                                 |
    |                        DEPUI library                       |
    +------------------------------------------------------------+

Inheritance tree for DEPUI, DEGFX and DETK
DEGFX main functions:
    mx_guimain
    mx_start
    mx_execute

    MX_VECTOR - An almost typesafe C vector for objects of any size
       mx_vector
       mx_vector_free
       mx_vector_set
       mx_vector_reserve
       mx_vector_append
       mx_vector_remove
       mx_vector_insert
       mx_vector_resize
       mx_vector_contract

    MX_STRING - Small class for string handling
       mx_string
       mx_string_free
       mx_string_set
       mx_string_text

    MX_RECT - Simple rectangle

    MX_EVENT - Gui event type
       mx_event
       mx_emit
       mx_inform
       mx_answer 

    MX_ATOM - Base class for reference counting
     | mx_delete
     | mx_lock
     | mx_unlock
     |
     +- MX_FONT - Normal or antialiased fonts
     |     mx_font_draw
     |     mx_font_drawblock
     |     mx_font_width
     |     mx_font_height
     |     mx_font_blocksize
     |     mx_font_bitmap
     |     mx_font_pcx
     |
     +- MX_RECTATOM - Reference counted rectangle
         | mx_x1
         | mx_y1
         | mx_x2
         | mx_y2
         | mx_w
         | mx_h
         |
         +- MX_BITMAP - 32 bit RGBA bitmap
         |     mx_bitmap
         |     mx_bitmap_tga
         |     mx_bitmap_pcx
         |     mx_iter
         |     mx_getpixel
         |     mx_pixel
         |     mx_vline
         |     mx_hline
         |     mx_rect
         |     mx_blit
         |     mx_blittrans
         |     mx_blitcopy
         |     mx_blitstretch
         |     mx_box
         |     mx_frame
         |
         +- MX_OBJ - Gui base object
             | mx_obj 
             | mx_x
             | mx_y
             | mx_resize
             | mx_move
             | mx_position
             | mx_place
             | mx_geometry
             | mx_defaultrect
             | mx_armed
             | mx_armable
             | mx_is_armable
             | mx_selected
             | mx_selectable
             | mx_is_selectable
             | mx_disabled
             | mx_arm
             | mx_select
             | mx_disable
             | mx_focus
             | mx_unfocus
             | mx_wantmove
             | mx_layout
             | mx_top
             | mx_dirty
             |
             +- MX_WINBORDER - Border for a window
             |
             +- MX_SLIDER - Drag/click slider
             |     mx_slider 
             |     mx_slider_set
             |     mx_slider_to
             |     mx_slider_value
             |
             +- MX_TEXTUAL - Base class for objects with text
                 | mx_textual
                 | mx_text
                 | mx_text_set
                 | mx_text_align
                 | mx_text_align_get
                 | mx_text_height
                 | mx_text_width
                 |
                 +- MX_BUTTON - Clickable button
                 |   | mx_button
                 |   |
                 |   +- MX_LISTELEM - Clickable element for a MX_LIST
                 |         mx_listelem
                 |
                 +- MX_SCROLL - Generic scrollable area
                 |   | mx_scroll 
                 |   |
                 |   +- MX_LIST - Vertical list of selectable objects
                 |         mx_list
                 |         mx_list_select_id
                 |         mx_list_selected_id
                 |         mx_list_selected
                 |         mx_list_append
                 |         mx_list_multiple
                 |         mx_list_iter
                 |
                 +- MX_WIN - Standard (or child) window
                     | mx_win
                     | mx_active
                     | mx_activate
                     | mx_child
                     | mx_modal
                     | mx_win_dirty
                     |
                     +- MX_GFXMODE - Graphics mode and theme selector
                     |     mx_gfxmode
                     |
                     +- MX_FILESEL - File selector
                           mx_filesel
                           mx_filesel_info 
                           mx_filesel_path
                           mx_filesel_refresh