-void Figura::dibujar(std::ostream& out) const {
- out << "color(" << color << "), grosor(" << grosor
- << "), nombre(" << nombre << "), centro(";
- centro.dibujar(out);
- out << ")";
+GdkGC* Figura::get_gc(GtkWidget* widget) const {
+ // Copio el contexto gráfico del área de dibujo.
+ GdkGC* gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ // Asigna propiedades del trazo.
+ gdk_gc_set_line_attributes(
+ gc, // Contexto gráfico al cual asignar propiedades.
+ grosor, // Grosor del trazo.
+ GDK_LINE_SOLID, // Tipo de línea (sólida en este caso).
+ GDK_CAP_ROUND, // Tipo de terminación (redondeada en este caso).
+ GDK_JOIN_ROUND); // Forma de unir trazos (también redondeado).
+ // Obtengo el color.
+ GdkColor c;
+ traducir_color(&c);
+ // Aloco el color en el mapa de colores del área de dibujo para que funcione
+ // en un display de menos de 24 bits.
+ gdk_colormap_alloc_color(gtk_widget_get_colormap(widget), &c, FALSE, TRUE);
+ // Indica que no se puede escribir, para que /______________| |
+ // se pueda compartir con otras aplicaciones. \ |
+ // |
+ // Indica que si no se puede alocar, que trate de /___________________|
+ // buscar un color similar. \.
+
+ // Cambia el color del trazo.
+ gdk_gc_set_foreground(gc, &c);
+ return gc;