summaryrefslogtreecommitdiff
path: root/project/templates/fltkada.html
blob: b7abb59d6229cbe36f515455f936e1ed7623c6dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

{% extends "base.html" %}



{% block title %}FLTK Ada{% endblock %}



{% block content %}

<h4>FLTK Ada Binding</h4>

<p>Git repository: <a href="/cgit/cgit.cgi/fltkada">Link</a><br>
Estimated status: 80% complete</p>


<h5>21/5/2018</h5>

<p>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.</p>

<p>Noteworthy features and modifications include:</p>
<ul>
  <li>Constructors are not primitive operations and are not inherited</li>
  <li>Additional types have been defined and used to clean up the API</li>
  <li>No heap allocation/deallocation necessary</li>
  <li>Ada 2012 iterators are implemented for Group and Menu widgets</li>
  <li>The API for Menu and Menu_Item has been rearranged to better reflect a container/item dichotomy</li>
  <li>The Draw and Handle widget methods are easily overridable</li>
  <li>Static methods from the base Fl.H header have been split up into multiple packages</li>
  <li>Automatic addition of widgets to a Group with fl_group_begin and fl_group_end is not supported</li>
</ul>

<p>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.</p>


<h5>25/6/2017</h5>

<p>FLTK, or by its full name the <a href="http://www.fltk.org/" target="_blank">Fast Light Toolkit</a>,
is a graphical widget toolkit noteworthy for being so lightweight that it is commonly statically linked.
Projects that make use of it include the <a href="http://www.dillo.org/" target="_blank">Dillo</a> web
browser, the <a href="http://flwm.sourceforge.net/" target="_blank">FLWM</a> X window manager, and the
<a href="http://www.equinox-project.org/" target="_blank">Equinox Desktop Environment</a>. There are
bindings for it in several languages, including Python, Perl and Ruby, but not Ada. Until now!</p>

<p>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.</p>

<p>A typical FLTK Hello World program in Ada:</p>
<div class="precontain">
<code>
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;
</code>
</div>

<p>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.</p>

<p>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.</p>

{% endblock %}