From 14025d22ce3d66c9d235e57221ec4653e00f972c Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Fri, 26 Nov 2021 20:17:43 +1300 Subject: Switched to .xhtml extension, fixed some minor bugs --- project/templates/fltkada.xhtml | 112 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 project/templates/fltkada.xhtml (limited to 'project/templates/fltkada.xhtml') diff --git a/project/templates/fltkada.xhtml b/project/templates/fltkada.xhtml new file mode 100644 index 0000000..f68ea27 --- /dev/null +++ b/project/templates/fltkada.xhtml @@ -0,0 +1,112 @@ + +{%- extends "base.xhtml" -%} + + + +{%- block title -%}FLTK Ada{%- endblock -%} + + + +{%- block content %} +

FLTK Ada Binding

+ +

Git repository: Link
+Estimated status: 80% complete

+ + +
9/11/2021
+ +

A few noteworthy bugfixes have been applied to the binding.

+ +

First, unbeknownst to me the Fl_Widget constructor doesn't copy the given label string inside +FLTK and merely stores a pointer. This meant that declaring several Widgets in a row each with their +own different label could have unexpected and erratic results. Easily fixed by ensuring the binding +constructor also calls copy_label() afterwards.

+ +

And second, somehow I had made an oversight with the type assigned to Color, using a signed +Integer when it really needed an unsigned modular type with 32 bits of range. Again, easily fixed +but even more annoying since it was my fault to begin with.

+ +

I'm sure the other guy aside from me who takes an interest in this binding will be happy about +these. You know who you are.

+ + +
21/5/2018
+ +

This binding is now complete enough for most purposes. It certainly took more effort than +expected, in part due to underestimation of how much needed binding. The vast majority of useful +classes are now usable in Ada, with a few exceptions such as the Fl_Browser, Fl_Help_View, Fl_Table, +and Fl_Tree widgets.

+ +

Noteworthy features and modifications include:

+ + +

A mapping of what C++ headers and methods correspond to what Ada packages, functions, and +procedures is included. Also, the below "Hello world" code sample has been modified to work with the +updated binding.

+ + +
25/6/2017
+ +

FLTK, or by its full name the Fast Light Toolkit +, is a graphical widget toolkit noteworthy for being so lightweight that it is commonly +statically linked. Projects that make use of it include the Dillo web browser, the +FLWM X window manager, and the +Equinox Desktop Environment. There are bindings for it in several languages, including Python, +Perl and Ruby, but not Ada. Until now!

+ +

This is a spinoff from Adapad, and so despite not yet being complete it can be at least +guaranteed to be enough to write a text editor. It's a thick, loosely coupled binding, accomplished +by first exporting the interface to C, then importing that to Ada. Attempted usage of the internal C +interface as a binding on its own is not supported.

+ +

A typical FLTK Hello World program in Ada:

+
+ +with + FLTK.Widgets.Groups.Windows, + FLTK.Widgets.Boxes; + +function Hello_World return Integer is + + My_Win : FLTK.Widgets.Groups.Windows.Window := + FLTK.Widgets.Groups.Windows.Forge.Create (100, 100, 200, 200, "Untitled"); + + My_Box : FLTK.Widgets.Boxes.Box := + FLTK.Widgets.Boxes.Forge.Create (50, 50, 100, 100, "Hello, World!"); + +begin + + My_Win.Add (My_Box); + My_Win.Show; + + return FLTK.Run; + +end Hello_World; + +
+ +

Aside from reworking the types to better fit the strongly typed philosophy of Ada, the entire +library has been structured to avoid explicit heap usage. As you can see from the above example, the +intended use is to declare FLTK objects on the stack. Allocation and deallocation of the C++ +internals is handled automatically.

+ +

A few other minor changes were involved, such as requiring widgets to be explicitly added to a +group rather than implicitly being added to the last group not yet ended. At the moment the package +specifications should provide sufficient information to allow programmers to work with the library. +

+{% endblock -%} + + -- cgit