3rd party Applications

I have added some links to applications which use libUFO.

-- Johannes Schmidt


As the actual 0.8.0 release has been postponed several times (exams, bugs, bla), I want to point out that there is a snapshot directory. You can find (unstable) CVS snapshots which I release from time to time.

-- Johannes Schmidt

Built-in windows WGL driver

I have added a native win32 WGL driver (i.e. you do not need libSDL anymore to run UFO applications under Windows). It's in the 0.7.2 release.

-- Johannes Schmidt

Screen shot of an upcoming UFO app.

I am working on a demonstration project for libUFO. It is a UFO port of lightspeed!. I have added a screen shot of the port in its early development state (this screen shot also shows two new widgets: ULineEdit - I have readded a single line text widget, and UCheckBoxMenuItem - an selectable menu item).

Furthermore, I have updated the download and release section as the backends are not needed anymore.

-- Johannes Schmidt

Updated GLUT backend. Some changes to the website.

Finally, there is a full working GLUT backend. Download it from the LibUGT page. It has been tested undex GNU/Linux/X11 with g++-3.3.

Some changes to the XML/XSL website creation. Added quick-downloads.

-- Johannes Schmidt

New screen shots

Yes, this project is still actively developed. I have added two interesting screen shots.

Version 0.6.4 will probably be released next week.

-- Johannes Schmidt

Readded forum, CVS update

I've readded the sourceforge forums.

I have imported the UFO 0.6.2 release candidate in the CVS tree (snapshots here). Unfortunately, I do not have access to MS VC++ 6 at the moment, so the msvc 6 project files are not yet updated. If there are any volunteers for updating those project files, please email me.

-- Johannes Schmidt

Website update and a new screen shot

I've made some updates to the website (using more CSS instead of tables). Furthermore, I've added a new screen shot of the upcoming combo box.

-- Johannes Schmidt

New screen shots, info update

There are two new screen shots, which look a bit nicer than most of the old ones.

The next UFO version is 0.6. There are several new features like a new font renderer, a new look and feel and UFO properties. You can set/get various properties via the toolkit of environment variables (e.g. look and feel, font, font/data directories, home dir, tmp dir, ...).

Additionally there will be a new X11 backend for libufo.

-- Johannes Schmidt

New website online

I've updated the website. The new website is rendered via XML/XSL and is based on the GPL'ed fresco framework from Alexander Johannessen. The source will be available soon.

-- Johannes Schmidt

UFO 0.5.2 released

This release features a platform independent access to the event queue and many bug fixes.

I have updated the LibUSDL backend as well as the Tutorials. Furthermore I have (more or less) finished the LibUGT backend. Most parts are working now.

Unfortunately I didn't have the time to update the msvc project files. I will create them upon request.

Please Download and send Feedback!

-- Johannes Schmidt

UFO 0.5.0 released

It's high time for a new release. The last version was released more than a half year ago. This is almost a complete rewrite of the UFO API.

Major changes:

  • Removed garbage collector dependency. We are using now a custom reference counting memory tracking.
  • C++ and include namespaces
  • signals and slots replace listener system.
  • UPoint, UDimension, URectangle and UInsets have been changed to basic, inlined types.
  • Added mouse wheel event.
  • Added focus manager.
  • Added repaint manager and repaint on demand.
  • Changed custom Type naming convention to match the naming convention classes.
  • header files have .hpp as extension.
  • GNU systems: replaced *-config files with pkg-config config files.
  • Separated headers and sources for simpler installations. Improved automake makefiles and removed recursive makefiles.
  • Many bug fixes.

See the Changelog file within the 0.5 release for further details.

Version 0.5.0 is still an alpha release. No Warranty! It has been tested with g++-3.2 and MS VC++ 6

Please download and send feedback!

-- Johannes Schmidt

info update

Some updates to the style sheets.

I have uploaded new snapshots of UFO 0.5 and USDL 0.5 to the sourceforge download page.

Any MSVC 6/7 hackers out there? I need working project files for the upcoming 0.5 release. Please contact me if you are interested in creating msvc project files.

I started my physics studies at Oct 14. This may slow down a bit my work on libUFO.

-- Johannes Schmidt

website update

The libUFO website now uses CSS to render its content.

I have added a new screen shot.

The current code within the CVS tree will likely become UFO 0.5.

-- Johannes Schmidt

0.5 snapshot

I have uploaded snapshots of UFO 0.5 and USDL 0.5 to the sourceforge download page.

