/* * gtkDPS paint selection test program by Masatake YAMATO */ #include #include #include "gtkDPSpaintsel.h" #include "gtkDPS.h" #include #define MAX_ENTRIES (50 - 1) static void init_gui (int argc, char *argv[]); static void draw_entry(GtkDPSPaintSelection * paintsel, DPSContext raw_ctxt, GdkDPSRectangle * rect, GtkDPSPaintSelectionEntry * entry); int main(int argc, char *argv[]) { const gchar * version; gtk_init (&argc, &argv); gtk_dps_init (&argc, &argv); version = gtk_dps_version(); fprintf(stderr, "GtkDPS version %s\n", version); init_gui(argc, argv); gtk_main(); return 0; } static void init_gui (int argc, char *argv[]) { int i; gchar name[8]; GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget * paintsel = gtk_dps_paint_selection_new(12); for (i = 0; i < MAX_ENTRIES; i++) { sprintf(name, "%d", i); gtk_dps_paint_selection_add_entry(GTK_DPS_PAINT_SELECTION(paintsel), NULL, FALSE, name); } gtk_signal_connect(GTK_OBJECT(paintsel), "draw_entry", (GtkSignalFunc)draw_entry, NULL); gtk_widget_show(paintsel); gtk_container_add(GTK_CONTAINER(window), paintsel); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_exit), NULL); gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (gtk_exit), NULL); gtk_widget_show(window); } static void draw_entry_grad(GtkDPSPaintSelection * paintsel, DPSContext raw_ctxt, GdkDPSRectangle * rect, GtkDPSPaintSelectionEntry * entry); static void draw_entry_color(GtkDPSPaintSelection * paintsel, DPSContext raw_ctxt, GdkDPSRectangle * rect, GtkDPSPaintSelectionEntry * entry); static void draw_entry(GtkDPSPaintSelection * paintsel, DPSContext raw_ctxt, GdkDPSRectangle * rect, GtkDPSPaintSelectionEntry * entry) { if (entry->position%2) draw_entry_grad(paintsel, raw_ctxt, rect, entry); else draw_entry_color(paintsel, raw_ctxt, rect, entry); } static void draw_entry_grad(GtkDPSPaintSelection * paintsel, DPSContext raw_ctxt, GdkDPSRectangle * rect, GtkDPSPaintSelectionEntry * entry) { gint i; gfloat radius; gfloat colors[6]; gint step = 6; gfloat step_invert = (1.0/(gfloat)step); gfloat r_step, g_step, b_step; for (i = 0; i < 6; i++) colors[i] = ((gfloat)(rand()%256))/255.0; DPStranslate(raw_ctxt, rect->x + (rect->width/2.0), rect->y + (rect->height/2.0)); radius = (rect->width > rect->height)? (rect->width/1.5): (rect->height/1.5); r_step = (colors[0] - colors[3])/(gfloat)step; b_step = (colors[1] - colors[4])/(gfloat)step; g_step = (colors[2] - colors[5])/(gfloat)step; for (i = step; i > 0; i--) { DPSsetrgbcolor(raw_ctxt, colors[3]+(i*r_step), colors[4]+(i*r_step), colors[5]+(i*r_step)); DPSarc(raw_ctxt, (float)0.0, (float)0.0, step_invert*radius*(gfloat)i, 0.0, 360.0); DPSfill(raw_ctxt); } } static void draw_entry_color(GtkDPSPaintSelection * paintsel, DPSContext raw_ctxt, GdkDPSRectangle * rect, GtkDPSPaintSelectionEntry * entry) { gint i; gfloat colors[3]; for (i = 0; i < 3; i++) colors[i] = ((gfloat)(rand()%256))/255.0; DPSsetrgbcolor(raw_ctxt, colors[0], colors[1], colors[2]); DPSrectfill(raw_ctxt, rect->x, rect->y, rect->width, rect->height); }