FLTKAda
This is a thick, high level binding for the FLTK graphical widget library to the Ada programming language using only the standard C FFI.
Types have been marshalled. Class hierarchies have been mapped to equivalent packages and tagged records. Controlled types have been used to make allocation and deallocation automatic for objects. Overrideable methods called from the FLTK event loop have been thunked. Iterators have been implemented. And a few convenience subprograms have been provided.
Some of the FLTK test and example programs have also been ported.
For documentation on what C++ function, method, or class corresponds to what
Ada function, procedure, or package, see index.html
in the doc
subdirectory.
Dependencies
Build time:
- FLTK
- g++
- GNAT
- GPRbuild
Run time:
- FLTK
It may be possible to use alternate compilation tooling but this has not been tested. If attempted, some manual modification of project files may be necessary.
Note that at this time only FLTK 1.3 is supported.
Building and Installation
This repository is written to use the GNAT Project Manager build tools. To build, use the following command
gprbuild fltkada.gpr
There is a single build switch of -Xbuild
which can have a value of release
(the default) or debug
. The other project files in the main directory can be
used with similar build commands to build tests, examples, and tools.
To install the binding, use
gprinstall -p -m fltkada.gpr
For further information on the build tools, consult the GPRbuild docs.
Technical Notes
As part of its normal operation, FLTK calls a Widget's Draw and Handle methods from its main loop to deal with draw and input events. Since it's another part of the program that is invoking them, even if it's a part the programmer has no direct control over, this binding is set up so that if you override Draw or Handle the behaviour will change.
On the other hand, something like the Push method in tabbed groups is usually invoked from within that same tabbed group widget's Handle method. Therefore, keeping consistency with Ada semantics, overriding the Push method will NOT change the behaviour of the corresponding Handle method. You must also override Handle.
Credits and Licensing
Written by Jedidiah Barber.
Released into the public domain. For details see unlicense.txt
.