From: Leandro Lucarella Date: Sat, 4 Oct 2003 19:22:57 +0000 (+0000) Subject: Ya se setea bien el grueso del trazo y anda bien el círculo. X-Git-Tag: svn_import~18 X-Git-Url: https://git.llucax.com/z.facultad/75.42/figuras.git/commitdiff_plain/f5088550a4245865592cb5fd781da3862ef1bef1 Ya se setea bien el grueso del trazo y anda bien el círculo. --- diff --git a/circulo.cpp b/circulo.cpp index 55774b0..2db9581 100644 --- a/circulo.cpp +++ b/circulo.cpp @@ -39,19 +39,25 @@ void Circulo::dibujar(GtkWidget* widget) const { #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)); } diff --git a/figura.cpp b/figura.cpp index c6ad541..5ce3dec 100644 --- a/figura.cpp +++ b/figura.cpp @@ -49,9 +49,13 @@ Figura::~Figura(void) { #endif } -void Figura::dibujar(GtkWidget* widget) const { - //out << "color(" << color << "), grosor(" << grosor - // << "), nombre(" << nombre << "), centro("; - //centro.dibujar(out); +void Figura::set_gc(GdkGC* gc) const { + gdk_gc_set_line_attributes( + gc, + grosor, + GDK_LINE_SOLID, + GDK_CAP_ROUND, + GDK_JOIN_ROUND); + //gdk_gc_set_foreground(gc, c); } diff --git a/figura.h b/figura.h index d7c027a..8e99a46 100644 --- a/figura.h +++ b/figura.h @@ -40,6 +40,15 @@ class Figura { /// 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: /** @@ -55,10 +64,12 @@ class Figura { /** * 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; }; diff --git a/linea.cpp b/linea.cpp index 9c091c3..924bf9f 100644 --- a/linea.cpp +++ b/linea.cpp @@ -38,12 +38,19 @@ void Linea::dibujar(GtkWidget* widget) const { #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)); } diff --git a/rectangulo.cpp b/rectangulo.cpp index 26510d6..da7e087 100644 --- a/rectangulo.cpp +++ b/rectangulo.cpp @@ -38,37 +38,39 @@ void Rectangulo::dibujar(GtkWidget* widget) const { #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)); }