/** showgc.c **/ #include gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); gint listValues(gpointer data); static char *functionString(GdkFunction function); static char *fillString(GdkFill fill); static char *subwindowString(GdkSubwindowMode mode); static char *lineStyleString(gint style); static char *capStyleString(gint style); static char *joinStyleString(gint style); #define WIDTH 40 #define HEIGHT 30 int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *area; gnome_init("showgc","1.0",argc,argv); app = gnome_app_new("flasher","Listing GC"); gtk_signal_connect(GTK_OBJECT(app),"delete_event", GTK_SIGNAL_FUNC(eventDelete),NULL); gtk_signal_connect(GTK_OBJECT(app),"destroy", GTK_SIGNAL_FUNC(eventDestroy),NULL); area = gtk_drawing_area_new(); gtk_widget_set_usize(area,WIDTH,HEIGHT); gnome_app_set_contents(GNOME_APP(app),area); gtk_signal_connect(GTK_OBJECT(app),"realize", GTK_SIGNAL_FUNC(listValues),area); gtk_widget_show_all(app); gtk_main(); exit(0); } gint listValues(gpointer data) { GtkWidget *widget = GTK_WIDGET(data); GdkGC *gc; GdkGCValues gcv; gc = widget->style->white_gc; gdk_gc_get_values(gc,&gcv); printf("foreground RGB: %u %u %u (0x%08X)\n", gcv.foreground.red,gcv.foreground.green, gcv.foreground.blue,(guint)gcv.foreground.pixel); printf("background RGB: %u %u %u (0x%08X)\n", gcv.background.red,gcv.background.green, gcv.background.blue,(guint)gcv.background.pixel); printf("font id: %d ascent: %d descent: %d\n", gdk_font_id(gcv.font), gcv.font->ascent,gcv.font->descent); printf("pixel drawing function: %s\n", functionString(gcv.function)); printf("fill method: %s\n",fillString(gcv.fill)); printf("subwindow mode: %s\n", subwindowString(gcv.subwindow_mode)); printf("tiling/stippling origin: (%d,%d)\n", gcv.ts_x_origin,gcv.ts_y_origin); printf("clipping origin: (%d,%d)\n", gcv.clip_x_origin,gcv.clip_y_origin); printf("graphic exposures: %s\n", gcv.graphics_exposures ? "True" : "False"); printf("line width: %d\n",gcv.line_width); printf("line style: %s\n", lineStyleString(gcv.line_style)); printf("cap style: %s\n", capStyleString(gcv.line_style)); printf("join style: %s\n", joinStyleString(gcv.line_style)); return(TRUE); } static char *functionString(GdkFunction function) { switch(function) { case GDK_COPY: return("copy"); case GDK_INVERT: return("invert"); case GDK_XOR: return("xor"); case GDK_CLEAR: return("clear"); case GDK_AND: return("and"); case GDK_AND_REVERSE: return("and reverse"); case GDK_AND_INVERT: return("and invert"); case GDK_NOOP: return("noop"); case GDK_OR: return("or"); case GDK_EQUIV: return("equiv"); case GDK_OR_REVERSE: return("or reverse"); case GDK_COPY_INVERT: return("copy invert"); case GDK_OR_INVERT: return("or invert"); case GDK_NAND: return("nand"); case GDK_SET: return("set"); default: return(""); } } static char *fillString(GdkFill fill) { switch(fill) { case GDK_SOLID: return("solid"); case GDK_TILED: return("tiled"); case GDK_STIPPLED: return("stippled"); case GDK_OPAQUE_STIPPLED: return("opaque stippled"); default: return(""); } } static char *subwindowString(GdkSubwindowMode mode) { if(mode == GDK_CLIP_BY_CHILDREN) return("clip by children"); else if(mode == GDK_INCLUDE_INFERIORS) return("include inferiors"); return(""); } static char *lineStyleString(gint style) { switch(style) { case GDK_LINE_SOLID: return("solid"); case GDK_LINE_ON_OFF_DASH: return("on off dash"); case GDK_LINE_DOUBLE_DASH: return("double dash"); default: return(""); } } static char *capStyleString(gint style) { switch(style) { case GDK_CAP_NOT_LAST: return("not last"); case GDK_CAP_BUTT: return("butt"); case GDK_CAP_ROUND: return("round"); case GDK_CAP_PROJECTING: return("projecting"); default: return(""); } } static char *joinStyleString(gint style) { switch(style) { case GDK_JOIN_MITER: return("miter"); case GDK_JOIN_ROUND: return("round"); case GDK_JOIN_BEVEL: return("bevel"); default: return(""); } } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }