#ifdef DEBUG
std::cerr << "En dibujar de Círculo." << std::endl;
#endif
- Figura::dibujar(widget);
+ // Copio el contexto gráfico del área de dibujo.
+ GdkGC* gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ // Le doy los nuevos valores.
+ set_gc(gc);
+ // Dibujo el círculo.
gdk_draw_arc(
// Área dibujable.
- widget->window,
- // Graphic Context a usar.
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ GDK_DRAWABLE(widget->window),
+ // Contexto gráfico,
+ gc,
// No lo rellena.
FALSE,
// X, Y de la esquina superior izquierda.
centro.x - radio, centro.y - radio,
- // X, Y de la esquina inferior derecha.
- centro.x + radio, centro.y + radio,
+ // ancho y alto del cuadrado que circunscribe el círculo.
+ radio * 2, radio * 2,
// de 0 a 360 grados.
0, 64 * 360);
+ // Libero la copia del contexto gráfico.
+ g_object_unref(G_OBJECT(gc));
}
/// Nombre.
char nombre[30];
+ /**
+ * Modifica el contexto gráfico.
+ * Modifica el contexto gráfico según las propiedades de la figura
+ * (color y grosor).
+ *
+ * \param gc Contexto gráfico a modificar.
+ */
+ virtual void set_gc(GdkGC* gc) const;
+
public:
/**
/**
* Dibuja.
+ * Modifica el contexto gráfico según las propiedades de la figura
+ * (color y grosor).
*
- * \param out Stream de salida en donde dibujar.
+ * \param gc Contexto gráfico a modificar.
*/
- virtual void dibujar(GtkWidget* widget) const;
+ virtual void dibujar(GtkWidget* widget) const = 0;
};
#ifdef DEBUG
std::cerr << "En dibujar de Línea." << std::endl;
#endif
- Figura::dibujar(widget);
+ // Copio el contexto gráfico del área de dibujo.
+ GdkGC* gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ // Le doy los nuevos valores.
+ set_gc(gc);
+ // Dibujo la línea.
gdk_draw_line(
// Área dibujable.
- widget->window,
- // Graphic Context.
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ GDK_DRAWABLE(widget->window),
+ // Contexto gráfico.
+ gc,
+ // Inicio y fin de la línea.
ini.x, ini.y, fin.x, fin.y);
+ // Libero la copia del contexto gráfico.
+ g_object_unref(G_OBJECT(gc));
}
#ifdef DEBUG
std::cerr << "En dibujar de Rectángulo." << std::endl;
#endif
- Figura::dibujar(widget);
+ // Copio el contexto gráfico del área de dibujo.
+ GdkGC* gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+ // Le doy los nuevos valores.
+ set_gc(gc);
// Lado de la izquierda.
gdk_draw_line(
// Área dibujable.
- widget->window,
- // Graphic Context.
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ GDK_DRAWABLE(widget->window),
+ // Contexto gráfico.
+ gc,
// X, Y del vértice superior.
centro.x - ancho / 2, centro.y - alto / 2,
// X, Y del vértice inferior.
centro.x - ancho / 2, centro.y + alto / 2);
// Lado de la derecha.
- gdk_draw_line(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ gdk_draw_line(GDK_DRAWABLE(widget->window), gc,
// X, Y del vértice superior.
centro.x + ancho / 2, centro.y - alto / 2,
// X, Y del vértice inferior.
centro.x + ancho / 2, centro.y + alto / 2);
// Lado superior.
- gdk_draw_line(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ gdk_draw_line(GDK_DRAWABLE(widget->window), gc,
// X, Y del vértice de la izquierda.
centro.x - ancho / 2, centro.y - alto / 2,
// X, Y del vértice de la derecha.
centro.x + ancho / 2, centro.y - alto / 2);
// Lado inferior.
- gdk_draw_line(widget->window,
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ gdk_draw_line(GDK_DRAWABLE(widget->window), gc,
// X, Y del vértice de la izquierda.
centro.x - ancho / 2, centro.y + alto / 2,
// X, Y del vértice de la derecha.
centro.x + ancho / 2, centro.y + alto / 2);
+ // Libero la copia del contexto gráfico.
+ g_object_unref(G_OBJECT(gc));
}