I would suggest you look at doing your drawing with cairo if possible. 
Once I discovered that, I gave up on calling all those gdk functions. 
Read the documents on their site at, http://www.cairographics.org . It 
looks like most gtk drawing is going this way. I'm also fuzzy on what 
the role of the pixmap is in your example. Are you trying to draw to a 
widget, or to a pixmap?

Here is an untested example off of the top of my head to do what you 
want to a widget (drawing area widget that is)...

void draw(GtkWidget* widget)
{
 int width = widget->allocation.width;
 int height = widget->allocation.height;
 cairo_t *cr gdk_cairo_create(widget->window);

 int x = width / 2;
 int y = height / 2;
 int r = 30;

 /* clearing to white: (rgb values in cairo are floating points instead of 
bytes) */
 cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
 cairo_rectangle(, 0, 0, width, height);
 cairo_fill(cr);

 cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
 cairo_arc(cr, x, y, r, 0.0, 0.0);
 cairo_fill(cr);
 cairo_set_source_rgb(cr, 1.0, 0.0, 0.0);
 cairo_stroke(cr);

 cairo_destroy(cr);
}



> Date: Mon, 14 Apr 2008 07:05:20 -0700 (PDT)
> From: Sergey Parhomenko <[EMAIL PROTECTED]>
> Subject: How to draw a primitive with one color and fill it with
>       another?
> To: gtk-app-devel-list@gnome.org
> Message-ID: <[EMAIL PROTECTED]>
> Content-Type: text/plain; charset=iso-8859-1
>
> Hello everyone.
>
> I want to draw a red circle filled within with a green
> color on my pixmap. I've set foreground and background
> colors and passed TRUE as the "filled" parameter to
> gdk_draw_arc(). But the circle is filled with the same
> color as it is drawn, that is with the foreground
> color - red.
>
> How can I draw a red circle filled with green? The
> relevant part of my code is below.
>
> /* ... */
>
> static GdkPixmap *pixmap = NULL;
>
> void draw(GtkWidget* widget)
> {
>   int width = widget->allocation.width;
>   int height = widget->allocation.height;
>   GdkGC *gc;
>   GdkColor colors[2];
>
>   int x = width / 2;
>   int y = height / 2;
>   int r = 30;
>
>   if (pixmap)
>     g_object_unref (pixmap);
>   pixmap = gdk_pixmap_new (widget->window,
>                            width,
>                            height,
>                            -1);
>   gc = gdk_gc_new((GdkDrawable *)pixmap);
> /* clearing to white: */
>   gdk_draw_rectangle (pixmap,
>                       widget->style->white_gc,
>                       TRUE,
>                       0, 0,
>                       width,
>                       height);
>
>   gdk_color_parse("#ff0000", &colors[0]);
>   gdk_color_parse("#00ff00", &colors[1]);
> /* By the way, can I get red and green GdkColor
> faster, without these gdk_color_parse()? Are some
> constants for this available? */
>   gdk_gc_set_rgb_fg_color(gc, &colors[0]);
>   gdk_gc_set_rgb_bg_color(gc, &colors[1]);
>
>   gdk_draw_arc(pixmap, gc, TRUE, x - r / 2, y - r / 2,
> r, r, 0, 64 * 360);
> }
>
> /* ... */
>
>
>
>
>   

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to