# Opciones para el compilador.
CXXFLAGS=`pkg-config --cflags gtk+-2.0`
#CXXFLAGS+=-ansi -pedantic -Wall -O3
-#CXXFLAGS+=-ansi -pedantic -Wall -g3
-CXXFLAGS+=-ansi -pedantic -Wall -g3 -DDEBUG
+CXXFLAGS+=-ansi -pedantic -Wall -g3
+#CXXFLAGS+=-ansi -pedantic -Wall -g3 -DDEBUG
LDFLAGS=`pkg-config --libs gtk+-2.0`
@rm -fR $(TARGETS) *.o core corrida.txt html latex* *.ps
# Preety-printing del código fuente.
-FUENTES=dllist.h dllist.cpp punto.h figura.h figura.cpp rectangulo.h \
- rectangulo.cpp cuadrado.h cuadrado.cpp linea.h linea.cpp circulo.h \
- circulo.cpp dibujo.h dibujo.cpp callbacks.h callbacks.cpp \
- tp5window.h tp5window.cpp tp5.cpp
+FUENTES=figura.h figura.cpp rectangulo.h rectangulo.cpp cuadrado.h \
+ cuadrado.cpp linea.h linea.cpp circulo.h circulo.cpp dibujo.h \
+ dibujo.cpp callbacks.h callbacks.cpp tp5window.h tp5window.cpp \
+ tp5.cpp
code.ps: $(FUENTES)
- @enscript -j -Ecpp -U2 -C --fancy-header=squeeze --color -pcode.ps \
+ @enscript -H0 -j -Ecpp -U2 -C --fancy-header=squeeze --color -pcode.ps \
$(FUENTES)
# Informe.
--- /dev/null
+{\rtf0\ansi\r
+\ansicpg1252\r
+{\fonttbl\r
+{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}\r
+{\f142\froman\fcharset238\fprq2 Times New Roman CE;}\r
+{\f143\froman\fcharset204\fprq2 Times New Roman Cyr;}\r
+{\f145\froman\fcharset161\fprq2 Times New Roman Greek;}\r
+{\f146\froman\fcharset162\fprq2 Times New Roman Tur;}\r
+{\f147\froman\fcharset177\fprq2 Times New Roman (Hebrew);}\r
+{\f148\froman\fcharset178\fprq2 Times New Roman (Arabic);}\r
+{\f149\froman\fcharset186\fprq2 Times New Roman Baltic;}\r
+{\f150\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}\r
+{\colortbl\r
+;\r
+\red0\green0\blue0;\r
+\red0\green0\blue255;\r
+\red0\green255\blue255;\r
+\red0\green255\blue0;\r
+\red255\green0\blue255;\r
+\red255\green0\blue0;\r
+\red255\green255\blue0;\r
+\red255\green255\blue255;\r
+\red0\green0\blue128;\r
+\red0\green128\blue128;\r
+\red0\green128\blue0;\r
+\red128\green0\blue128;\r
+\red128\green0\blue0;\r
+\red128\green128\blue0;\r
+\red128\green128\blue128;\r
+\red192\green192\blue192;\r
+}\r
+{\stylesheet\r
+{\widctlpar\li0\ri0\ql\fs24\snext0 Normal;}\r
+{\*\cs10\additive Default Paragraph Font;}\r
+}\r
+{\info\r
+{\title (75}\r
+{\author Ga}\r
+{\creatim \yr2003\mo8\dy22\hr1\min35\sec0}\r
+{\revtim \yr2003\mo10\dy7\hr2\min17\sec28}\r
+{\printim \yr2003\mo8\dy22\hr1\min43\sec0}\r
+}\r
+\paperw11908\paperh16847\margl1701\margr1701\margt1417\margb1417\r
+\widowctrl\deftab708\r
+\ftnbj\aenddoc\ftnrstcont\aftnrstcont\ftnnar\aftnnrlc\r
+\sectd\headery708\footery708\colsx708\r
+{\*\pnseclvl1\pnucrm\pnstart1\pnhang\pnindent720{\pntxta .}}\r
+{\*\pnseclvl2\pnucltr\pnstart1\pnhang\pnindent720{\pntxta .}}\r
+{\*\pnseclvl3\pndec\pnstart1\pnhang\pnindent720{\pntxta .}}\r
+{\*\pnseclvl4\pnlcltr\pnstart1\pnhang\pnindent720{\pntxta )}}\r
+{\*\pnseclvl5\pndec\pnstart1\pnhang\pnindent720{\pntxtb (}{\pntxta )}}\r
+{\*\pnseclvl6\pnlcltr\pnstart1\pnhang\pnindent720{\pntxtb (}{\pntxta )}}\r
+{\*\pnseclvl7\pnlcrm\pnstart1\pnhang\pnindent720{\pntxtb (}{\pntxta )}}\r
+{\*\pnseclvl8\pnlcltr\pnstart1\pnhang\pnindent720{\pntxtb (}{\pntxta )}}\r
+{\*\pnseclvl9\pnlcrm\pnstart1\pnhang\pnindent720{\pntxtb (}{\pntxta )}}\r
+\pard\widctlpar\qc\plain\f0\fs36\b (75.42) - Taller de Programaci\'f3n I\r
+\par\r
+\par\r
+\pard\widctlpar\plain\f0 \par\r
+\pard\widctlpar\sl360\slmult1\tx2880\plain\f0\fs28\b Cuatrimestre\tab\b0\r
+2\super do\nosupersub - 2003\par\r
+\b Trabajo pr\'e1ctico Nro\tab\b0 5\par\r
+\b Entrega n\'famero\tab\b0 1\par\r
+\b Fecha de entrega\tab 07/10/2003\par\r
+\par\r
+Padr\'f3n\tab\b0 77.891\par\r
+\b Apellidos\tab\b0 Lucarella\par\r
+\b Nombres\tab\b0 Leandro M.\par\r
+\par\r
+\b Fecha de devoluci\'f3n\tab\par\r
+Corrector\tab\par\r
+Calificaci\'f3n\tab\par\r
+\b0 \par\r
+\b Notas\tab\par\r
+\pard\widctlpar\plain\f0 \par\r
+}\r
\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
+ pueda manejar la GLib) de ser \e 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 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
+ o \e 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
librerías para desarrollo de GTK instalados (esto incluye también
librerías de desarrollo de Xlib, Glib y GDK). En el caso de Debian
GNU/Linux sid basta con instalar los paquetes: \c make, \c xlibs-dev,
- \c libglib2.0-dev, \c libgtk2.0-dev.
+ \c libglib2\c .0-dev, \c libgtk2\c .0-dev.
Teniendo estos paquetes, basta ejecutar \c make para compilar el
programa.
\section conclusiones Conclusiones.
- TODO
+ Este trabajo me sirvió para profundizar sobre algunos aspectos de
+ programación de aplicaciones gráficas que no manejaba. También me sirvió
+ para saldar una cuenta que tenía hace tiempo, que era aprender sobre GTK y
+ en general Xlib (para conocer el sistema X Window a más bajo nivel) ya que
+ hasta ahora, en cuanto a aplicaciones gráficas, sólo había programado en
+ Delphi y Java, dos lenguajes (y/o API) de mucho más alto nivel.
+ Un problema con el que me encontré, a modo de anécdota, fue el manejo de
+ colores. En un principio había programado el método
+ Figura::traducir_color() pensando en mi configuración de 24 bits. Todas las
+ operaciones las realizaba operando con máscaras de bits presuponiendo 8 bits
+ por color RGB, escribiendo en pantalla \e directamente el píxel resultante.
+ Al querer probar el programa en mi trabajo, con una configuración de 16 bits
+ por píxel, por supuesto que sucedieron cosas extrañas. Fue en ese momento
+ que tuve que reescribir dicho método, utilizando las propiedades \c red,
+ \c green y \c blue de la estructura GdkColor y las funciones de la API para
+ \e preguntarle al X si el color estaba disponible y buscar un color similar
+ de no estarlo, en vez de poner directamente el color en la propiedad \c
+ pixel que almacena el valor real del píxel que se usara para poner en la
+ memoria de video.
*/