From 7efcefe0d6bf828fcdff81a4e75694d1f3d45a94 Mon Sep 17 00:00:00 2001 From: faiface Date: Thu, 31 Aug 2017 22:42:08 +0200 Subject: layout: change EventDrawer Draw to accept a draw function instead of returning a channel --- layout/interface.go | 28 +++++++++------------------- win/win.go | 13 ++++++------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/layout/interface.go b/layout/interface.go index 1dcf34a..d203c3f 100644 --- a/layout/interface.go +++ b/layout/interface.go @@ -8,33 +8,23 @@ import ( type EventDrawer interface { Event() <-chan EventConsume - Draw() chan<- ImageFlush + Draw(func(draw.Image) image.Rectangle) } type EventConsume struct { - Event string + Event Consume chan<- bool } -func SendEvent(ch chan<- EventConsume, format string, a ...interface{}) (consume <-chan bool) { - cons := make(chan bool) - ch <- EventConsume{fmt.Sprintf(format, a...), cons} - return cons -} +type Event string -func (ec EventConsume) Matches(format string, a ...interface{}) bool { - _, err := fmt.Sscanf(ec.Event, format, a...) +func (e Event) Matches(format string, a ...interface{}) bool { + _, err := fmt.Sscanf(string(e), format, a...) return err == nil } -type ImageFlush struct { - Image chan<- draw.Image - Flush <-chan image.Rectangle -} - -func SendDraw(ch chan<- ImageFlush) (img <-chan draw.Image, flush chan<- image.Rectangle) { - imgC := make(chan draw.Image) - flushC := make(chan image.Rectangle) - ch <- ImageFlush{imgC, flushC} - return imgC, flushC +func SendEvent(ch chan<- EventConsume, format string, a ...interface{}) (consume <-chan bool) { + cons := make(chan bool) + ch <- EventConsume{Event(fmt.Sprintf(format, a...)), cons} + return cons } diff --git a/win/win.go b/win/win.go index ccecc94..3bb408f 100644 --- a/win/win.go +++ b/win/win.go @@ -52,7 +52,7 @@ func New(opts ...Option) (*Win, error) { w := &Win{ event: make(chan layout.EventConsume), - draw: make(chan layout.ImageFlush), + draw: make(chan func(draw.Image) image.Rectangle), newSize: make(chan image.Rectangle), finish: make(chan struct{}), } @@ -98,7 +98,7 @@ func makeGLFWWin(o *options) (*glfw.Window, error) { type Win struct { event chan layout.EventConsume - draw chan layout.ImageFlush + draw chan func(draw.Image) image.Rectangle newSize chan image.Rectangle finish chan struct{} @@ -120,8 +120,8 @@ func (w *Win) Event() <-chan layout.EventConsume { return w.event } -func (w *Win) Draw() chan<- layout.ImageFlush { - return w.draw +func (w *Win) Draw(d func(draw.Image) image.Rectangle) { + w.draw <- d } func (w *Win) eventThread() { @@ -190,9 +190,8 @@ func (w *Win) openGLThread() { w.img = img openGLFlushR = r - case imfl := <-w.draw: - imfl.Image <- w.img - r := <-imfl.Flush + case d := <-w.draw: + r := d(w.img) openGLFlushR = openGLFlushR.Union(r) case <-openGLFlush.C: -- cgit v1.2.3