]> git.llucax.com Git - z.facultad/75.42/figuras.git/commitdiff
Ya se setea bien el grueso del trazo y anda bien el círculo.
authorLeandro Lucarella <llucax@gmail.com>
Sat, 4 Oct 2003 19:22:57 +0000 (19:22 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 4 Oct 2003 19:22:57 +0000 (19:22 +0000)
circulo.cpp
figura.cpp
figura.h
linea.cpp
rectangulo.cpp

index 55774b0a8d5d17f66cdf07cff3e1a1ac55148073..2db958186d0bb453b5cb60d2e1c48eb09740b807 100644 (file)
@@ -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));
 }
 
index c6ad541fa576ee3f12e9123e16fce7298e0b54ff..5ce3dec7ec0b6289a67d1c8335af1e63a37971f5 100644 (file)
@@ -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);
 }
 
index d7c027a14b44967ba16aa809cdc209ef62b120a5..8e99a46f07aa8f3c1d31556fc3b9944e60c2428c 100644 (file)
--- 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;
 
 };
 
index 9c091c3c2faa5b9abb883a357f9fbce02bcd369f..924bf9fcb97dac34b54abe849f02e5848a54bc00 100644 (file)
--- 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));
 }
 
index 26510d61a7ec06f23b8fbb1166626b761974d789..da7e087d01784172909e768dbf3ec815e7a2ca3e 100644 (file)
@@ -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));
 }