+/* vim: set ts=4 sw=4 fdm=marker fmr={,} fdn=1 fo+=t tw=80:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Trabajo Práctico Final:
+ * Simulador de plantas químicas (A.K.A. plaqui)
+ *
+ * TODO poner cabecera más bonita. :)
+ *
+ * Creado: lun oct 13 20:59:19 ART 2003
+ *
+ * $Id$
+ */
+
+#ifndef FIGURA_H
+#define FIGURA_H
+
+#include "punto.h"
+#include <cstdlib>
+#include <gtk/gtk.h>
+
+/**
+ * Descripción breve.
+ * Hasta el primer punto del comentario lo toma como "brief" que es una
+ * descripcion corta que se pone al principio del archivo.
+ * Aca pueden ir otras cosas como:
+ *
+ * \author Leandro Lucarella <llucare@fi.uba.ar>
+ * \see centro, dibujar()
+ *
+ * El doxygen es bastante inteligente a la hora de saber si algo es un metodo o
+ * una funcion global.
+ * También se puede poner un ejemplo de código:
+ * \code
+ * Figura f* = new Figura();
+ * f->dibujar();
+ * delete f;
+ * \endcode
+ */
+class Figura {
+
+ protected:
+
+ /// Si queremos poner solo un comentario breve se puede usar \c ///.
+ static const size_t MAX_NOMBRE = 50;
+
+ /// Color.
+ size_t color;
+
+ /// Grosor.
+ size_t grosor;
+
+ /// Centro.
+ Punto centro;
+
+ /// Nombre.
+ char nombre[MAX_NOMBRE];
+
+ /**
+ * Crea un nuevo contexto gráfico.
+ * Crea un nuevo contexto gráfico con las propiedades de la figura
+ * (color y grosor) partiendo del contexto gráfico de un widget.
+ *
+ * \param widget Widget de donde copiar el GC inicial.
+ *
+ * \return Contexto gráfico a modificar.
+ */
+ virtual GdkGC *get_gc(GtkWidget * widget) const;
+
+ /**
+ * Traduce los 16 colores (de 4 bits) en colores de 24 bits.
+ * La traducción es simple. Los 3 bits menos significativos son
+ * usados como indicador del pigmento. El bit menos significativo
+ * indica la presencia de pigmento azul, el siguiente verde
+ * y el siguiente rojo. El bit más significativo representa
+ * la saturación del color, si está activado, el color será
+ * más saturado.
+ *
+ * \param c Color.
+ *
+ * \return El color traducido.
+ */
+ GdkColor *traducir_color(GdkColor * c) const;
+
+ public:
+
+ /// Constructor.
+ Figura(size_t color, size_t grosor, const Punto & centro,
+ const char *nombre);
+
+ /// Destructor.
+ virtual ~ Figura(void);
+
+ /**
+ * Dibuja.
+ * Modifica el contexto gráfico según las propiedades de la figura
+ * (color y grosor).
+ * Se puede poner un dibujo \e textual:
+ * \verbatim
+ * Dibujo:
+ * +--------------------+
+ * | MiClase |
+ * +--------------------+
+ * | Soy ASCII Art! :) |
+ * +--------------------+
+ * \endverbatim
+ *
+ * O tablas HTML (que se traducen a tablas en LaTeX tambien 8-):
+ * <table>
+ * <tr>
+ * <th>Columna 1</th>
+ * <th>Columna 2</th>
+ * </tr>
+ * <tr>
+ * <td>Item 1,1</td>
+ * <td>Item 1,2</td>
+ * </tr>
+ * <tr>
+ * <td>Item 2,1</td>
+ * <td>Item 2,2</td>
+ * </tr>
+ * </table>
+ *
+ * \param widget Widget donde dibujar.
+ */
+ virtual void dibujar(GtkWidget * widget) const = 0;
+
+};
+
+#endif /* FIGURA_H */