Author Topic: GUI Libraries  (Read 17423 times)

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
GUI Libraries
« on: 8 December 2008, 11:38:49 »
My comparison hasn't been as thorough as I would like but I did find out more about the libraries. I'll talk about some things I noticed here and below are some information about each one. I've also included Allegro and Glut based libraries below them and then beyond that some information on designing GUIs.

A lot of them are quite old, discontinued and don't have large communities. The most active ones would be GuiChan with last release 26 April 2008, and CrazyEddie with last release 3 December 2008.

Most have the basic features, some have less and some have much more. CEGUI seems to have the most features followed by bramstein.

The sizes I've put are just the download file. They might include compiled libs, tutorials, examples, etc.

To choose a library we need to know what we require. Here is what I think we should have:
A skinning system (probably TinyXML)
Components (check box, radio button, text edit, combo box, list with scroll bars, progress bar, tooltips, movable windows, button, label)
Customizability
Make and VS build
Integrate with TGA images
Integrate with SDL and win32 (ie independant of windowing system)

Some nice things to have:
Graphical Editor
Clipboard
Save state
Drag and drop
Menu Bar
Context Menu
Tabs
Dialogs (save/open file, etc)
Docking

############ Information ###################

URL:
Code: [Select]
[url=http://www.rightbraingames.com/tech/]http://www.rightbraingames.com/tech/[/url]Description: It supports hardware rendering of multiple user interface windows into separate texture buffers to improve performance and allow for complex animation effects.
Size: 7mb zip with ogre example,
No. Dependencies: Mocha, Freetype 2
Ease of Use:
Ease of integration:
Features: ok but some basics missing, ogre support
Documentation: readme file, doxygen but needs building
OS: Only Windows supported but apparently cross platform
Support/Maturity/Community/Status: seems to have a lot of work to go and not that active
Build: VS files

URL:
Code: [Select]
[url=http://guichan.sourceforge.net/wiki/index.php/Main_Page]http://guichan.sourceforge.net/wiki/index.php/Main_Page[/url]Description: A portable C++ GUI library designed for games using Allegro, HGE, OpenGL, OpenLayer and/or SDL.
Size: 544KB tar.gz with examples
No. Dependencies:
Ease of Use: seems fairly easy
Ease of integration: don't know
Features: decent amount
Documentation: API, FAQ, partial User Guide and Tutorials (including sdl)
Support/Maturity/Community/Status: v0.8.1
Build: Multiple compilers
Limitations: No dirty rectangle system, No marking of text, No drag and drop, No clipboard

URL:
Code: [Select]
[url=http://www.bramstein.com/projects/gui/]http://www.bramstein.com/projects/gui/[/url]Description: GUI library for prototyping and building game user interfaces. It is based on OpenGL and written in (portable) C++. The library is completely free and open-source.
Size: 7MB zip with libs and project file
No. Dependencies: no extra
Ease of Use:
Ease of integration:
Documenation: SDL examples,
Appearence: Source based themes
Features: adequate
Support/Maturity/Community/Status: The library is no longer maintained due to a lack of time.

URL: http://sjgui.sourceforge.net/
Description: gui framework for use in interactive OpenGL applications.
Size:
No. Dependencies:
Ease of Use: seems easy enough
Ease of integration: should be ok, might require taking over windowing
Documentation: Lessons, API
Appearence: doesn't look fantastic, source based templates?
Features: very basic, text edit, check box
Support/Maturity/Community/Status:

URL: http://www.cegui.org.uk/wiki/index.php/Main_Page
Description: Crazy Eddie's GUI System is a free library providing windowing and widgets for graphics APIs / engines where such functionality is not natively available, or severely lacking. The library is object orientated, written in C++.
Size: 3.4MB zip includes some samples, project files
Dependencies: FreeType2, Perl C Regular Expression, some optional ones
Ease of Use:
Ease of integration:
Appearence: XML skinning
Documentation: Tutorials, FAQ, API
Features: Might be possible to use with tinyxml, devel layout editor
Support/Maturity/Community/Status: 3 December 2008 CrazyEddie (0.6.2 released)
Notes: they seem to be changing from xerces to expat for xml but have tinyxml in the download

URL: http://glam.sourceforge.net/
Description: The GLAM toolkit is an OpenGL-based cross platform user interface toolkit for creating 2D or 3D user interfaces.
Size: Sugar 49KB, GLAM 249KB, glamrock 118KB
No. Dependencies: 2 (glamrock, sugar - http://www.sourceforge.net/projects/libsugar)
Ease of Use:
Ease of integration: Don't know
Features: OpenGL transformations, radio button, button, text, status bar, windows, check box, menu, sroll bar, slider, tooltips, containers
Documentation: handbook, GLAM api (missing glamrock api)
Appearence: glamrock has a custom config theme system
Build: autoconf and make
Support/Maturity/Community/Status: Beta, no activity in trackers or forum
Thoughts: Documentation is quite good

URL: http://glgooey.sourceforge.net/#Info
Description: GLGooey is a platform-independent, small, extensible collection of user interface components rendered using OpenGL.
Size: 1.8MB zip including samples, project files
No. Dependencies: libpng and zlib if using png
Ease of Use:
Ease of integration: need to figure out how to use with sdl
Documentation: api and examples using GLUT
Appearence: XML Skinning
Features: Numerous components, docking, sigslot (Signals and Slots), TinyXML, freetype
Build: make
Support/Maturity/Community/Status:

URL: http://jet.ro/turska/
Description: Turska is a compact and simple framework & UI component library.
Size: 3.3MB zip with Irrlict framework
No. Dependencies:
Ease of Use:
Ease of integration:
Features: very basic
Support/Maturity/Community/Status:

URL: http://libufo.sourceforge.net/
Description: LibUFO is a C++ core library for forms respectively graphical user interfaces (GUI). It is mainly used as OpenGL GUI toolkit.
Size: 748KB tar.gz (src and includes are about 2MB uncompressed)
No. Dependencies: pkg-config
Ease of Use: looks ok
Ease of integration: meant to work with openGL and SDL, works with tga images
Appearence: KDE theme files and (XML User interface Language with tinyxml?) and css style themes
Documentation: examples, tutorials, api
Features: button, popup, combo box, docking, label, radio button, sliders, text edit, progress bar, menu, check box, button, tab, custom 3d widgets and more
Build: Any ISO compliant compiler, pkg-config, make, vs
Support/Maturity/Community/Status: 2005-10-29    0.8.4 (ie old)

URL: http://aedgui.sourceforge.net/
Description: aedGUI is a cross-plataform, easy-to-use, non-intrusive C++ GUI library that runs on top of SDL, providing themeable widgets without learning Yet Another API.
Size: 748KB zip
No. Dependencies:
Ease of Use:
Ease of integration:
Features: ok amount, tinyxml
Documentation: small info on theme, example
Appearence: Source, xml
Build: make and vs project files
Support/Maturity/Community/Status: v0.1.8a

URL: http://gigi.sourceforge.net/
Description: GUI library for OpenGL
Size: 2MB zip
No. Dependencies: FreeType, DevIL, and Boost.
Ease of Use:
Ease of integration:
Features: Signals and Slots, save state, drag and drop, basic components, some predefined dialogs
Appearence: XML, basic editor
Documentation: API, source based tutorials, build info
Support/Maturity/Community/Status: 0.7.0, not any community
Build: SCons

URL: http://sourceforge.net/projects/openglui
Description: OpenGLUI is a cross platform XML based GUI for OpenGL.
Size: < 2MB
No. Dependencies: TinyXML, maybe others
Ease of Use: Very
Ease of integration: Should be ok
Features: basic components, predefined defaults, very well written code, not a library
Appearence: simple XML
Documentation: example app
Support/Maturity/Community/Status: 0.85, not any community, last commit about 2 years ago
Build: comes with VS project and make

####### GLUT or ALLEGRO or other based ##############

URL: http://www.codeplex.com/buttermilk
Description: XNA game / GUI engine that was being built for the game "Rogue Bishop".
Support/Maturity/Community/Status: DISCONTINUED

URL: http://members.allegro.cc/miran/masking.html
Description: library for writing GUI's in C++. It is an addon library for the Allegro  game programming library which means that it only works with Allegro.

URL: http://adime.sourceforge.net/
Description: Adime is a portable add-on library for Allegro with functions for generating Allegro dialogs in a very simple way.

URL:
Code: [Select]
[url=http://www.orbitalmindsoft.com/nasgui.html]http://www.orbitalmindsoft.com/nasgui.html[/url]Description: A Skinnable GUI Library for the  Allegro Game Programming Library

URL: http://glui.sourceforge.net/
Description: GLUI is a GLUT-based C++ user interface library which provides controls such as buttons, checkboxes, radio buttons, and spinners to OpenGL applications.

URL: http://glow.sourceforge.net/
Description: The GLOW Toolkit is a cross-platform object-oriented framework for building interactive applications using OpenGL or similar APIs such as Mesa. It is, at its heart, an C++ wrapper for GLUT.

URL: http://plib.sourceforge.net/pui/index.html
Description: The Picoscopic User Interface (PUI - pronounced 'poohey') is a simple set of C++ classes that allow programs written in GLUT and OpenGL to create buttons, sliders, menus etc.

########## Other Information about GUIs #################
http://www.doolwind.com/blog/?p=52
Code: [Select]
[url=http://www.rivermanmedia.com/programming/5-object-oriented-game-programming-the-gui-stack]http://www.rivermanmedia.com/programmin ... -gui-stack[/url]http://unity3d.com/support/resources/un ... -easy.html
http://sol.gfxile.net/imgui/
http://www.picogui.org/

EDIT: added more information for LibUFO
EDIT 2: added RightBrain GUI
EDIT 3: added PUI
EDIT 4: added OpenGLUI thanks to Silnarm.
« Last Edit: 15 April 2016, 02:53:08 by filux »
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

Omega

  • MegaGlest Team
  • Dragon
  • ********
  • Posts: 6,167
  • Professional bug writer
    • View Profile
    • Personal site
Re: GUI Libraries
« Reply #1 on: 8 December 2008, 15:52:59 »
Allegro is kinda neat. I tested it once for making a simple game, and it worked fine. Synastix was annoying though.
Edit the MegaGlest wiki: http://docs.megaglest.org/

My personal projects: http://github.com/KatrinaHoffert

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #2 on: 9 December 2008, 12:51:14 »
Allegro seems ok but there isn't much point using it for Glest when it already uses SDL.  I also think SDL should replace the win32 code because it uses that anyway and features like the fullscreen toggle would work for Windows.

Anyway back to GUI Libs. I've had more of a look and I really like LibUFO. It has lots of features, seems easy to use and integrate, has theme support and decent documentation. The themes are split into two types of files: one for defining the components (XML) and the other for creating the look (CSS). People who have made a website will be familiar with this. The biggest issue I can see is that it's last release was in 2005 but if it works that shouldn't be a problem.

I've narrowed down the list and ordered these five according to which one I think we should choose:
1. LibUFO - http://libufo.sourceforge.net/
2. CEGUI - http://www.cegui.org.uk/wiki/index.php/Main_Page
3. glgooey - http://glgooey.sourceforge.net/#Info
4. glam - http://glam.sourceforge.net/
5. bramstein -
Code: [Select]
[url=http://www.bramstein.com/projects/gui/]http://www.bramstein.com/projects/gui/[/url]
I'm going to become familiar with LibUFO now and make a plan for integrating it into GAE. Then I can start work on some more features. (ie. lobby) :D
« Last Edit: 15 April 2016, 02:54:23 by filux »
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

Omega

  • MegaGlest Team
  • Dragon
  • ********
  • Posts: 6,167
  • Professional bug writer
    • View Profile
    • Personal site
Re: GUI Libraries
« Reply #3 on: 9 December 2008, 15:45:53 »
Ah, css. Finally something I'm good at! Does this mean normal people would just be able to go and change the theme through a simple cascading style sheet?
Edit the MegaGlest wiki: http://docs.megaglest.org/

My personal projects: http://github.com/KatrinaHoffert

mictes

  • Guest
Re: GUI Libraries
« Reply #4 on: 9 December 2008, 19:12:28 »
Uhuu, that sounds good ^^
I'm a pro in css (w3c validated css *brag* ^^).

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #5 on: 9 December 2008, 23:45:37 »
Quote
Does this mean normal people would just be able to go and change the theme through a simple cascading style sheet?
Exactly.

Here are some snippets from their example.
Quote from: "gui.xul"
<listbox id="listbox" rows="4">
      <listitem label="item1"/>
      <listitem label="item2"/>
      <listitem label="item3"/>
      <listitem label="item4"/>
      <listitem label="item5"/>
    </listbox>

Quote from: "gui.css"
listbox {
    opacity: 0.8;
}

/* CSS class ids */

.serif {
   font-family: serif;
}

.colored {
   color: #ff0000;
   background-color: #D0D3E4;
}

EDIT: I got another thought. If we can use this with lua we can have custom GUI for scenarios.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #6 on: 10 December 2008, 03:28:32 »
You're awesome hailstone!! I don't have much time to read through all of this right now because I'm trying to get some code finished, but when I get some real time (after 0.2.11 is released) I'm going to go over this with a fine tooth comb.  I agree about maintenance, that libufo looks so cool, but not being maintained stinks :(  And I'm 100% on with lua being able to alter GUI, add menu options (perhaps right click pop-up menu that can be added or changed via lua for a custom mod, scenario, etc.).

Omega

  • MegaGlest Team
  • Dragon
  • ********
  • Posts: 6,167
  • Professional bug writer
    • View Profile
    • Personal site
Re: GUI Libraries
« Reply #7 on: 11 December 2008, 15:54:59 »
That's better than awesome!
I'm pretty good as css, classes, IDs, everything.
For example, on the new version of the HTML guide for glest that I creating uses a css that has margins at the left, and sets up a number of things for me so that I can just say:
Code: [Select]
.text1 {
 margin-left: 5%;
 text-align: justify;
 font-family: times new roman, serif;
 font-size: 14pt;
}
 .highlight {
 font-family: times new roman, serif;
 font-size: 14pt;
 background-color: #55f;
}
To position all my text, I could just give my paragraphs a
Code: [Select]
<p class=text1>TEXT HERE</p> tag. Saves my time, space, and a lot of typing!
Edit the MegaGlest wiki: http://docs.megaglest.org/

My personal projects: http://github.com/KatrinaHoffert

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #8 on: 22 December 2008, 06:43:23 »
I've been able to compile the test examples and here are two of them so you can get a taste of the features available and test out the css and xul. I'm not sure how many of the identifiers are included. The next step is to get it working in Glest. I should be using GAE 0.3 branch?

http://www.w3.org/Style/CSS/
http://www.xulplanet.com/
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #9 on: 22 December 2008, 15:09:37 »
hmm, that's a tough question to answer right now because I have 0.2 really broken and I'm about to commit my code because I have to be able to get to it remotely from my laptop :(  on the bright side, the file layout shouldn't change too greatly after that.  (I'm going to have hell merging it back into 0.3.x though)

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #10 on: 22 December 2008, 23:11:50 »
OK. I'll get it working in 0.2 branch and take notes. That way when it is all fixed up I can redo it in 0.3 and commit without it being a hassle. From what I've seen of the examples it shouldn't be too hard.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #11 on: 25 December 2008, 09:46:37 »
wow, by the way, I coudln't get the sample you posted to work on my linux box because I was missing some version of some dll, but it runs on my windows laptop and I was really impressed!! :)  Well have to check it out more later though!

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #12 on: 25 December 2008, 12:32:17 »
Yer, I forgot to mention it was for Windows. It is being a little more difficult including it in Glest but hopefully I will work it out.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #13 on: 29 December 2008, 09:02:56 »
ok, If you want to do an update, you can but it does a radical alteration to the directory structure.  Be sure and make a backup of your working files before doing the update just to make sure! :)  I'm going to try to finish the network implementation next week, it's a pretty radical departure from the previous, but I think it'll work out alright in the end (once all the kinks are worked through).

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #14 on: 2 January 2009, 08:07:05 »
I'll just wait until you've sorted it out.  :P

I've made some progress. I was making a novice mistake that was causing it to crash but now I've fixed that I got it to render, sort of, with other Glest rendering. It seems to mess up the OpenGL somehow. I also need to work on event processing.

UPDATE:
I have good news. The rendering of the gui is working good and I have the event processing mostly sorted out, just needs some tweaking. The only problem is the original rendering.

[attachment deleted by admin]
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

wciow

  • Behemoth
  • *******
  • Posts: 968
    • View Profile
Re: GUI Libraries
« Reply #15 on: 4 January 2009, 15:58:29 »
Nice work Hailstone :?

Will this be replacing the current icon/command boxes or just rendering new stuff on top?
Check out my new Goblin faction - https://forum.megaglest.org/index.php?topic=9658.0

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #16 on: 4 January 2009, 17:07:24 »
looking good hailstone! :)

hailstone, I'm not too thrilled that ufo appears to be semi-dead as it means we're likely to have to fix bugs and add functionality to it.  None the less, it looks pretty cool and and also uses tinyxml, all the more reason to follow through with getting rid of xerces-c.

One quick note on the MenuStateNewGame and MenuStateLoadGame UIs, there's a lot of overlap, some of which I've tried to eliminate with the MenuStateStartGameBase class, so when we actually go to re-code these, I definitely want to get rid of all of the overlapping functionality.  Also, the network interface contracts are changing as is the GameSetting class, so just heads up on that.  When somebody is starting a new network game and at least one person is connected, I'm going to transmit the GameSettings object a max of once per second so that all network clients can see what type of game they are about to play.  I've eliminated the update(), updateLobby() and updateKeyFrame() functions from the network classes (except for the NetworkStatus base class, it still has an update() to manage pings and such).  All of this is replaced by just having a separate thread manage network communications and implementing network interface objects using a finite state machine pattern (so certain messages are valid during certain states, etc.).

Anyway, nice work! :)

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #17 on: 5 January 2009, 03:45:06 »
I fixed the graphics problem. It was to do with face culling.

Quote from: "Daniel"
hailstone, I'm not too thrilled that ufo appears to be semi-dead as it means we're likely to have to fix bugs and add functionality to it.
Yer, especially when there is "//FIXME: mem leak."   :? [/quote]
The hope is to replace all the old gui components but I currently have them working together.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #18 on: 7 January 2009, 11:52:09 »
I'm glad you got the rendering issues fixed!! :evil:  but I'd say we'd have to work on whatever lib we chose anyway even if later than sooner. This one seems to be made pretty well and hasn't been too difficult to integrate.[/quote] LMAO!!!! Wheee!! :(

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #19 on: 8 January 2009, 05:55:47 »
I'm thinking since 0.2 is meant to be a stable release it wouldn't be too good to introduce a new feature. So I think 0.3 would be best even if it will take a bit longer.

It's having a problem where it crashes starting a second game so I will need to fix that anyway. You'll need to sort out how the keyboard input works with your new code. I have the mouse input mostly working but because it is y-inverted the positions need to be converted and it isn't exactly right atm.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

daniel.santos

  • Guest
Re: GUI Libraries
« Reply #20 on: 12 January 2009, 19:58:03 »
Heya hailstone,

I couldn't post initially, but my account is fixed now.  I sent you an email but I thought I would post in case I sent it to an account you don't check often.  Basically, I've merged all of the current changes in the 0.2 branch (what is currently 0.2.12-wip) into 0.3 and both branches now build and play in single player mode.  There are various defects here and there (battle ending screen doesn't display, etc.), but they aren't defects I'm concerned with at the moment and they won't interfere with any development on normal single player issues or any of the GUI changes, so you're clear to take off on that! :)

As for 0.2, I'll probably resume work on that in a day or two, as I won't have much time right now.  My main development priority is still a solid working multiplayer implementation (thanks for the links on those topics by the way! :) )

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #21 on: 15 January 2009, 03:42:44 »
I check that email regularly I'm just slow at replying. I wasn't sure if you got my reply either until you sent me another email. I'm checking out 0.3 as I type. I'm hoping to have the gui lib integrated by this or next week. Will need a bit more time to replace all the gui though.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #22 on: 18 January 2009, 11:57:35 »
It seems I've ran into a bit of a problem with LibUfo. It doesn't seem to be possible to change the image of the button with css; only things like colour and font types. So there are three options now: try to use a sources based theme to change this, add the feature to change images via css or use a different library.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

hailstone

  • Local Moderator
  • Battle Machine
  • ********
  • Posts: 1,568
    • View Profile
Re: GUI Libraries
« Reply #23 on: 30 January 2009, 07:37:29 »
I'll probably go with a different library. Currently trying to decide between CEGUI and glGooey. CEGUI has more features, such as mouse images and lua scripting, but is more difficult to setup and use.

I have compiled glGooey successfully and made up a fake Glest menu using the Glest button and xml files (on Windows). Download glest_menu.zip



If I can't get CEGUI to work soon I'll go with glGooey because that is all we need at the moment.
Glest Advanced Engine - Admin/Programmer
https://sourceforge.net/projects/glestae/

charlieg

  • Guest
Re: GUI Libraries
« Reply #24 on: 30 January 2009, 08:46:32 »
Since glGooey looks long-since (4-5 years) without development, and the support forums no longer exist, the decision should be made with an explicit acceptance that any fixes to problems with glGooey or any additional features are going to have to come from the GAE team.