9fans.net/go@v0.0.5/draw/memdraw/ltorear.go (about) 1 // #include <u.h> 2 // #include <libc.h> 3 // #include <draw.h> 4 // #include <memdraw.h> 5 // #include <memlayer.h> 6 7 package memdraw 8 9 import "9fans.net/go/draw" 10 11 func _memltorear(i *Image, rear *Image) { 12 l := i.Layer 13 s := l.Screen 14 for l.rear != rear { 15 r := l.rear 16 x := l.Screenr 17 overlap := draw.RectClip(&x, r.Layer.Screenr) 18 if overlap { 19 memlhide(i, x) 20 l.clear = false 21 } 22 /* swap l and r in screen's list */ 23 rr := r.Layer.rear 24 f := l.front 25 if rr == nil { 26 s.Rearmost = i 27 } else { 28 rr.Layer.front = i 29 } 30 if f == nil { 31 s.Frontmost = r 32 } else { 33 f.Layer.rear = r 34 } 35 l.rear = rr 36 l.front = r 37 r.Layer.rear = i 38 r.Layer.front = f 39 if overlap { 40 memlexpose(r, x) 41 } 42 } 43 } 44 45 func memltorear(i *Image) { 46 _memltorear(i, nil) 47 _memlsetclear(i.Layer.Screen) 48 } 49 50 func LToRearN(ip []*Image, n int) { 51 if n == 0 { 52 return 53 } 54 var rear *Image 55 for { 56 n-- 57 if n < 0 { 58 break 59 } 60 i := ip[0] 61 ip = ip[1:] 62 _memltorear(i, rear) 63 rear = i 64 } 65 s := rear.Layer.Screen 66 _memlsetclear(s) 67 }