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.
+ TODO
\section desarrollo Desarrollo.
\section resolucion Resolución.
+ \note Sólo se comentan los cambios realizados al Trabajo Práctico 3 para
+ cumplir los objetivos del actual. Por lo tanto no se hará referencia
+ a componentes como la lista interna de Dibujo y otros aspectos que ya
+ fueron evaluados en el trabajo anterior.
+
\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
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
+ \note Para crear la ventana principal se utilizó una herramienta
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
+ eliminaron llamadas a funciones inecesarias. 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
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 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_borrar_clicked(),
+ on_button_graficar_clicked(), on_button_agregar_clicked(),
+ on_button_salir_clicked().
+ - \c toggled:
+ Este evento lo \e dispara un GtkToggleButton cuando es seleccionado
+ o deseleccionado. Se usa para activar y desactivar campos para la
+ entrada de usuario al seleccionar un tipo de figura y es manejado
+ por las siguientes funciones \e callbacks:
+ on_radiobutton_linea_toggled(), on_radiobutton_cuadrado_toggled(),
+ on_radiobutton_rectangulo_toggled(),
+ on_radiobutton_circulo_toggled().
- \c expose_event:
- Evento \e disparado cuando se debe redibujar un área de la
+ Este Evento es \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
+ - \c delete_event:
+ Este evento se \e dispara cuando se solicita \e borrar una ventana.
+ Esto pasa cuando se le pide a un manejador de ventanas que \e borre
+ o \cierre esa ventana (ya sea por la típica X en la decoración de la
+ ventana o un menú contextual, por ejemplo).
+
+ Una clara diferencia entre estos es que los dos primeros son \e internos
+ del programa, es decir, \e disparados por el mismo programa, mientras
+ que los dos últimos son eventos \e externos, generados ya sea por el
+ manejador de ventanas o por el mismo sistema gráfico (X Window o el
+ sistema operativo, dependiendo de la plataforma).
+
+ \subsection dibujando Dibujando.
+ El dibujo de las figuras comienza en la \e callback que maneja el \c
+ expose_event del área de dibujo. En ella se invoca al método
+ Dibujar::dibujar() quien a su vez llama al método Figura::dibujar() que
+ corresponda para cada dibujo en su lista interna.
+ Figura::dibujar() en sí es un método abstracto, pero hay otro método,
+ Figura::get_gc() que es utilizado por todos los métodos dibujar()
+ sobreescritos que cambia el contexto gráfico, asignando los
+ valores apropiedos al grueso y color del trazo utilizado para dibujar.
+ En cada método dibujar() sobreescrito se dibuja la figura en sí, con las
+ propiedades del contexto gráfico obtenidas de Figura::get_gc().
\section requerimientos Requerimientos y modo de uso.