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  }