GDK drawing problem



HI, all
I am design a little program using GTK. I am new to GTK so I don't know how to do it. The requirements of the project are given below:

a gtkwindow splited into two parts (left and right), several toggle buttons on the right cell. When I click one button, some basic primitives will be drawn on the left cell; if I click it again, those primitives drawn by this button will be hidden.

I have generated the GUI using glade and modified something in interface.c, but it doesn't do what I want. ( I haven't added any event handler to those buttons.)
eg:
I only want the background of left cell be green, right cell remains. But I don't know when and how to get a GdkGC only for left part.

Can anyone give a suggestion on how to remove the primitives already drawn on screen?

thanks

the source of interface.c:

//////////////////////////////////////////////////////////////////////////////
GtkWidget*
create_window1 (void)
{
 GtkWidget *window1;
 GtkWidget *hbox1;
 GtkWidget *drawingarea1;
 GtkWidget *frame1;
 GtkWidget *vbox1;
 GtkWidget *togglebutton7;
 GtkWidget *togglebutton8;
 GtkWidget *togglebutton9;
 GtkWidget *togglebutton10;
 GtkWidget *togglebutton11;
 GtkWidget *togglebutton12;
 GtkWidget *togglebutton13;

        /*
         * User defined variables
         */
        GdkColor* color;
        GdkPixmap *background,*source,*dist,*ff;
        GdkGC *gc,*gcc,*gccc;
        int sizeX = 400;
        int sizeY = 400;
        GdkColor red,white,black;

 window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_object_set_data (GTK_OBJECT (window1), "window1", window1);
 gtk_window_set_title (GTK_WINDOW (window1), "My Window");
 gtk_window_set_default_size (GTK_WINDOW (window1), -1, 400);

 gtk_widget_show(window1);

 hbox1 = gtk_hbox_new (FALSE, 10);
 gtk_widget_ref (hbox1);
 gtk_object_set_data_full (GTK_OBJECT (window1), "hbox1", hbox1,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (hbox1);
 gtk_container_add (GTK_CONTAINER (window1), hbox1);
/*
 drawingarea1 = gtk_drawing_area_new ();
 gtk_widget_ref (drawingarea1);
gtk_object_set_data_full (GTK_OBJECT (window1), "drawingarea1", drawingarea1,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (drawingarea1);
 gtk_box_pack_start (GTK_BOX (hbox1), drawingarea1, TRUE, TRUE, 0);
*/
/*//////////////////////////////////////////////////*/
        gc = gdk_gc_new(window1->window);
        g_assert(gc!= NULL);
        color = (GdkColor*)malloc(sizeof(GdkColor));
        color->red=0;
        color->green = 0xffff;
        color->blue = 0;
        color->pixel = (gulong)(0);
        gdk_color_alloc(gtk_widget_get_colormap(window1),color);

        background = gdk_pixmap_new(window1->window,sizeX,sizeY,-1);
        g_assert(background != NULL);
        gdk_gc_set_foreground(gc,color);
        gdk_draw_rectangle(background,gc,TRUE,0,0,sizeX,sizeY);

        gtk_widget_set_app_paintable(window1,TRUE);
        gdk_window_set_back_pixmap(window1->window,background,0);

        gdk_color_parse("red",&red);
        gdk_color_alloc(gtk_widget_get_colormap(window1),&red);
        gdk_color_parse("red",&white);
        gdk_color_alloc(gtk_widget_get_colormap(window1),&white);
        gdk_color_parse("red",&black);
        gdk_color_alloc(gtk_widget_get_colormap(window1),&black);

        source = gdk_pixmap_new(window1->window,sizeX,sizeY,-1);
        dist = gdk_pixmap_new(NULL,sizeX,sizeY,1);

        gcc = gdk_gc_new(dist);
        gdk_gc_set_foreground(gcc,&black);
        gdk_draw_rectangle(dist,gcc,TRUE,0,0,sizeX,sizeY);
        gdk_gc_set_foreground(gcc,&white);

        gccc = gdk_gc_new(source);
        gdk_gc_set_background(gccc,&white);
        gdk_draw_rectangle(source,gccc,TRUE,0,0,sizeX,sizeY);

        gdk_gc_set_foreground(gccc,&white);
        gdk_draw_rectangle(source,gccc,TRUE,20,20,100,100);
        gdk_draw_rectangle(dist,gcc,TRUE,20,20,100,100);

        gdk_gc_set_foreground(gccc,&black);
        gdk_draw_rectangle(source,gccc,FALSE,0,0,10,10);
        gdk_draw_rectangle(dist,gcc,FALSE,0,0,10,10);

        gdk_gc_set_foreground(gccc,&red);
        gdk_draw_rectangle(source,gccc,TRUE,70,50,100,100);
        gdk_draw_rectangle(dist,gcc,TRUE,70,50,100,100);


        drawingarea1= gtk_pixmap_new(source,dist);
//      gdk_pixmap_unref(source);
//      gdk_pixmap_unref(dist);
//      gtk_widget_ref (drawingarea1);
// gtk_object_set_data_full (GTK_OBJECT (window1), "drawingarea1", drawingarea1,
//                                                      (GtkDestroyNotify) gtk_widget_unref);
        gtk_widget_show (drawingarea1);
        gtk_box_pack_start (GTK_BOX (hbox1), drawingarea1, TRUE, TRUE, 0);


/*//////////////////////////////////////////////////*/
 frame1 = gtk_frame_new ("Controls");
 gtk_widget_ref (frame1);
 gtk_object_set_data_full (GTK_OBJECT (window1), "frame1", frame1,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (frame1);
 gtk_box_pack_start (GTK_BOX (hbox1), frame1, FALSE, TRUE, 0);
 gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_ETCHED_OUT);

 vbox1 = gtk_vbox_new (FALSE, 20);
 gtk_widget_ref (vbox1);
 gtk_object_set_data_full (GTK_OBJECT (window1), "vbox1", vbox1,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (vbox1);
 gtk_container_add (GTK_CONTAINER (frame1), vbox1);

 togglebutton7 = gtk_toggle_button_new_with_label ("togglebutton7");
 gtk_widget_ref (togglebutton7);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton7", togglebutton7,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton7);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton7, FALSE, FALSE, 0);

 togglebutton8 = gtk_toggle_button_new_with_label ("togglebutton8");
 gtk_widget_ref (togglebutton8);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton8", togglebutton8,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton8);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton8, FALSE, FALSE, 0);

 togglebutton9 = gtk_toggle_button_new_with_label ("togglebutton9");
 gtk_widget_ref (togglebutton9);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton9", togglebutton9,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton9);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton9, FALSE, FALSE, 0);

 togglebutton10 = gtk_toggle_button_new_with_label ("togglebutton10");
 gtk_widget_ref (togglebutton10);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton10", togglebutton10,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton10);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton10, FALSE, FALSE, 0);

 togglebutton11 = gtk_toggle_button_new_with_label ("togglebutton11");
 gtk_widget_ref (togglebutton11);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton11", togglebutton11,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton11);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton11, FALSE, FALSE, 0);

 togglebutton12 = gtk_toggle_button_new_with_label ("togglebutton12");
 gtk_widget_ref (togglebutton12);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton12", togglebutton12,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton12);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton12, FALSE, FALSE, 0);

 togglebutton13 = gtk_toggle_button_new_with_label ("togglebutton13");
 gtk_widget_ref (togglebutton13);
gtk_object_set_data_full (GTK_OBJECT (window1), "togglebutton13", togglebutton13,
                           (GtkDestroyNotify) gtk_widget_unref);
 gtk_widget_show (togglebutton13);
 gtk_box_pack_start (GTK_BOX (vbox1), togglebutton13, FALSE, FALSE, 0);

 gtk_signal_connect (GTK_OBJECT (window1), "destroy",
                     GTK_SIGNAL_FUNC (gtk_main_quit),
                     NULL);

 return window1;
}

_________________________________________________________________
Get 10mb of inbox space with MSN Hotmail Extra Storage http://join.msn.com/?pgmarket=en-sg




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]