b983b285cc
git-svn-id: file:///fltk/svn/fltk/trunk@244 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
221 lines
11 KiB
HTML
221 lines
11 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®), OpenGL®, and
|
|
Microsoft® Windows® 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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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>
|
|
<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. </P>
|
|
<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: </P>
|
|
<UL>
|
|
<LI>sizeof(Fl_Widget) == 40 to 48.</LI>
|
|
<LI>The "core" (the "hello" program compiled & 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 & 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 & 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 compatible 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. If these cannot be
|
|
found in the standard include/library locations you'll need to define the
|
|
<tt>CFLAGS</tt>, <tt>CXXFLAGS</tt>, and <tt>LDFLAGS</tt> environment
|
|
variables. For the Bourne and Korn shells you'd use:</P>
|
|
<UL><PRE>
|
|
CFLAGS=-I<I>includedir</I>; export CFLAGS
|
|
CXXFLAGS=-I<I>includedir</I>; export CXXFLAGS
|
|
LDFLAGS=-L<I>libdir</I>; export LDFLAGS
|
|
</PRE></UL>
|
|
For C shell and tcsh, use:
|
|
<UL><PRE>
|
|
setenv CFLAGS "-I<I>includedir</I>"
|
|
setenv CXXFLAGS "-I<I>includedir</I>"
|
|
setenv LDFLAGS "-L<I>libdir</I>"
|
|
</PRE></UL>
|
|
By default configure will look for a C++ compiler named <tt>CC</tt>, <tt>c++</tt>,
|
|
<tt>g++</tt>, or <tt>gcc</tt> in that order. To use another compiler you need
|
|
to set the <tt>CXX</tt> environment variable:
|
|
<UL><PRE>
|
|
CXX=xlC; export xlC
|
|
setenv CXX "xlC"
|
|
</PRE></UL>
|
|
The <tt>CC</tt> environment variable can also be used to override the default
|
|
C compiler, which is used for a few FLTK source files.
|
|
<P>You can run configure yourself to get the exact setup you need. Type
|
|
"./configure <options>", where options are: </P>
|
|
<DL>
|
|
<DT>--enable-debug</DT>
|
|
<DD>Enable debugging code & 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". </P>
|
|
<H2>Building FLTK Under Microsoft 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: </P>
|
|
<UL>
|
|
<PRE>
|
|
cp makefiles/makeinclude.<env> makeinclude
|
|
cp makefiles/config.<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: </P>
|
|
<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 unsolicited email.
|
|
<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. </P>
|
|
<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 & 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". </P>
|
|
</BODY></HTML>
|