Many questions when I drew a line



/***************************************************************************
I'm new to GTK+, please help me with following simple questions.
Thanks for your patience.

I wrote a simple programme to draw a line, the whole file is below these questions:
1. I use gtk_widget_set_size_request() to resize the drawing_area,
   but it's useless. The size of the drawing_area will resize to it's
   parent's size automatically.How to make it's size fixed?
2. The bg_color I set in redraw() is useless too. Each time I run the application,
   the background color is different. Looks like random color.
3. Where can find introduction of GrStyle? It's too simple in GTK+ Manual Page.
4. How to set the line color and line width?
5. How to use color? The common RGB color is like (255, 255, 255),
   but in GTK+ this can be (0xffff, 0xffff, 0xffff). 
   I was confused, how to set a right RGB color? Is there a bunch of build in
   color I can use?
 ***************************************************************************/
#include <gtk/gtk.h>

gboolean redraw(GtkWidget *widget, GdkEvent *event, gpointer data)
{
	GdkGC *gc = gdk_gc_new(widget->window);
	GdkColor bg_color;

	// Draw background
	bg_color.red = 0xffff;
	bg_color.green = 0;
	bg_color.blue = 0;
	gdk_gc_set_foreground(gc, &bg_color);
	gdk_draw_rectangle(widget->window, gc, TRUE,
			0, 0, widget->allocation.width, widget->allocation.height);
	gdk_draw_line(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE(widget)],
			0, 0, 120, 100);

	return TRUE;
}

int main(int argc, char *argv[])
{
	GtkWidget *w;
	GtkWidget *drawing_area;

	gtk_init(&argc, &argv);

	w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size(GTK_WINDOW(w), 300, 200);
	g_signal_connect(GTK_OBJECT(w), "destroy", G_CALLBACK(gtk_main_quit), NULL);

	drawing_area = gtk_drawing_area_new();
	gtk_widget_set_size_request(GTK_WIDGET(drawing_area), 100, 100);
	g_signal_connect(G_OBJECT(drawing_area), "expose-event", G_CALLBACK(redraw), NULL);
	gtk_container_add(GTK_CONTAINER(w), drawing_area);

	gtk_widget_show_all(w);
	gtk_main();
	return 0; 
}



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