Skip to content

Instantly share code, notes, and snippets.

@ajstarks
Last active August 29, 2015 14:03
Show Gist options
  • Save ajstarks/ef452a52796643fb4f08 to your computer and use it in GitHub Desktop.
Save ajstarks/ef452a52796643fb4f08 to your computer and use it in GitHub Desktop.
Slide generation experiments
package main
import (
"fmt"
"github.com/ajstarks/deck/generate"
"image"
"bufio"
_ "image/jpeg"
_ "image/png"
"strings"
"os"
)
func fitlist(d *generate.Deck, x, top, bot, size float64, list []string, n int) {
interval := (top - bot) / float64(len(list))
for ; interval < size*1.5; size -= 0.75 {
fmt.Fprintf(os.Stderr, "%v %v\n", interval, size)
}
y := top
var opacity float64
for i, s := range list {
if i == n {
opacity = 100.0
} else {
opacity = 30.0
}
d.Text(x, y, fmt.Sprintf("%d. %s", i+1, s), "serif", size, "", opacity)
y -= interval
}
}
func hero(d *generate.Deck, picture, quadrant string, margin float64, quote string, font string, size float64, color string) {
f, ferr := os.Open(picture)
if ferr != nil {
fmt.Fprintf(os.Stderr, "%v\n", ferr)
return
}
defer f.Close()
im, _, err := image.DecodeConfig(f)
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", picture, err)
return
}
d.Image(50, 50, im.Width, im.Height, picture)
switch quadrant {
case "ul", "UL":
d.TextBlock(5, 90, quote, font, size, margin, color)
case "ur", "UR":
d.TextBlock(70, 90, quote, font, size, margin, color)
case "ll", "LL":
d.TextBlock(5, 20, quote, font, size, margin, color)
case "lr", "LR":
d.TextBlock(70, 20, quote, font, size, margin, color)
case "c", "center", "mid", "middle":
d.TextMid(50, 50, quote, font, size, color)
default:
d.TextMid(50, 50, quote, font, size, color)
}
}
func main() {
d := generate.NewSlides(os.Stdout, 0, 0)
d.StartDeck()
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
data := scanner.Text()
d.StartSlide("black", "white")
fields := strings.Split(data, "~")
hero(d, fields[0], fields[1], 20, fields[2], "sans", 2, "white")
d.EndSlide()
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
list := []string{"one", "two", "three", "four", "five", "six", "seven"} // , "eight", "nine", "ten"}
for i := 0; i < len(list); i++ {
g := 255 / (i + 2)
d.StartSlide(fmt.Sprintf("rgb(%d,%d,%d)", g, g, g), "white")
d.TextMid(20, 50, "Section", "sans", 7, "")
d.Line(40, 90, 40, 10, 0.1, "white")
fitlist(d, 45, 80, 5, 5, list, i)
d.EndSlide()
}
d.EndDeck()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment