9fans.net/go@v0.0.5/draw/memdraw/ldelete.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 LDelete(i *Image) { 12 l := i.Layer 13 /* free backing store and disconnect refresh, to make pushback fast */ 14 Free(l.save) 15 l.save = nil 16 l.Refreshptr = nil 17 memltorear(i) 18 19 /* window is now the rearmost; clean up screen structures and deallocate */ 20 s := i.Layer.Screen 21 if s.Fill != nil { 22 i.Clipr = i.R 23 Draw(i, i.R, s.Fill, i.R.Min, nil, i.R.Min, draw.S) 24 } 25 if l.front != nil { 26 l.front.Layer.rear = nil 27 s.Rearmost = l.front 28 } else { 29 s.Frontmost = nil 30 s.Rearmost = nil 31 } 32 Free(i) 33 } 34 35 /* 36 * Just free the data structures, don't do graphics 37 */ 38 func LFree(i *Image) { 39 l := i.Layer 40 Free(l.save) 41 Free(i) 42 } 43 44 func _memlsetclear(s *Screen) { 45 for i := s.Rearmost; i != nil; i = i.Layer.front { 46 l := i.Layer 47 l.clear = draw.RectInRect(l.Screenr, l.Screen.Image.Clipr) 48 if l.clear { 49 for j := l.front; j != nil; j = j.Layer.front { 50 if draw.RectXRect(l.Screenr, j.Layer.Screenr) { 51 l.clear = false 52 break 53 } 54 } 55 } 56 } 57 }