func main() { var cx, cy, cw, ch, midy int message := "Now is the time for all good men to come to the aid of the party" w, h := openvg.Init() var speed openvg.VGfloat = 15.0 var x openvg.VGfloat = 0 midy = (h / 2) fontsize := w / 50 cx = 0 ch = fontsize * 2 cw = w cy = midy - (ch / 2) rx, ry, rw, rh := openvg.VGfloat(cx), openvg.VGfloat(cy), openvg.VGfloat(cw), openvg.VGfloat(ch) // scroll the text, only in the clipping rectangle for x = 0; x < rw+speed; x += speed { openvg.Start(w, h) openvg.Background(255, 255, 255) openvg.FillRGB(0, 0, 0, .2) openvg.Rect(rx, ry, rw, rh) openvg.ClipRect(cx, cy, cw, ch) openvg.Translate(x, ry+openvg.VGfloat(fontsize/2)) openvg.FillRGB(0, 0, 0, 1) openvg.Text(0, 0, message, "sans", fontsize) openvg.ClipEnd() openvg.End() } bufio.NewReader(os.Stdin).ReadBytes('\n') openvg.Finish() os.Exit(0) }
func init() { width, height = openvg.Init() flag.Float64Var(&size, "s", float64(width)*.05, "bubble size") flag.IntVar(&niter, "n", width/6, "number of iterations") flag.Float64Var(&opacity, "o", 0.5, "opacity") flag.Parse() rand.Seed(int64(time.Now().Nanosecond()) % 1e9) }
// show the current time, weather and headlines func main() { var ( section = flag.String("h", "u.s.", "headline type (arts, health, sports, science, technology, u.s., world, hn)") location = flag.String("loc", "40.6213,-74.4395", "lat,long for weather") bgcolor = flag.String("bg", "slateblue", "background color") textcolor = flag.String("tc", "white", "text color") width = flag.Int("width", 0, "screen width") height = flag.Int("height", 0, "screen height") smartcolor = flag.Bool("sc", false, "smart colors") thumb = flag.Bool("tn", false, "show thumbnails") ) flag.Parse() // initial display dw, dh := openvg.Init() if *width > 0 && *height > 0 { dw, dh = *width, *height } openvg.Start(dw, dh) canvas := display{ width: openvg.VGfloat(dw), height: openvg.VGfloat(dh), bgcolor: *bgcolor, textcolor: *textcolor, } canvas.countdown() openvg.End() canvas.clock(*smartcolor) canvas.weather(*location) canvas.headlines(*section, *thumb) // update on specific intervals, shutdown on interrupt dateticker := time.NewTicker(1 * time.Minute) weatherticker := time.NewTicker(5 * time.Minute) headticker := time.NewTicker(10 * time.Minute) sigint := make(chan os.Signal, 1) signal.Notify(sigint, os.Interrupt) for { select { case <-dateticker.C: canvas.clock(*smartcolor) case <-weatherticker.C: canvas.weather(*location) case <-headticker.C: canvas.headlines(*section, *thumb) case <-sigint: openvg.Finish() os.Exit(0) } } }
// main initializes the system and shows the picture. // Exit and clean up when you hit [RETURN]. func main() { rseed() openvg.SaveTerm() nargs := len(os.Args) w, h := openvg.Init() openvg.RawTerm() progname := os.Args[0] n := 5 if nargs > 2 { n, _ = strconv.Atoi(os.Args[2]) } if nargs > 1 { switch os.Args[1] { case "help": usage(progname) os.Exit(1) case "advert": advert(w, h) case "image": imagetable(w, h) case "text": tb(w, h) case "textplay": textplay(w, h) case "astro": planets(w, h, "You are here") case "fontsize": fontrange(w, h) case "raspi": raspi(w, h, "The Raspberry Pi") case "loop": loop(w, h) case "demo": demo(w, h, n) case "rand": rshapes(w, h, n) case "test": testpattern(w, h, "hello, world") case "rotate": rotext(w, h, n, "Raspi") case "gradient": gradient(w, h) default: refcard(w, h) } } else { refcard(w, h) } WaitEnd() }
// main plots data from specified files or standard input in a // grid where plotc specifies the number of columns. func main() { w, h := openvg.Init() openvg.Start(w, h) openvg.FillColor("white") openvg.Rect(0, 0, gwidth, gheight) filenames := flag.Args() if len(filenames) == 0 { doplot(beginx, beginy, "") } else { plotgrid(beginx, beginy, filenames) } openvg.SaveEnd("vgplot.raw") bufio.NewReader(os.Stdin).ReadByte() openvg.Finish() }
func InitDisplay(iw, ih int) { sWidth, sHeight = openvg.Init() iWidth, iHeight = iw, ih out = make([]C.VGubyte, iw*ih*VG_CHANS) // clear screen to opaque black openvg.StartColor(sWidth, sHeight, "black", 1.0) openvg.End() // apply scale transform so images fill the screen ScaleImage(float64(sWidth)/float64(iWidth), float64(sHeight)/float64(iHeight)) fmt.Printf("Image display initialised to (%d, %d)\n", iw, ih) }
// raspberry pi, scaled to the screen dimensions func main() { w, h := openvg.Init() midx := openvg.VGfloat(w) / 2 midy := openvg.VGfloat(h) / 2 rw := midx rh := (rw * 2) / 3 fontsize := w / 25 openvg.Start(w, h) openvg.Background(255, 255, 255) makepi(midx-(rw/2), midy-(rh/2), rw, rh) makepi(200, 100, 75, 50) openvg.FillRGB(128, 0, 0, 1) openvg.TextMid(midx, midy-(rh/2)-openvg.VGfloat(fontsize*2), "The Raspberry Pi", "sans", fontsize) WaitEnd() }
func main() { width, height := openvg.Init() w := openvg.VGfloat(width) h := openvg.VGfloat(height) y := h / 2 var ( margin openvg.VGfloat = 100.0 minsize openvg.VGfloat = 7.0 labeloc openvg.VGfloat = 100.0 ) bgcolor := "black" labelcolor := "white" maxsize := (h / 2) * 0.05 origin := sun.distance mostDistant := neptune.distance firstSize := mercury.radius lastSize := neptune.radius openvg.Start(width, height) openvg.BackgroundColor(bgcolor) for _, p := range solarSystem { x := vmap(p.distance, origin, mostDistant, margin, w-margin) r := vmap(p.radius, firstSize, lastSize, minsize, maxsize) if p.name == "Sun" { openvg.FillRGB(p.color.Red, p.color.Green, p.color.Blue, 1) openvg.Circle(margin-(r/2), y, r) } else { light(x, y, r, p.color) openvg.Circle(x, y, r) } if p.name == "Earth" && len(os.Args) > 1 { openvg.StrokeColor(labelcolor) openvg.StrokeWidth(1) openvg.Line(x, y+(r/2), x, y+labeloc) openvg.StrokeWidth(0) openvg.FillColor(labelcolor) openvg.TextMid(x, y+labeloc+10, os.Args[1], "sans", 12) } } openvg.End() bufio.NewReader(os.Stdin).ReadByte() openvg.Finish() }
func main() { setOptions() rand.Seed(time.Now().Unix()) w, h := openvg.Init() width, height := openvg.VGfloat(w), openvg.VGfloat(h) initParticles(width, height) openvg.Start(w, h) i := 0 for { draw(width, height) i++ if alternate && i == nswitch { // switch launch direction every nswitch draws directionRTL = !directionRTL i = 0 } } }
func main() { width, height := openvg.Init() // OpenGL, etc initialization w2 := float64(width / 2) h2 := float64(height / 2) w := float64(width) openvg.Start(width, height) // Start the picture openvg.BackgroundColor("black") // Black background openvg.FillRGB(44, 77, 232, 1) // Big blue marble openvg.Circle(w2, 0, w) // The "world" openvg.FillColor("white") // White text openvg.TextMid(w2, h2, "hello, world", "serif", width/10) // Greetings openvg.SaveEnd("hello.raw") // End the picture bufio.NewReader(os.Stdin).ReadBytes('\n') // Pause until [RETURN] openvg.Finish() // Graphics cleanup }
func main() { var loop = flag.Bool("loop", false, "Loop the show") var resize = flag.Bool("resize", false, `Resize image to fit the screen.`) var bgcolor = flag.String("bg", "black", `Background color (named color or rgb(r,g,b)).`) var delay = flag.Duration("delay", 2*time.Second, "Delay between pictures") flag.Usage = func() { fmt.Fprintf(os.Stderr, "usage: %s [ flags ] images...\n", os.Args[0]) flag.PrintDefaults() os.Exit(1) } flag.Parse() w, h := openvg.Init() images := []image.Image{} imgcount := 0 for _, imgfile := range flag.Args() { fmt.Fprintf(os.Stderr, "loading %q ", imgfile) img, err := getimage(imgfile, w, h, *resize) if err != nil { fmt.Fprintln(os.Stderr, err) continue } images = append(images, img) imgcount++ fmt.Fprintln(os.Stderr, "ok") } for { for _, img := range images { ib := img.Bounds() imw, imh := ib.Max.X-ib.Min.X, ib.Max.Y-ib.Min.Y openvg.Start(w, h) openvg.BackgroundColor(*bgcolor) x, y := openvg.VGfloat(w)/2-openvg.VGfloat(imw)/2, openvg.VGfloat(h)/2-openvg.VGfloat(imh)/2 openvg.Img(x, y, img) openvg.End() time.Sleep(*delay) } if !*loop { break } } }
func main() { width, height := openvg.Init() // OpenGL, etc initialization w := openvg.VGfloat(width) h := openvg.VGfloat(height) openvg.Start(width, height) // Start the picture openvg.BackgroundColor("white") // Black background openvg.FillColor("black") var x, y, spacing openvg.VGfloat x = w * 0.10 y = h * 0.90 fontsize := 24 spacing = openvg.VGfloat(fontsize) * 2 var data = []string{ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f", "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f", "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f", "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f", "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f", "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f", "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f", "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f", "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f", "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf", "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf", "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf", "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf", "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef", "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", } for i, s := range data { openvg.Text(x-(spacing*2), y, fmt.Sprintf("%2x", i), "mono", fontsize) openvg.Text(x, y, s, "mono", fontsize) y -= spacing } openvg.End() // End the picture bufio.NewReader(os.Stdin).ReadBytes('\n') // Pause until [RETURN] openvg.Finish() // Graphics cleanup }
func main() { width, height := openvg.Init() // OpenGL, etc initialization w2 := float64(width / 2) h2 := float64(height / 2) w := float64(width) stops := []openvg.Offcolor{ {0.0, openvg.RGB{44, 100, 232}, 1.0}, // blue-ish {0.5, openvg.RGB{22, 50, 151}, 1.0}, // darker blue {1.0, openvg.RGB{88, 200, 255}, 1.0}, // lighter blue } openvg.Start(width, height) // Start the picture openvg.BackgroundColor("black") // Black background openvg.FillRadialGradient(w2, 0, w2, w2, w*.5, stops) // Big blue marble openvg.Circle(w2, 0, w) // The "world" openvg.FillColor("white") // White text openvg.TextMid(w2, h2, "hello, world", "serif", width/10) // Greetings openvg.SaveEnd("hvg.raw") // End the picture bufio.NewReader(os.Stdin).ReadBytes('\n') // Pause until [RETURN] openvg.Finish() // Graphics cleanup }
func main() { var nr = flag.Int("n", 500, "number of objects") var message = flag.String("m", "Go/OpenVG", "message") var bgcolor = flag.String("bg", "white", "background color") var fgcolor = flag.String("fg", "maroon", "text color") flag.Parse() rseed() width, height := openvg.Init() fw := openvg.VGfloat(width) fh := openvg.VGfloat(height) openvg.Start(width, height) openvg.BackgroundColor(*bgcolor) for i := 0; i < *nr; i++ { red := uint8(rand.Intn(255)) green := uint8(rand.Intn(255)) blue := uint8(rand.Intn(255)) alpha := randf() x := randf() * fw y := randf() * fh radius := randf() * fw / 10 openvg.FillRGB(red, green, blue, alpha) openvg.Circle(x, y, radius) } openvg.FillColor(*fgcolor) openvg.TextMid(fw/2, fh/2, *message, "sans", width/25) openvg.End() bufio.NewReader(os.Stdin).ReadBytes('\n') openvg.Finish() }
func main() { var ( filename = flag.String("f", "svgcolors.txt", "input file") fontname = flag.String("font", "sans", "fontname") neg = flag.Bool("neg", false, "negative") showrgb = flag.Bool("rgb", false, "show RGB") showcode = flag.Bool("showcode", true, "show colors and codes") circsw = flag.Bool("circle", true, "circle swatch") outline = flag.Bool("outline", false, "outline swatch") fontsize = flag.Int("fs", 12, "fontsize") rowsize = flag.Int("r", 32, "rowsize") colw = flag.Float64("c", 340, "column size") swatch = flag.Float64("s", 16, "swatch size") gutter = flag.Float64("g", 12, "gutter") err error tcolor, line string ) flag.Parse() f, oerr := os.Open(*filename) if oerr != nil { fmt.Fprintf(os.Stderr, "%v\n", oerr) return } width, height := openvg.Init() openvg.Start(width, height) fw := openvg.VGfloat(width) fh := openvg.VGfloat(height) if *neg { openvg.FillColor("black") openvg.Rect(0, 0, fw, fh) tcolor = "white" } else { openvg.FillColor("white") openvg.Rect(0, 0, fw, fh) tcolor = "black" } top := fh - 32.0 left := openvg.VGfloat(32.0) cw := openvg.VGfloat(*colw) sw := openvg.VGfloat(*swatch) g := openvg.VGfloat(*gutter) in := bufio.NewReader(f) for x, y, nr := left, top, 0; err == nil; nr++ { line, err = in.ReadString('\n') fields := strings.Split(strings.TrimSpace(line), "\t") if nr%*rowsize == 0 && nr > 0 { x += cw y = top } if len(fields) == 3 { var red, green, blue uint8 fmt.Sscanf(fields[2], "%d,%d,%d", &red, &green, &blue) openvg.FillRGB(red, green, blue, 1) if *outline { openvg.StrokeColor("black") openvg.StrokeWidth(1) } if *circsw { openvg.Circle(x+sw/2, y+sw/2, sw) } else { openvg.Rect(x, y, sw, sw) } openvg.StrokeWidth(0) openvg.FillColor(tcolor) openvg.Text(x+sw+openvg.VGfloat(*fontsize/2), y, fields[0], *fontname, *fontsize) var label string if *showcode { if *showrgb { label = fields[1] } else { label = fields[2] } openvg.FillColor("gray") openvg.TextEnd(x+cw-(sw+g), y, label, *fontname, *fontsize) } } y -= (sw + g) } openvg.End() bufio.NewReader(os.Stdin).ReadBytes('\n') openvg.Finish() }
func main() { flag.Usage = func() { fmt.Fprintf(os.Stdout, `usage: %s [ opts ] image-path Set specified image as an overlay screen via OpenVG lib. Default is to put this image to the center. `, os.Args[0]) flag.PrintDefaults() } var resize bool var bg_color string flag.BoolVar(&resize, "resize", false, `Resize image to fit the screen (using "convert" binary.`) flag.StringVar(&bg_color, "bg-color", "", `Background color to use with centered image, in RRGGBB (hex, e.g. "aabbcc") format.`) flag.Parse() if flag.NArg() != 1 { log.Print("ERROR: Exactly one image-path argument must be specified.") flag.Usage() } var r, g, b uint8 var err error if len(bg_color) == 0 { r, g, b = 0, 0, 0 } else if len(bg_color) == 6 { n, err := strconv.ParseUint(bg_color[:2], 16, 8) if err == nil { r = uint8(n) n, err = strconv.ParseUint(bg_color[2:4], 16, 8) } if err == nil { g = uint8(n) n, err = strconv.ParseUint(bg_color[4:6], 16, 8) } if err == nil { b = uint8(n) } } if err != nil { log.Fatalf("ERROR: Failed to parse bg-color value (%v): %v", bg_color, err) } image_path := flag.Args()[0] exit_code := 0 defer func() { os.Exit(exit_code) }() openvg.SaveTerm() w, h := openvg.Init() openvg.RawTerm() defer openvg.Finish() defer openvg.RestoreTerm() image_conf, err := get_image_conf(image_path) if err == nil && resize && (image_conf.Width != w || image_conf.Height != h) { image_path, err = resize_image(w, h, image_path) } if err != nil { log.Printf("ERROR: Failed to process image (%v): %v", image_path, err) exit_code = 1 } else { sig_chan := make(chan os.Signal, 1) signal.Notify(sig_chan, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGALRM) openvg.Start(w, h) openvg.Background(r, g, b) if resize { openvg.Image(0, 0, w, h, image_path) } else { x, y := openvg.VGfloat(w)/2-openvg.VGfloat(image_conf.Width)/2, openvg.VGfloat(h)/2-openvg.VGfloat(image_conf.Height)/2 openvg.Image(x, y, image_conf.Width, image_conf.Height, image_path) } openvg.End() _ = <-sig_chan } }
func main() { var resize = flag.Bool("resize", false, "Resize image to fit the screen.") var bgcolor = flag.String("bg", "black", "Background color (named color or rgb(r,g,b)).") var fgcolor = flag.String("fg", "white", "text color (named color or rgb(r,g,b)).") var title = flag.String("t", "", "text annotation") var fontsize = flag.Float64("fp", 2.0, "fontsize %") var px = flag.Float64("px", 50, "x position %") var py = flag.Float64("py", 50, "y position %") var texty = flag.Float64("ty", 0, "text y %") var exit_code int defer func() { os.Exit(exit_code) }() flag.Usage = func() { fmt.Fprintf(os.Stderr, `usage: %s [ flags ] image-path Set specified image as an overlay screen via OpenVG lib. Default is to put this image to the center. `, os.Args[0]) flag.PrintDefaults() exit_code = 1 return } flag.Parse() if flag.NArg() != 1 { fmt.Fprintf(os.Stderr, "Exactly one image-path argument must be specified.\n") flag.Usage() exit_code = 2 return } openvg.SaveTerm() w, h := openvg.Init() openvg.RawTerm() defer openvg.Finish() defer openvg.RestoreTerm() img, err := getimage(flag.Args()[0], w, h, *resize) if err != nil { exit_code = 3 return } ib := img.Bounds() imw, imh := ib.Max.X-ib.Min.X, ib.Max.Y-ib.Min.Y sig_chan := make(chan os.Signal, 1) signal.Notify(sig_chan, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGALRM) openvg.Start(w, h) openvg.BackgroundColor(*bgcolor) var x, y openvg.VGfloat if *px < 0 || *px > 100 { x = openvg.VGfloat(w)/2 - openvg.VGfloat(imw)/2 } else { x = openvg.VGfloat(w)*openvg.VGfloat(*px/100) - openvg.VGfloat(imw)/2 } if *py < 0 || *py > 100 { y = openvg.VGfloat(h)/2 - openvg.VGfloat(imh)/2 } else { y = openvg.VGfloat(h)*openvg.VGfloat(*py/100) - openvg.VGfloat(imh)/2 } openvg.Img(x, y, img) if len(*title) > 0 { var typ openvg.VGfloat fs := openvg.VGfloat(*fontsize/100.0) * openvg.VGfloat(w) if *texty == 0 { typ = y - fs*1.5 } else { typ = openvg.VGfloat(h) * openvg.VGfloat(*texty/100) } openvg.FillColor(*fgcolor) openvg.TextMid(x+openvg.VGfloat(imw)/2, typ, *title, "sans", int(fs)) } openvg.End() _ = <-sig_chan }
func main() { flag.StringVar(&mincolor, "mincolor", "maroon", "minute color") flag.StringVar(&facecolor, "facecolor", "white", "face color") flag.StringVar(&hrcolor, "hourcolor", "gray", "hour color") flag.StringVar(&secolor, "secolor", "maroon", "second color") flag.StringVar(&digitcolor, "digitcolor", "black", "digit color") flag.StringVar(&dotcolor, "dotcolor", "silver", "dotcolor") flag.StringVar(&framecolor, "framecolor", "gray", "frame color") flag.StringVar(¢ercolor, "centercolor", "black", "center color") flag.StringVar(&handstyle, "handstyle", "combo", "handstyle (combo, arrow, or round)") flag.BoolVar(&showdigits, "showdigits", true, "show digits") flag.BoolVar(&showdots, "showdots", true, "show dots") flag.BoolVar(&secline, "secline", false, "show second hand") flag.Parse() width, height := openvg.Init() cx := openvg.VGfloat(width / 2) cy := openvg.VGfloat(height / 2) facesize := openvg.VGfloat(cy * 0.5) textsize := facesize / 10.0 framesize := facesize * 2.5 hourstroke := textsize minstroke := hourstroke * .6 // set up the ticker and signal handler ticker := time.NewTicker(1 * time.Second) sigint := make(chan os.Signal, 1) signal.Notify(sigint, os.Interrupt) // main loop: for each second, draw the clock components openvg.Start(width, height) for { select { case <-ticker.C: // get the current time hr, min, sec := time.Now().Clock() // compute element coordinates hx, hy, mx, my, sx, sy := timecoord(cx, cy, facesize, hr, min, sec) // frame and clock face frame(cx, cy, framesize, facesize, textsize, framecolor, facecolor) face(cx, cy, facesize, int(textsize*1.5)) // hour and minute hands switch handstyle { case "round", "r": roundhand(cx, cy, mx, my, minstroke, mincolor) roundhand(cx, cy, hx, hy, hourstroke, hrcolor) case "arrow", "a": arrowhand(cx, cy, mx, my, facesize*0.9, minangles[min], 0, mincolor) arrowhand(cx, cy, hx, hy, facesize*0.6, hourangles[hr%12], min, hrcolor) case "combo", "c": combohand(cx, cy, mx, my, facesize*0.9, minstroke/2, minangles[min], 0, mincolor) combohand(cx, cy, hx, hy, facesize*0.6, minstroke/2, hourangles[hr%12], min, hrcolor) default: combohand(cx, cy, mx, my, facesize*0.9, minstroke/2, minangles[min], 0, mincolor) combohand(cx, cy, hx, hy, facesize*0.6, minstroke/2, hourangles[hr%12], min, hrcolor) } // second indicator secondhand(cx, cy, sx, sy, textsize) // center dot centerdot(cx, cy, textsize) // make the picture openvg.End() case <-sigint: openvg.Finish() return } } }