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

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]