FLTK
# FLTK

«Fast, Light Toolkit» (se pronuncia «felteck») es una biblioteca de GUI multiplataforma, desarrollada inicialmente por Bill Spitzak y luego mantenida por un grupo de desarrolladores alrededor del mundo. La biblioteca fue desarrollada teniendo en cuenta programación de gráficos 3D en mente, para esto tiene una interfaz a OpenGL, pero es aún apropiada para desarrollar aplicaciones IGU de propósito general.

Utilizando sus propios widgets, trazado de gráficos 2D y sistema de eventos (aunque FLTK2 ha ganado experimental soporte para usar opcionalmente la biblioteca gráfica cairo) desarrollados sobre el abstracto código dependiente del sistema, lo cual permite escribir programas que lucen idénticos cuando son compilados en cualquiera de los sistemas operativos soportados.

FLTK es software libre, licenciado bajo LGPL con la cláusula adicional que permite enlazado estático por aplicaciones con licencias incompatibles. Además, incluye a FLUID (del inglés, FLTK User Interface Designer), una interfaz de diseño gráfico de FLTK que genera los archivos de cabecera y código para una IGU desarrollada.

En contraste a otras bibliotecas como Qt y wxWidgets, FLTK aplica una estricta regla de eficiencia antes de apariencia, lo que le cuesta restricciones a su apariencia y funcionalidad, pero, por otro lado, hace de FLTK una biblioteca que consume muy bajos recursos y muy pequeña en tamaño. Esto se refleja en el pequeño tamaño de los programas (el programa «Hola, Mundo!» en FLTK solo ocupa alrededor de 100 KiB), y permite que sea usualmente estáticamente enlazada, aunque el enlace dinámico también está disponible. Lo que previene el uso de complicados macros y preprocesamiento de código separado, además no hace uso de avanzadas características de C++ como: plantillas, excepciones, RTTI. Las versiones FLTK 1.1.x no usan namespace. Por lo anterior, y combinado con el modesto tamaño del paquete, requiere de una corta curva de aprendizaje para los nuevos usuarios.

Pero estas ventajas, como se comentó anteriormente, vienen con su correspondiente desventajas. FLTK ofrece menos widgets o menos efectos que otras que más grandes bibliotecas gráficas, además por usar widgets no nativos, no luce como las aplicaciones nativas que lucen y se siente igual que la plataforma gráfica del sistema.

## Origen del nombre

FLTK fue originalmente diseñada para ser compatible con la biblioteca Forms desarrollada para sistemas SGI (un derivado de esta biblioteca se conoce como «XForms» que aun es frecuentemente utilizada). En esa biblioteca todas las funciones y estructuras inician con «fl_». Este estilo fue extendido a todos los nuevos métodos y widgets en la bibliotecas C++, y el prefijo «FL» fue tomado como nombre de la biblioteca. Después que FL fue liberada como código abierto, fue descubierto que fue imposible buscar por «FL» en Internet, debido al hecho que es la abreviación usada para Florida. Después de muchos debates y buscado por un nuevo nombre para la biblioteca, la cual fue para entonces utilizada por muchos desarrolladores y usuarios, Su creador Bill Spitzak tuvo la idea de usar «FLTK», con la explicación que significaba la abreviación para la frase en inglés «Fast Light Tool Kit», que traduce «Herramientas de Software Rápidas y Livianas».

## Desarrollando aplicaciones con FLTK

FLTK fue principalmente diseñada para, y escrita en, el lenguaje de programación C++. Sin embargo, diferentes interfaces existen para otros lenguajes de programación orientada a objetos, por ejemplo Python, Perl y Ruby.

El siguiente ejemplo para FLTK 1.x crea una ventana con el texto "Hola, Mundo!" sobre un botón:

## Software desarrollado sobre FLTK

* El programa de retoque fotográfico CinePaint actualmente migrando de GTK+ a FLTK.
* flwm, un Gestor de ventanas para el sistema de ventanas X
* Nuke, un software de producción digital (inglés)
* programa para la impresión de posters PosteRazor (Windows, Mac OS X, Linux).
* El BVH editor Avimator para la creación y edición de avatares 3D
* Dillo es un pequeño navegador web
* Gmsh, un generador de mallas para cálculos de Elementos finitos (inglés)
* EDE - Entorno del escritorio Equinox (inglés)
* Open Movie Editor Entorno abierto de edición de películas (inglés).
* TopMod Topological Mesh Modeling-programa para creación de gráficos 3d .
