func render_all(rects []Rect, m int) { gtk.Init(&os.Args) window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL) window.SetTitle("GTK DrawingArea") window.Connect("destroy", func() { gtk.MainQuit() }, nil) vbox := gtk.VBox(true, 0) vbox.SetBorderWidth(5) drawingarea = gtk.DrawingArea() var pixmap *gdk.GdkPixmap drawingarea.Connect("configure-event", func() { if pixmap != nil { pixmap.Unref() } var allocation gtk.GtkAllocation drawingarea.GetAllocation(&allocation) draw = drawingarea.GetWindow().GetDrawable() pixmap = gdk.Pixmap(drawingarea.GetWindow().GetDrawable(), allocation.Width, allocation.Height, 24) gc = gdk.GC(pixmap.GetDrawable()) gc.SetRgbFgColor(gdk.Color("white")) pixmap.GetDrawable().DrawRectangle(gc, true, 0, 0, -1, -1) gc.SetRgbFgColor(gdk.Color("black")) gc.SetRgbBgColor(gdk.Color("white")) }, nil) drawingarea.Connect("expose-event", func() { if pixmap != nil { drawingarea.GetWindow().GetDrawable().DrawDrawable(gc, pixmap.GetDrawable(), 0, 0, 0, 0, -1, -1) } draw_all(rects, m) }, nil) vbox.Add(drawingarea) window.Add(vbox) window.Maximize() window.ShowAll() gtk.Main() }
func draw_all(rects []Rect, m int) { strip_width := W / float64(m) if strip_width > 1 { strip_width = 1 } for y := 0; y < m; y++ { global := Rect{float64(y) * strip_width, 0, H, strip_width} global.Draw(false) } for _, r := range rects { r.w *= strip_width r.x *= strip_width r.Draw(!*pnonsolid) } if *prenderbins { gc.SetRgbFgColor(gdk.Color("red")) for _, r := range bins_to_render { r.w *= strip_width r.x *= strip_width r.Draw(false) } gc.SetRgbFgColor(gdk.Color("black")) } }
func main() { gtk.Init(&os.Args) window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL) window.SetTitle("GTK DrawingArea") window.Connect("destroy", func() { gtk.MainQuit() }, nil) vbox := gtk.VBox(true, 0) vbox.SetBorderWidth(5) drawingarea := gtk.DrawingArea() var p1, p2 point var mt uint var gdkwin *gdk.GdkWindow var pixmap *gdk.GdkPixmap var gc *gdk.GdkGC p1.x = -1 p1.y = -1 drawingarea.Connect("configure-event", func() { if pixmap != nil { pixmap.Unref() } var allocation gtk.GtkAllocation drawingarea.GetAllocation(&allocation) pixmap = gdk.Pixmap(drawingarea.GetWindow().GetDrawable(), allocation.Width, allocation.Height, 24) gc = gdk.GC(pixmap.GetDrawable()) gc.SetRgbFgColor(gdk.Color("white")) pixmap.GetDrawable().DrawRectangle(gc, true, 0, 0, -1, -1) gc.SetRgbFgColor(gdk.Color("black")) gc.SetRgbBgColor(gdk.Color("white")) }, nil) drawingarea.Connect("motion-notify-event", func() { if gdkwin == nil { gdkwin = drawingarea.GetWindow() } gdkwin.GetPointer(&p2.x, &p2.y, &mt) if p1.x != -1 && p2.x != -1 && (mt&gdk.GDK_BUTTON_PRESS_MASK) != 0 { pixmap.GetDrawable().DrawLine(gc, p1.x, p1.y, p2.x, p2.y) drawingarea.GetWindow().Invalidate(nil, false) } p1 = p2 }, nil) drawingarea.Connect("expose-event", func() { if pixmap != nil { drawingarea.GetWindow().GetDrawable().DrawDrawable(gc, pixmap.GetDrawable(), 0, 0, 0, 0, -1, -1) } }, nil) drawingarea.SetEvents(gdk.GDK_POINTER_MOTION_MASK | gdk.GDK_POINTER_MOTION_HINT_MASK | gdk.GDK_BUTTON_PRESS_MASK) vbox.Add(drawingarea) window.Add(vbox) window.SetSizeRequest(400, 400) window.ShowAll() gtk.Main() }