aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--layout/layer.go5
-rw-r--r--layout/sub.go37
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)
+}