# FLTK

Fast Light Toolkit (FLTK), in informatica, è un toolkit multipiattaforma per la realizzazione di interfacce grafiche (GUI), sviluppata inizialmente da Bill Spitzak e altri.
Utilizzando i propri widget, sistemi di disegno ed eventi astratti dal sistema sottostante, consente di scrivere programmi che hanno lo stesso aspetto su tutti i sistemi operativi supportati.
FLTK è un software libero e open source, concesso in licenza sotto GNU Lesser General Public License (LGPL) con una clausola aggiunta che consente il collegamento statico da applicazioni con licenze incompatibili.
A differenza delle librerie dell'interfaccia utente come GTK, Qt e wxWidgets, FLTK utilizza un design più leggero e si limita alla funzionalità della GUI. Per questo motivo, la libreria è molto piccola (il programma FLTK di "Hello World" è di circa 100 KiB) e di solito è collegata staticamente. Evita inoltre macro complesse, preprocessori di codice separati e l'uso di alcune funzionalità avanzate di C++: modelli, eccezioni e informazioni sul tipo di runtime (RTTI) o, per FLTK 1.x, i namespace. Il tutto, in combinazione con le dimensioni modeste del pacchetto, rende relativamente facile l'apprendimento per i nuovi utenti.
Questi vantaggi comportano anche svantaggi corrispondenti. FLTK offre meno widget rispetto alla maggior parte dei toolkit GUI e, a causa dell'utilizzo di widget non nativi, non ha un aspetto nativo su nessuna piattaforma.

## Origini del nome

FLTK è stato originariamente progettato per essere compatibile con la libreria Forms sviluppata per macchine Silicon Graphics (SGI) (un derivato di questa libreria chiamato XForms è ancora abbastanza usato). In quella libreria, tutte le funzioni e le strutture iniziano con fl_ . Questa denominazione è stata estesa a tutti i nuovi metodi e widget nella libreria C++ e questo prefisso FL è stato utilizzato come nome della libreria. Dopo che FL è stato rilasciato come open source, si è scoperto che cercare "FL" su Internet era un problema, perché è anche l'abbreviazione dello stato della Florida. Dopo molte discussioni e la ricerca di un nuovo nome per il toolkit, che era già utilizzato da diverse persone, Bill Spitzak ha inventato Fast Light Tool Kit (FLTK).

## Architettura

FLTK è un toolkit widget orientato agli oggetti scritto nel linguaggio di programmazione C++. Mentre GTK è ottimizzato principalmente per X Window System e Wayland, FLTK funziona bene su altre piattaforme, tra cui Microsoft Windows (interfacciato con Windows API) e MacOS (interfacciato con Quartz). È stato implementato un back-end Wayland che sarà disponibile nella versione 1.4.0. FLTK2 ha ottenuto il supporto sperimentale per l'utilizzo facoltativo della libreria grafica Cairo.

### Supporto dei linguaggi di programmazione

Una libreria scritta in un linguaggio di programmazione può essere utilizzata in un altro linguaggio se vengono sviluppati i relativi binding. FLTK ha una gamma di associazioni per vari linguaggi.
FLTK è stato scritto e progettato principalmente nel linguaggio di programmazione C++. Tuttavia, esistono binding per altri linguaggi, ad esempio Lua, Perl, Python, Ruby, Rust e Tcl.
Per FLTK 1.x, questo esempio di codice crea una finestra con un pulsante OK:

### Progettazione della GUI

FLTK include Fast Light User Interface Designer (FLUID), un designer grafico della GUI che genera file sorgente e di intestazione C++.

## Versioni

Questa cronologia delle versioni è un esempio della natura talvolta tumultuosa dello sviluppo open source.

### 1.0.x

Questa è la versione stabile precedente, ora non mantenuta.

### 1.1.x

Questa è la versione stabile precedente, ora non mantenuta.

### Ramo di sviluppo 2.0

Questo era un ramo di sviluppo, a lungo pensato come il step successivo nell'evoluzione di FLTK, con molte nuove funzionalità e uno stile di programmazione più pulito. Non ha mai raggiunto la stabilità e lo sviluppo è sostanzialmente cessato.

### 1.2.x

Questo è stato un tentativo di prendere alcune delle migliorie della versione 2.0 e di unirle nuovamente nel più popolare ramo 1.1. Non è più sviluppato.

### 1.3.x

Versione stabile attuale. Fornisce il supporto UTF-8.

### 1.4.x

Ramo di sviluppo attuale. Aggiunge più funzionalità alla versione 1.3.

### Ramo di sviluppo 3.0

Questo ramo è principalmente un modello concettuale per il lavoro futuro. Ora inattivo.