From f20896ef3b147ac07769eb36c67ba436c6d2ed22 Mon Sep 17 00:00:00 2001 From: Martin Ashby Date: Mon, 28 May 2018 16:29:18 +0100 Subject: New unicorns for displaing animated gifs! Tests pass on both old & new for fakes --- unicorn/BaseFakeUnicorn.go | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 unicorn/BaseFakeUnicorn.go (limited to 'unicorn/BaseFakeUnicorn.go') diff --git a/unicorn/BaseFakeUnicorn.go b/unicorn/BaseFakeUnicorn.go new file mode 100644 index 0000000..7910814 --- /dev/null +++ b/unicorn/BaseFakeUnicorn.go @@ -0,0 +1,78 @@ +package unicorn + +import "github.com/veandco/go-sdl2/sdl" + +// BaseFakeUnicorn ... +// The base for FakeUnicorn & FakeUnicorn2 +// Share the SDL code. +type BaseFakeUnicorn struct { + displayWidth int32 + displayHeight int32 + window *sdl.Window + renderer *sdl.Renderer +} + +func NewBaseFakeUnicorn(width, height int32) (*BaseFakeUnicorn, error) { + if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { + return nil, err + } + + unicorn := &BaseFakeUnicorn{ + displayWidth: width, + displayHeight: height, + window: nil, + renderer: nil, + } + if err := unicorn.createWindow(); err != nil { + unicorn.Close() + return nil, err + } + if err := unicorn.createRenderer(); err != nil { + unicorn.Close() + return nil, err + } + return unicorn, nil +} + +func (f *BaseFakeUnicorn) createWindow() error { + window, err := sdl.CreateWindow("Fake Unicorn", + sdl.WINDOWPOS_UNDEFINED, + sdl.WINDOWPOS_UNDEFINED, + f.displayWidth, + f.displayHeight, + sdl.WINDOW_SHOWN) + f.window = window + return err +} + +func (f *BaseFakeUnicorn) createRenderer() error { + renderer, err := sdl.CreateRenderer(f.window, -1, sdl.RENDERER_ACCELERATED) + f.renderer = renderer + return err +} + +func (f *BaseFakeUnicorn) Close() error { + if f.window != nil { + f.window.Destroy() + } + if f.renderer != nil { + f.renderer.Destroy() + } + return nil +} + +// MainLoop ... +// Handle UI events so OS doesn't think we're frozen +func (f *BaseFakeUnicorn) MainLoop() { + running := true + for running { + for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { + switch event.(type) { + case *sdl.QuitEvent: + println("Quit") + running = false + break + } + } + } +} -- cgit v1.2.3-ZIG