fltk/documentation/intro.html
Michael R Sweet 07766e7d72 Fixed various typos and added a Fluid organization chart image
contributed by Craig Earls.


git-svn-id: file:///fltk/svn/fltk/trunk@207 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
1999-01-13 15:35:04 +00:00

264 lines
10 KiB
HTML

<HTML>
<BODY>
<H1 ALIGN=RIGHT><A NAME="intro">1 - Introduction to FLTK</A></H1>
The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a LGPL'd C++
graphical user interface toolkit for X (UNIX&reg;), OpenGL&reg;, and
Microsoft&reg; Windows&reg; NT 4.0, 95, or 98. It was originally
developed by Mr. Bill Spitzak and is currently maintained by a small
group of developers across the world with a central repository in the
US.
<h2>History of FLTK</h2>
It has always been Bill's belief that the GUI API of all modern systems
is much too high level. Toolkits (even FL) are <i>not</i> what should
be provided and documented as part of an operating system. The system
only has to provide arbitrary shaped but featureless windows, a
powerful set of graphics drawing calls, and a simple <i>unalterable</i>
method of delivering events to the owners of the windows. NeXT (if you
ignored NextStep) provided this, but they chose to hide it and tried to
push their own baroque toolkit instead...
<p>Many of the ideas in FLTK were developed on a NeXT (but <i>not</i>
using NextStep) in 1987 in a C toolkit Bill called "views". Here he
came up with passing events downward in the tree and having the handle
routine return a value indicating the used the event, and the
table-driven menus. In general he was trying to prove that complex UI
ideas could be entirely implemented in a user space toolkit, with no
knowledge or support by the system.
<p>After going to film school for a few years, Bill worked at Sun
Microsystems on the (doomed) NeWS project. Here he found an even
better and cleaner windowing system, and he reimplemented "views" atop
that. NeWS did have an unnecessarily complex method of delivering
events which hurt it. But the designers did admit that perhaps the
user could write just as good of a button as they could, and officially
exposed the lower level interface.
<p>With the death of NeWS Bill realized that he would have to live with
X. The biggest problem with X is the "window manager", which means
that the toolkit can no longer control the window borders or drag the
window around.
<p>At Digital Domain Bill discovered another toolkit, "Forms". Forms was
similar to his work, but provided many more widgets, since it was used
in many real applications, rather then as theoretical work. He decided
to use Forms, except he integrated his table-driven menus into it.
Several very large programs were created using this version of Forms.
<p>The need to switch to OpenGL and GLX, portability, and a desire to
use C++ subclassing required a rewrite of Forms. This produced the
first version of FLTK. The conversion to C++ required so many changes
it made it impossible to recompile any Forms objects. Since it was
incompatible anyway, Bill decided to incorporate his older ideas as
much as possible by simplifying the lower level interface and the event
passing mechanisim.
<p>Bill received permission to release it for free on the Internet,
with the GNU general public license. Response from Internet users
indicated that the Linux market dwarfed the SGI and high-speed GL
market, so he rewrote it to use X for all drawing, greatly speeding it
up on these machines. That is the version you have now.
<p>Digital Domain has since withdrawn support for FLTK. While Bill is
no longer able to actively develop it, he still contributes to FLTK in
his free time and is a part of the FLTK development team.
<h2>Features</h2>
FLTK was designed to be statically linked. This was done by splitting it
into many small objects and desigining it so that functions that are not
used do not have pointers to them in the parts that are used, and thus
do not get linked in. This allows you to make an easy-to-install program,
or to modify FLTK to the exact requirements of your application, without
worrying about bloat. FLTK works fine as a shared library, though, and
has started being included on Linux distributions.
<p>Here are some of the core features unique to FLTK:
<ul>
<li>sizeof(Fl_Widget) == 40 to 48.</li>
<li>The "core" (the "hello" program compiled &amp; linked with a static FLTK
library using gcc on a 486 and then stripped) is 39.5K.</li>
<li>A program including every widget is less than 108K. Does not use
macros, templates, multiple inheritance, or exceptions.</li>
<li>Written directly atop Xlib (or WIN32) for maximum speed,
and carefully optimized for code size and performance.</li>
<li>Precise low-level compatability between the X11 and WIN32
version (only about 10% of the code is different).</li>
<li>Interactive user interface builder program. Output is
human-readable and editable C++ source code.</li>
<li>Support for the X11 double buffering extension (emulation
if not available and under Windows.)</li>
<li>Support for X11 overlay hardware (emulation if none and
under WIN32.)</li>
<li>Very small &amp; fast portable 2-D drawing library to hide
Xlib and WIN32.</li>
<li>OpenGL/Mesa drawing area widget.</li>
<li>Support for OpenGL overlay hardware on both X11 and WIN32.
Emulation if none.</li>
<li>Text input fields with Emacs key bindings, X cut &amp;
paste, and foreign letter compose!</li>
<li>Compatibility header file for the GLUT library.</li>
<li>Compatibility header file for the XForms library.</li>
<li>Much too much to list here...</li>
</ul>
<h2>Licensing</h2>
FLTK comes with complete free source code. FLTK is available under the
terms of the <a href="#licensing">GNU Library General Public
License</a>. Contrary to popular belief, it can be used in commercial
software! (Even Bill Gates could use it.)
<h2>What Does "FLTK" Mean?</h2>
FLTK was originally designed to be compatable with the Forms Library written
for SGI machines. In that library all the functions and structures started
with "fl_". This naming was extended to all new methods and widgets in
the C++ library, and this prefix was taken as the name of the library.
It is almost impossible to search for "FL" on the Internet, due to the
fact that it is also the abbreviation for Florida. After much debating
and searching for a new name for the toolkit, which was already in use
by several people, Bill came up with "FLTK", and even a bogus excuse that
it stands for "The Fast Light Tool Kit".
<h2>Building and Installing FLTK Under UNIX</h2>
In most cases you can just type "make". This will run configure with
the default of no options and then compile everything.
<p>FLTK uses GNU autoconf to configure itself for your UNIX platform. The
main things that the configure script will look for are the X11, OpenGL
(or Mesa), and JPEG header and library files. Make sure that they
are in the standard include/library locations.
<p>You can run configure yourself to get the exact setup you need. Type
"./configure &lt;options>", where options are:
<dl>
<dt>--enable-debug</dt>
<dd>Enable debugging code &amp; symbols</dd>
<dt>--enable-shared</dt>
<dd>Enable generation of shared libraries</dd>
<dt>--bindir=/path</dt>
<dd>Set the location for executables [default = /usr/local/bin]</dd>
<dt>--libdir=/path</dt>
<dd>Set the location for libraries [default = /usr/local/lib]</dd>
<dt>--includedir=/path</dt>
<dd>Set the location for include files. [default = /usr/local/include]</dd>
<dt>--prefix=/dir</dt>
<dd>Set the directory prefix for files [default = /usr/local]</dd>
</dl>
When the configure script is done you can just run the "make" command.
This will build the library, FLUID tool, and all of the test programs.
<p>To install the library, become root and type "make install". This
will copy the "fluid" executable to "bindir", the header files to "includedir",
and the library files to "libdir".
<h2>Building FLTK Under Micrsoft Windows</h2>
There are two ways to build FLTK under Microsoft Windows. The first
is to use the Visual C++ 5.0 project files under the "visualc" directory.
Just open (or double-click on) the "fltk.dsw" file to get the whole shebang.
<p>The second method is to use a GNU-based development tool with the files
in the "makefiles" directory. To build using one of these tools simply
copy the appropriate makeinclude and config files to the main directory
and do a make:
<ul><pre>
cp makefiles/makeinclude.&lt;env> makeinclude
cp makefiles/config.&lt;env> config.h
make
</pre></ul>
<h2>Building FLTK Under OS/2</h2>
The current OS/2 build requires XFree86 for OS/2 to work. A native
Presentation Manager version has not been implemented yet (volunteers are
welcome!).
<p>To build the XFree86 version of FLTK for OS/2, copy the appropriate
makeinclude and config files to the main directory and do a make:
<ul><pre>
cp makefiles/Makefile.os2x Makefile
cp makefiles/makeinclude.os2x makeinclude
cp makefiles/config.os2x config.h
make
</pre></ul>
<h2>Internet Resources</h2>
FLTK is available on the 'net in a bunch of locations:
<dl>
<dt>WWW</dt>
<dd><a href="http://fltk.easysw.com">http://fltk.easysw.com</a></dd>
<dt>FTP</dt>
<dd><a href="ftp://ftp.easysw.com/pub/fltk">ftp://ftp.easysw.com/pub/fltk</a></dd>
<dd><a href="ftp://ftp.funet.fi/mirrors/ftp.easysw.com/pub/fltk">ftp://ftp.funet.fi/mirrors/ftp.easysw.com/pub/fltk</a></dd>
<dd><a href="ftp://ftp.northamerica.net/pub/ESP/fltk">ftp.northamerica.net/pub/ESP/fltk</a><br></dd>
<dt>EMail</dt>
<dd><a href="mailto:fltk@easysw.com">fltk@easysw.com</a> [see instructions below]</dd>
<dd><a href="mailto:fltk-bugs@easysw.com">fltk-bugs@easysw.com</a> [for reporting bugs]</dd>
</dl>
To send a message to the FLTK mailing list ("fltk@easysw.com") you must
first join the list. Non-member submissions are blocked to avoid
problems with SPAM...
<p>To join the FLTK mailing list, send a message to "majordomo@easysw.com"
with "subscribe fltk" in the message body. A digest of this list is available
by subscribing to the "fltk-digest" mailing list.
<h2>Reporting Bugs</h2>
To report a bug in FLTK, send an email to "fltk-bugs@easysw.com". Please
include the FLTK version, operating system &amp; version, and compiler
that you are using when describing the bug or problem.
<p>For general support and questions, please use the FLTK mailing list
at "fltk@easysw.com".
</body>
</html>