static void draw_crosshair (render_priv *priv) { GdkWindow *window = gtk_widget_get_window (gport->drawing_area); GtkStyle *style = gtk_widget_get_style (gport->drawing_area); gint x, y; static GdkGC *xor_gc; static GdkColor cross_color; if (gport->crosshair_x < 0 || ghidgui->creating || !gport->has_entered) return; if (!xor_gc) { xor_gc = gdk_gc_new (window); gdk_gc_copy (xor_gc, style->white_gc); gdk_gc_set_function (xor_gc, GDK_XOR); gdk_gc_set_clip_origin (xor_gc, 0, 0); set_clip (priv, xor_gc); /* FIXME: when CrossColor changed from config */ ghid_map_color_string (Settings.CrossColor, &cross_color); } gdk_gc_set_foreground (xor_gc, &cross_color); x = DRAW_X (gport->crosshair_x); y = DRAW_Y (gport->crosshair_y); draw_right_cross (xor_gc, x, y); if (Crosshair.shape == Union_Jack_Crosshair_Shape) draw_slanted_cross (xor_gc, x, y); if (Crosshair.shape == Dozen_Crosshair_Shape) draw_dozen_cross (xor_gc, x, y); }
static void draw_crosshair (GdkGC *xor_gc, gint x, gint y) { static enum crosshair_shape prev = Basic_Crosshair_Shape; draw_right_cross (xor_gc, x, y); if (prev == Union_Jack_Crosshair_Shape) draw_slanted_cross (xor_gc, x, y); if (prev == Dozen_Crosshair_Shape) draw_dozen_cross (xor_gc, x, y); prev = Crosshair.shape; }