The code has been tested with g++-3.1 and MS VC++ 6. On request I can upload msvc project files.

Please note: This code is for testing only - DO NOT REDISTRIBUTE!
These packages come with absolutely NO WARRANTY. They also come without meat, for those on a restricted diet.

Any feedback is appreciated.

-- Johannes Schmidt

CVS update

I have imported the UFO 0.5 API in the cvs tree. The new modules are ufo-0.5 and usdl-0.5. See the sourceforge CVS page on details for checking out.
LibUFO 0.5 uses pkg-config for its build system and removed the *-config scripts.

-- Johannes Schmidt

info update

LibUFO 0.5 will be almost a full rewrite. The garbage collector dependency will be removed, signals and slots will be used, namespaces will be used (C++ as well as 'include namespace'). I am trying to release a first 0.5pre snap shot till weekend.

-- Johannes Schmidt


I am about changing the memory management of libUFO. Since most people do not like garbage collectors very much, I've set up a survey about the upcoming memory management. There are 3 choices:

  1. the garbage collector (like today)
    Advantage: very easy to use
    Disadvantage: restricted portability, need for special STL container allocators
  2. handler/reference classes. The actual data is placed in pimpl like implicitly shared classes.
    Advantage: No need for explicitly setting ref counts;
    Disadvantage: not as easily extensible as today, more overhead.
  3. classic reference counting.
    Disadvantage: possibly more lost objects, slightly higher overhead (at least for the user)

Please vote and/or send feedback.

-- Johannes Schmidt

API doc update

I have uploaded an updated version of the API doc - made with doxygen.

Furthermore, I have realized that we are already in July and therefore I have fixed the date of the last posting ;)

The last news for today:
Version 0.5 will introduce some changes to the current API.

  • I have decided to replace the listener thing with a signal and slot based object communication. This is more or less the same idea as before. But with slots you can use every (member) function as event callback.
  • A global config file will control the behaviour of the GUI. Possible tasks are plugin control and standard values for native 'look and feel's and font classes
  • To be continued

Thanks for any feedback.

-- Johannes Schmidt

libUFO 0.4.5 released
Major changes:
  • Changed name of UList to UListBox
  • Added UCheckBox
  • Added UList as list wrapper for collectable objects
  • Added new static colors to UColor
  • Removed the menu popup delay
  • Removed theme dependency
  • Improved look of text carets
  • Many bug fixes
  • Changed darker/brighter behaviour to accept 'factor' values
  • Changed child/listener vectors to lists to allow removal of objects during an iteration
  • Buttons remember their pressed state when a pressed mouse exits and re-enters the button

download files.

As always, please email me with questions and problems.

-- Johannes Schmidt


The last update was released quite a time ago, but at the time I am pondering about the future of libUFO.
At most I am uncertain about the event system. At the time libUFO uses the Java(TM) way, i.e. event object and listener classes for each event. The advantage is that is completely type safe, OO and very extensible. The disadvantage is that is somtimes circuitous to use. An alternative would be a signal/slot system, but this would mean a big API change to libUFO.
As such an API change would affect every user of libUFO, I want to ask you. Therefore I have set up a sourceforge survey.

Thanks for any feedback.

-- Johannes Schmidt


Added new screen shot which shows a preview of the new 0.4.4 version.

Fixed broken download links for USDL.

-- Johannes Schmidt


Next week, I will be on holiday in Italy (I have really deserved it ;-).
Enjoy the weather and get a little sun!

-- Johannes Schmidt

to UTexture and UImageIO. Now, you don't have to specify a full qualified name, if you want to load images from the archive.
  • Moved image related stuff to src/image
  • new (In-)Validation API. You can now specify exactly what you want to (in-)validate via UWidget::VALIDATION_LAYOUT, UWidget::VALIDATION_UI, UWidget::VALIDATION_UI_INSTALL, UWidget::VALIDATION_ALL as arguments to UWidget::[in]validate(Validation). Defaults are UWidget::invalidate(UWidget::VALIDATION_LAYOUT) and UWidget::validate(UWidget::VALIDATION_ALL).
  • Some improvements in look and feel refreshing and font caching.
  • Many bug fixes
  • I have updated the windows (vc6) project files.

    download files.

    As always, please email me with questions and problems.

    libUFO 0.4.3 released
    This is an important update because a major bug in pnm loading was fixed.
    Major changes:
    • Fixed pnm loading
    • Added tga loader. Should be much more reliable than the pnm loader (thanks to Kevin Meinert).
    • Added
    loadFromArchive(const std::string&)
    -- Johannes Schmidt

    , , to UUIManager.
  • Added refresh() to UUIManager, UTheme and ULookAndFeel. Should be executed every time when GL context was destroyed and recreated
  • Added UImageIcon class for easy creation of icons via file names and UFO textures.
  • Added scroll bar widget (not yet fully implemented).
  • Deprecated classes: UTheme, UInternalFrameBorder, UButtonBorder, UMenuBarBorder, UMenuBorder
  • Many bug fixes
  • The windows (vc6) project files weren't updated (due to lack of time). On interest, I can release a vc6 version next week.

    Please note: You need an updated backend to use v0.4.2.

    download files.

    As always, please email me with questions and problems.

    libUFO 0.4.2 released
    This isn't really a public release as the UI system currently is within a major change. But last version was released 2 months ago so I decided to make a new (perhaps a bit unstable) release. Most user code shouldn't be affected.
    Major changes
    • Changed almost all std::string arguments to const std::string references
    • Added debug name string to UObjcet for easier debugging.
    • Added classes and files for UList, UListModel, UBasicListModel, UListCellRenderer, UListUI, UDefaultListUI, UListSelectionEvent, UListSelectionListener
    • Added several static constant colors to UColor: black, darkGray, gray, lightGray, red, green, blue, cyan, magenta, yellow, orange, pink
    • Added removeAll() to UWidget to remove all widgets at once
    • Added uint32_t getTicks() to UToolkit to retrieve the number of millisseconds since the initialization of libUFO
    • Added
    getColor(const std::string&)
    getBorder(const std::string&)
    getFont(const std::string&)
    -- Johannes Schmidt

    libUX preview released

    This week, I hacked a little example how to write an X11 backend for libUFO.

    You can download v0.1, which isn't complete but the most important things work (like event translation, ..). There is a screen shot available. Please note that you will need the current CVS version of UFO (or wait for v0.4.2, scheduled: 2002-05-04) to compile libUX 0.1. Big parts of the X11 code were taken gratefully from the freeglut project.

    -- Johannes Schmidt

    Info update

    I am back. At the time, I am working on some missing widgets (lists, scroll panes). I have uploaded a screen shot of the new list widget. So far, I have also done speed improvements and bug fixes, it's all in the CVS.

    -- Johannes Schmidt

    Info update

    No, I am not dead. I am going to write my Abitur / high school graduation and therefore all next releases are delayed. I will be back in one and a half week.

    -- Johannes Schmidt


    Readded the API-docs (made with doxygen).

    -- Johannes Schmidt


    Updated FAQ

    Added tutorial 8: key bindings to tutorials page

    Updated CVS. Mainly bug fixes and some performance improvements.

    -- Johannes Schmidt

    LibUFO v0.4.1 released
    major changes:
    • Added support for key bindings
    • Added classes UKeyStroke, UInputMap
    • Added class UProperties (for simple config file parsing)
    • Added support for mouse button information (thanks to Kai-Peter)
    • Fixed 'multiple internal frames' bug

    You can add key bindings via key strokes. You can create a key stroke from a UKeyEvent, using key syms(for key pressed/released events) or using unicode characters(for key typed events). Then, you can add a key binding via my_widget->getInputMap()->add(my_keyStroke, my_actiontListener);

    You can get the button information from a mouse event via my_event->getButton();. To determine which button was changed, compare this value to UMouseEvent::BUTTON_{LEFT|MIDDLE|RIGHT} or UMouseEvent::WHEEL_{UP|DOWN}.

    This version is neither binary nor source compatible to 0.4.0.

    Backends need an update to support v0.4.1.
    libUSDL was updated to 0.4.1.

    Please report any bugs to my contact address above.

    -- Johannes Schmidt

    libUGT (glut backend)

    Out of curiosity, I decided to release my recently hacked glut backend for libUFO, libUGT. Please consider this only as interesting code snippet as the most important parts(like event processing) are missing. There is a new screen shot of libUFO using UGT backend.

    -- Johannes Schmidt


    Added some content to the introduction.

    Fixed configure bug in libUSDL. Please redownload or edit your (set USDL_BINARY_AGE=0). And please inform me, if you find a bug within the releases.

    -- Johannes Schmidt

    LibUFO v0.4.0 released
    major changes:
    • ISO C++ compliance
    • Added MS vc6 project files
    • Added UFileArchive class for theme file loading
    • Added UCollectable as new base class for all garbage collected classes
    • Moved virtual key syms to UKey namespace. Changed prefix from VK_ to UK_
    • Moved Modifier constants to UMod namespace

    The USDL backend was updated to v0.4.

    This version was tested with vc6 and gcc-3.0. For ms vc6, you will need STLport as STL implementation for msvc. Probably, you will need STLport for gcc-2.95, too.


    -- Johannes Schmidt

    Happy New Year

    Some changes to the web site structure.

    -- Johannes Schmidt

    X-MAS releases

    LibUFO v0.3.3:

    major changes
    • Added many missing UFO_Export Macros
    • Added UDocumentFactory: This class provides some specialized Documents and should be used instead of using document classes directly. See example4 within libUSDL/test directory
    • Added UDocumentEvent and UDocumentListener
    • Added UDocumentChange interface (used by document events; not yet fully implemented)
    • Added UDocumentChange interface. This is used to filter text inserts e.g. for digit only documents.
    • Added UBasicDocument as base class for std::string documents

    LibUSDL v0.3.3:

    major changes
    • Added makeScreenShot(std::string) to USDL_Frame
    • Updated example4 to new document API

    I will be on holiday from 2001-12-26 to 2002-01-06, so don't expect any changes or releases next two weeks.

    -- Johannes Schmidt

    libUFO v0.3.2 released
    major changes
    • Migrated Event dispatching from backend to UContext
    • You can add now event garbbing or listening widgets to a context
    • Added a margin to widgets. You can specify a margin with my_widget->setMargin(int, int, int, int) or my_widget->setMargin(const UInsets*)
    • Added UFontMetrics::getCharWidth(const wchar_t)
    • Updated the Default Look And Feel
    • some other changes, see Changelog
    -- Johannes Schmidt

    libUSDL v0.3.2 released
    major changes
    • Updated USDL_EventHandler to the new event API (see libUFO contexts).
    -- Johannes Schmidt


    I forgot to say that some naming conventions have changed. There is only one 'U' within a qualifyer. For example, constants within class namespaces donīt have preceding 'U's.

    That means
    UMouseEvent::UMouse_PRESSED -> UMouseEvent::Mouse_PRESSED

    -- Johannes Schmidt

    libUFO v0.3.1 and libUSDL v0.3.1 released

    This is just a bug fix release.

    major changes
    • fixed UMenu bug. Popup menus do now display
    • fixed some text widget bugs
    • fixed UDefaultDocumentRenderer bug
    • fixed some wrong delete()
    • updated UDefaultTheme
    • fixed SDL to UFO event mapping
    -- Johannes Schmidt

    additional notes

    You can check out sources from the CVS tree with anonymus CVS access.

    modul names

    • libufo sources are in modul ufo-0
    • libusdl sources are in modul usdl-0
    -- Johannes Schmidt

    libUFO v0.3.0 released

    Yes, it is done. The new API is finally ready for a release.

    major changes
    • split libUFO in a core library and an auxiliary library. The core lib depends only on OpenGL, libgc, and the C++ STL. The dependencies of the auxiliary library is implementation dependent.
    • new abstract font layer: fonts are now derived from the interface UFont. Now, you can write your own font renderer (e.g. to implement a TT font renderer). As example and std. implementation, there is a texture font renderer, which can eliminate too big gaps between the character quads (see screen shot page).
    • Loading images: You can load and save images by creating an Object of the class UImageIO. This class is extensible with plugins for other image types. Pnm images are supported natively. (Till now only loading)
    • LibUFO does not know frames or other top level objects. All widgets are within a UContext (which has to be implemented by an aux lib) which handles all OpenGL context specific things.
    • Platform specific things (e.g. delay[==sleep]) is migrated to UToolkit which has to be implemented by an aux lib.
    • many other things I can't remember.

    If you want to port your libUFO lt 0.2.5 applications, you'll have to download libUFO-0.3 (of course) and an aux lib, currently there is only libUSDL which uses SDL as backend. Furthermore, you must include usdl.h and rename some classes:

    UApp => USDL_App
    UFrame => USDL_Frame
    UEventHandler => USDL_EventHandler
    USDL_Frame must specify an parent frame or NULL (till now there can't be more than own USDL_Frame), therefore change your USDL_Frame c'tor to new USDL_Frame(NULL, "the title for my usdl frame");

    At best, look at the example programs within the test directory of libUSDL.

    So, I have to do some other things now. I will expand this explanation on Friday (I know, this was quite confusing).

    If you have any annotations, questions, complaints, please email me.

    -- Johannes Schmidt

    2001-10-29 :
    (2001-10-29 :)

    Long awaited, now it is there: Finally, I registered a mailing list at sourceforge ( till now only a developer list; I donīt think, the source is already useable). You can register at

    -- Johannes Schmidt


    New website design.

    As seen above, I made a major API change. LibUFO was split in a core library and an extension library(libUFOX). I am trying to make quickly releases of the new API. The current version of the old API is still avaiable in the CVS tree (modul ufo). The new modul in CVS will be called "ufo-0.3".

    -- Johannes Schmidt

    libufo-0.2.5 released
    • use autoheader and a config header
    • the default value for building a static ufo library is 'no'
    • UFrame handles video expose events
    • 2 new tutorial files (use of text widgets, use libUFO in an existing SDL frame)
    • the documentation was updated
    -- Johannes Schmidt

    CVS update

    new classes:

    • UCaret: a text caret
    • UTextUI: base class for all text widget UIs
    • UDefaultTextField: a single line text area (not fully implemented)
    • UDefaultTextPane: a multi line text area (not yet implemented)
    • UDefaultTextFieldUI (not fully implemented)
    • UDefaultTextPaneUI (not yet implemented)
    new interfaces:
    • USDLReceiver: contains just one abstract method: handleEvent(const SDL_Event*)
    major changes:
    • you can add USDLReceiver to the UEventHandler receivers
    • event handling: only the bottom most widget receives mouse events
    • some changes to text API
    • many bug fixes
    -- Johannes Schmidt

    CVS update
    new classes:
    • UDocument: an interface for a text container
    • UDefaultDocument: a sample implementation for a plain text Document
    • UDocumentRenderer: an interface for a text renderer
    • UDefaultDocument: a sample implementation for a plain text renderer
    • UTextWidget: base class for all text widgets. It contains a UDocument and a proper document renderer. You can specify a content type with an string, till now only text/plain is supported.
    major changes:
    • buttons indicates if they have the focus
    -- Johannes Schmidt

    libufo-0.2.4 released
    This time I was really quick :)
    major changes:
    • respect for namespace std ( really, this time it should be true :P)
    • this code can be compiled with gcc-3 ( at least on my system )
    • fixed UMenu bug
    -- Johannes Schmidt

    libufo-0.2.3 released
    major changes:
    • the UMouseEvent class has now a function getClickCount() so that the user can retrieve how many times the mouse was clicked ( e.g. 2 for a double click )
    • respect for namespace std
    • Alignment support for widgets
    • Alignment support for UFlowLayout
    • New UEventHandler class, which notifies its receivers when a SDL event was fired. The event handler itsself is registered at the UApp instance, to get SDL events.
    • I have made a few examples to learn libUFO
    • many bug fixes
    -- Johannes Schmidt

    • there are test binaries of the current CVS tree on the sourceforge server ( rpm, deb and tar.gz ).
    -- Johannes Schmidt

    added horizontal and vertical alignment to CVS
    -- Johannes Schmidt

    libufo-0.2.2 released
    major changes:
    • new event handling (down - top). A frame that receives a SDL event now determines with getVisibleWidgetAt(int,int) the widget that should process the event. The event is also posted to the parent widgets.
    • use of dynmaic_cast. I removed the C stylish casts. Perhaps, the class name and instanceof things in UObject will be removed, too, because I realized that they are unnecessary.
    • I implemented a layered pane. The root pane widget uses now layered panes to display the sub widgets( content widgets, internal frames, popup menus) in the correct drawing order.
    • I implemented a border layout ( like the java(TM) border layout ). It is used by internal frames.
    • Widgets have now properties. You can acces them by UWidget::put(std::string, UObject*) and UWidget::get(std::string).
    • I wrote wrapper classes for std::string and int (UString, UInteger) to save string and int values in the widget properties.
    • many bug fixes
    -- Johannes Schmidt


    Ok, I was on holiday last week. No changes.

    -- Johannes Schmidt

    libufo-0.2.1 released

    better support for menus.

    working on internal frames.

    -- Johannes Schmidt


    Ok, it's the first time using the NEWS board.

    -- Johannes Schmidt

    Sourceforge.netValid HTML 4.01!Valid CSS!Johannes Schmidt
    Compiled: Fri Apr 7 15:33:34 CEST 2006