I've been doing console programming for a few years, and now it's about time that I learned a little about the fascinating world of GUIs. I've dabbled a little in wxWidgets; compiled a Hello World program, played around with it a little, etc.
Now I'm one of those people who have the "low-level curse": I'm not happy with knowing how to use something to good effect - I want to know what's going on under the hood, even if it's of little or no practical value.
So I've been reading up on the subject (e.g. here), but I'm finding it hard to wrap my head around all the different systems, toolkits and what they do. So far I've figured out that (please correct me if I'm wrong):
- Linux itself is "just" a Kernel; it does not provide GUI support (?).
- The X Window system is at the base of GUIs on most UNIX-like systems.
- GTK is a GUI toolkit, Qt contains a GUI toolkit. GTK and Qt are at the same "level" (?).
- Gnome is a desktop environment built on GTK, KDE is built on Qt.
- wxWidgets is a library that wraps around (?) lower-level toolkits, like GTK, thus providing cross-platform benefits.
- OpenGL is an API for rendering 2- and 3-D vector graphics.
Now for some questions: sticking to UNIX-like systems:
- Who's at the bottom of it all?, i.e. which component renders the bitmap that is eventually displayed on the screen?
- Is this done through OpenGL? If so, who calls OpenGL? And how was it done on older PCs without graphics cards?
- If you wanted to be really stubborn, how low can you go? What's the most primitive API that you could program a GUI at? X11? OpenGL? (please don't say logic gates :)).
For a bonus, maybe what about the Windows OS? Does it follow similar structure at all, or does it go completely its own way?