diff options
| -rw-r--r-- | layout/layer.go | 5 | ||||
| -rw-r--r-- | layout/sub.go | 37 |
2 files changed, 39 insertions, 3 deletions
diff --git a/layout/layer.go b/layout/layer.go index 398ade9..ce5523f 100644 --- a/layout/layer.go +++ b/layout/layer.go @@ -3,7 +3,6 @@ package layout import ( "container/list" "errors" - "fmt" "image" "image/draw" @@ -27,9 +26,9 @@ func NewLayerList(dst EventImageFlusher) *LayerList { dst.Event("", l.Happen) - l.Event("resize", func(event string) bool { + l.Event("resize", func(evt string) bool { var x1, y1, x2, y2 int - fmt.Sscanf(event, "%d/%d/%d/%d", &x1, &y1, &x2, &y2) + event.Sscan(evt, &x1, &y1, &x2, &y2) for e := l.layers.Back(); e != nil; e = e.Prev() { layer := e.Value.(*Layer) diff --git a/layout/sub.go b/layout/sub.go new file mode 100644 index 0000000..09076a2 --- /dev/null +++ b/layout/sub.go @@ -0,0 +1,37 @@ +package layout + +import ( + "image" + + "github.com/faiface/gui/event" +) + +func Sub(eif EventImageFlusher, r image.Rectangle) EventImageFlusher { + s := &sub{ + eif: eif, + } + s.Event("resize", func(evt string) bool { + var x1, y1, x2, y2 int + event.Sscan(evt, &x1, &y1, &x2, &y2) + r := image.Rect(x1, y1, x2, y2) + s.sub = eif.Image().SubImage(r).(*image.RGBA) + return false + }) + s.Happen(event.Sprint("resize", r.Min.X, r.Min.Y, r.Max.X, r.Max.Y)) + return s +} + +type sub struct { + event.Dispatch + eif EventImageFlusher + sub *image.RGBA +} + +func (s *sub) Image() *image.RGBA { + return s.sub +} + +func (s *sub) Flush(r image.Rectangle) { + r = s.sub.Bounds().Intersect(r) + s.eif.Flush(r) +} |