\section gdk_gtk Descripción de API GDK/GTK y comparación con GDI de Windows.
- GTK significa GIMP ToolKit ya que originalmente fue programa sólamente para
- hacer el programa GIMP (GNU Image Manipulation Program, una especie de
- Photoshop libre). Actualmente ha crecido mucho, hasta superando en
- importancia ese proyecto inicial. Creció tanto que incluso en la actualidad
- se compone a su vez de 2 capas más, cada una siendo de más bajo nivel que la
- original.
- \subsection gdk GDK.
+ GTK significa GIMP ToolKit ya que originalmente fue creada sólamente para
+ hacer el programa <a href="http://www.gimp.org/">GIMP</a> (GNU Image
+ Manipulation Program, una especie de Photoshop libre). Actualmente ha
+ crecido mucho, hasta superando en importancia ese proyecto inicial.
+ Creció tanto que incluso en la actualidad se compone a su vez de 2 capas
+ más, cada una siendo de más bajo nivel que la original. La capa de más bajo
+ nivel es la GLib, que implementa funciones básicas y tipos de datos comunes,
+ sirviendo de capa base para hacer aplicaciones multiplataforma. Sobre ésta,
+ está construida la biblioteca GDK (GTK+ Drawing Kit), que serviría de base
+ para hacer aplicaciones gráficas multiplataforma (aunque fuertemente
+ influída por la forma de funcionar de X Window, plataforma para la cual fue
+ creada inicialmente). GDK es entoncess de relativo bajo nivel (un nivel
+ cercano a Xlib, biblioteca de X Window, que sólo permite dibujar en pantalla
+ y manejar eventos, como el movimiento de un mouse el presionar una tecla o
+ un requerimiento para redibujar una porción de la pantalla). Sobre GDK se
+ crean una serie de \e widgets (componentes como botones, etiquetas, barras
+ de menú, etc) y a este conjunto de widgets se los llama GTK.
\section desarrollo Desarrollo.
\section resolucion Resolución.
- \subsection res_ascii Clase Ascii.
- TODO
+ \subsection ventana Ventana principal.
+ Todos los componentes de la ventana principal (y la ventana en sí) se
+ encapsularon en un objeto TP5Window. Al inicializar el objeto se
+ inicializan todos los componentes de la ventana, inclusive el Dibujo que
+ contiene los objetos de tipo Figura que se van agregando. Dentro de
+ estos componentes se encuentran varios widgets GTK que se van agregando
+ a la ventana principal, guardandose un puntero como atributo de
+ TP5Window de solo aquellos widgets que se necesitarán a la hora de
+ obtener la entrada del usuario. Del resto de los widgets no es necesario
+ guardar un puntero ya que se liberan automáticamente al llamar a la
+ función gtk_main_quit().
+ TP5Window también tiene métodos para convertir o facilitar la conversión
+ de los datos que ingresa el usuario.
+ \note Para crear la ventana principal se utilizó una herramienta que
+ gráfica que luego genera código automáticamente llamada Glade.
+ Sobre el código generado se cambiaron varias cosas y se
+ eliminaron llamadas a funciones inecesarias, por ejemplo. Con este
+ programa también puede generarse un archivo XML con la disposición
+ gráfica de todos los elementos y luego cargarlo en tiempo de
+ ejecución mediante la biblioteca libglade, pero se dibujó toda la
+ interfaz con código para mostrar bien por dentro el proceso
+ realizado por dicha biblioteca.
+
+ \subsection callbacks Funciones callbacks.
+ Cada evento recibido por un widget GTK (y en general cualquier señal que
+ pueda manejar la GLib) de ser \conectado a una función callback que se
+ encargue de menejarlo. Todas las funciones callback se agruparon en el
+ archivo callbacks.h y callbacks.cpp. Se implementaron callbacks para los
+ siguientes eventos:
+ - \c expose_event:
+ Evento \e disparado cuando se debe redibujar un área de la
+ pantalla, en este caso sólo se conecta el evento para el área de
+ dibujo para dibujar todas las figuras en la pantalla. La función que
+ maneja este evento es on_drawingarea_expose_event().
+ - \c clicked:
+ Este evento se \e dispara cuando un GtkButton es presionado. Se usa
+ para borrar el dibujo, actualizarlo, agregar figuras y salir del
+ programa y es manejado por las funciones on_button__clicked() TODO
\section requerimientos Requerimientos y modo de uso.