aboutsummaryrefslogtreecommitdiff
path: root/unicorn/Unicorn2.go
diff options
context:
space:
mode:
Diffstat (limited to 'unicorn/Unicorn2.go')
-rw-r--r--unicorn/Unicorn2.go40
1 files changed, 31 insertions, 9 deletions
diff --git a/unicorn/Unicorn2.go b/unicorn/Unicorn2.go
index 04722f7..5dcc6c2 100644
--- a/unicorn/Unicorn2.go
+++ b/unicorn/Unicorn2.go
@@ -5,6 +5,7 @@ package unicorn
import (
"image"
+ "image/color/palette"
"image/gif"
"time"
)
@@ -18,7 +19,7 @@ type Unicorn2 interface {
SetGif(*gif.GIF)
// Starts the rendering goroutine
- StartRender()
+ StartRender() chan bool
// Must be implemented to actually render the image to device
renderImage(image.Image)
@@ -42,11 +43,26 @@ func (u *BaseUnicorn2) SetGif(g *gif.GIF) {
u.g = g
}
-// StartRender ...
-// Starts rendering the image. If it's an animated image,
-// renders animation frames. Return a channel to stop the
-// image rendering.
-func (u *FakeUnicorn2) StartRender() chan bool {
+func NewBaseUnicorn2() *BaseUnicorn2 {
+ im := image.NewPaletted(
+ image.Rect(0, 0, 16, 16),
+ palette.WebSafe)
+
+ gf := &gif.GIF{
+ Image: []*image.Paletted{im},
+ Delay: []int{50},
+ Disposal: []byte{gif.DisposalBackground},
+ BackgroundIndex: 0, // This is black in the websafe palette
+ }
+
+ return &BaseUnicorn2{
+ g: gf,
+ }
+}
+
+// StartRenderBase ...
+// Deals with the timing aspect of animated GIFs
+func (u *BaseUnicorn2) StartRenderBase(renderImage func(image.Image)) chan bool {
stopChan := make(chan bool)
go func() {
timer := time.NewTimer(0)
@@ -59,14 +75,20 @@ func (u *FakeUnicorn2) StartRender() chan bool {
running = false
case <-timer.C:
gf := u.GetGif()
+
+ // Image could change underneath us, but there should always be 1 image at least.
+ if imageIndex >= len(gf.Image) {
+ imageIndex = 0
+ }
+
im := gf.Image[imageIndex]
delay := gf.Delay[imageIndex] //100ths of a second, 10^-2
- u.renderImage(im)
-
+ renderImage(im)
+
timer.Reset(time.Duration(delay * 10000000)) // nanoseconds 10^-9 sec
imageIndex = (imageIndex + 1) % len(gf.Image)
}
}
}()
return stopChan
-} \ No newline at end of file
+}