github.com/jmigpin/editor@v1.6.0/util/drawutil/drawer4/frame.go (about)

     1  package drawer4
     2  
     3  // TODO: iteration later must use readrune, can't use a loop with ints (i++)
     4  
     5  //type Frame struct {
     6  //	m map[int]*RuneInfo
     7  //}
     8  
     9  //func NewFrame() *Frame {
    10  //	fr := &Frame{}
    11  //	fr.m = map[int]*RuneInfo{}
    12  //	return fr
    13  //}
    14  
    15  //func (fr *Frame) get(ri int) *RuneInfo {
    16  //	info, ok := fr.m[ri]
    17  //	if !ok {
    18  //		info = &RuneInfo{}
    19  //		fr.m[ri] = info
    20  //	}
    21  //	return info
    22  //}
    23  
    24  ////----------
    25  
    26  //type RuneInfo struct {
    27  //	lineStart bool
    28  //	penBounds mathutil.RectangleIntf
    29  //}
    30  
    31  //----------
    32  
    33  //func frameInfo(d *Drawer, offset int) *Frame {
    34  //	fr := NewFrame()
    35  //	maxY := mathutil.Intf(math.MaxInt64)
    36  //	//first := true
    37  //	frameLoop(d, true, 0, offset,
    38  //		func() {
    39  //			//info := fr.get(d.st.runeR.ri)
    40  //			//info.lineStart = true
    41  //		},
    42  //		func() {
    43  //			pb := d.iters.runeR.penBounds()
    44  
    45  //			// set early exit
    46  //			if d.st.runeR.ri == offset {
    47  //				bdy := mathutil.Intf1(d.bounds.Dy())
    48  //				maxY = pb.Min.Y + bdy
    49  //			}
    50  
    51  //			// early exit
    52  //			if pb.Min.Y >= maxY {
    53  //				d.iterStop()
    54  //				return
    55  //			}
    56  
    57  //			if d.iters.runeR.isNormal() {
    58  //				info := fr.get(d.st.runeR.ri)
    59  //				info.penBounds = pb
    60  //				info.lineStart = d.st.line.lineStart || d.st.lineWrap.lineStart
    61  //				//// first ri line start special case
    62  //				//if first {
    63  //				//	first = false
    64  //				//	if !info.lineStart {
    65  //				//		if d.st.runeR.ri == offset {
    66  //				//			//info.lineStart = true
    67  //				//		}
    68  //				//	}
    69  //				//}
    70  //			}
    71  
    72  //			if !d.iterNext() {
    73  //				return
    74  //			}
    75  //		})
    76  //	return fr
    77  //}
    78  
    79  //----------