/** linestyle.c **/ #include gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); gboolean eventDraw(GtkWidget *widget, GdkEvent *event,gpointer data); #define WIDTH 300 #define HEIGHT 350 int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *area; gnome_init("linestyle","1.0",argc,argv); app = gnome_app_new("linestyle","Line Styles"); 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(area),"event", GTK_SIGNAL_FUNC(eventDraw),NULL); gtk_widget_show_all(app); gtk_main(); exit(0); } gboolean eventDraw(GtkWidget *widget, GdkEvent *event,gpointer data) { int i; int x = 40; int y = 180; char dashList[4] = { 5, 15, 20, 30 }; GdkGC *gc; GdkColormap *colormap; GdkColor foreground; GdkColor background; GdkFont *font; GdkPoint points[3] = { { 80, 40 }, { 40, 120 }, { 80, 120 } }; font = gdk_font_load("vga"); gc = gdk_gc_new(widget->window); colormap = gdk_colormap_get_system(); if(gdk_color_parse("blue",&foreground)) { gdk_color_alloc(colormap,&foreground); gdk_gc_set_foreground(gc,&foreground); } if(gdk_color_parse("yellow",&background)) { gdk_color_alloc(colormap,&background); gdk_gc_set_background(gc,&background); } /*- The MITER join -*/ gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); gdk_draw_polygon(widget->window, gc, FALSE, points, (int)(sizeof(points)/sizeof(GdkPoint))); gdk_draw_string(widget->window, font, gc, points[1].x,points[1].y + 20, "Miter"); /*- The ROUND join -*/ for(i=0; i<3; i++) points[i].x += 80; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_ROUND); gdk_draw_polygon(widget->window, gc, FALSE, points, (int)(sizeof(points)/sizeof(GdkPoint))); gdk_draw_string(widget->window, font, gc, points[1].x,points[1].y + 20, "Round"); /*- The BEVEL join -*/ for(i=0; i<3; i++) points[i].x += 80; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_BEVEL); gdk_draw_polygon(widget->window, gc, FALSE, points, (int)(sizeof(points)/sizeof(GdkPoint))); gdk_draw_string(widget->window, font, gc, points[1].x,points[1].y + 20, "Bevel"); /*- Cap BUTT -*/ gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "Butt"); /*- Cap NOT LAST -*/ y += 20; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "Not last"); /*- Cap ROUND -*/ y += 20; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "Round"); /*- Cap PROJECTING -*/ y += 20; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "Projecting"); /*- Style SOLID -*/ y += 40; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "Solid"); /*- Style ON_OFF_DASH -*/ y += 20; gdk_gc_set_dashes(gc, 0, dashList, 4); gdk_gc_set_line_attributes(gc, 10, GDK_LINE_ON_OFF_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "On off dash"); /*- Style DOUBLE DASH -*/ y += 20; gdk_gc_set_line_attributes(gc, 10, GDK_LINE_DOUBLE_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER); gdk_draw_line(widget->window, gc, x,y, x + 120,y); gdk_draw_string(widget->window, font, gc, x + 130,y + 5, "Double dash"); gdk_font_unref(font); gdk_gc_unref(gc); return(TRUE); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }