9fans.net/go@v0.0.7/cmd/acme/internal/ui/rows.go (about)

     1  // #include <u.h>
     2  // #include <libc.h>
     3  // #include <draw.h>
     4  // #include <thread.h>
     5  // #include <cursor.h>
     6  // #include <mouse.h>
     7  // #include <keyboard.h>
     8  // #include <frame.h>
     9  // #include <fcall.h>
    10  // #include <bio.h>
    11  // #include <plumb.h>
    12  // #include <libsec.h>
    13  // #include "dat.h"
    14  // #include "fns.h"
    15  
    16  package ui
    17  
    18  import (
    19  	"unicode/utf8"
    20  
    21  	"9fans.net/go/cmd/acme/internal/adraw"
    22  	"9fans.net/go/cmd/acme/internal/wind"
    23  	"9fans.net/go/draw"
    24  )
    25  
    26  func Rowdragcol(row *wind.Row, c *wind.Column, _0 int) {
    27  	Clearmouse()
    28  	adraw.Display.SwitchCursor2(&adraw.BoxCursor, &adraw.BoxCursor2)
    29  	b := Mouse.Buttons
    30  	op := Mouse.Point
    31  	for Mouse.Buttons == b {
    32  		Mousectl.Read()
    33  	}
    34  	adraw.Display.SwitchCursor(nil)
    35  	if Mouse.Buttons != 0 {
    36  		for Mouse.Buttons != 0 {
    37  			Mousectl.Read()
    38  		}
    39  		return
    40  	}
    41  
    42  	wind.Rowdragcol1(row, c, op, Mouse.Point)
    43  	Clearmouse()
    44  	Colmousebut(c)
    45  }
    46  
    47  func Rowtype(row *wind.Row, r rune, p draw.Point) *wind.Text {
    48  	if r == 0 {
    49  		r = utf8.RuneError
    50  	}
    51  
    52  	Clearmouse()
    53  	BigUnlock()
    54  	row.Lk.Lock()
    55  	BigLock()
    56  	var t *wind.Text
    57  	if Bartflag {
    58  		t = wind.Barttext
    59  	} else {
    60  		t = wind.Rowwhich(row, p)
    61  	}
    62  	if t != nil && (t.What != wind.Tag || !p.In(t.ScrollR)) {
    63  		w := t.W
    64  		if w == nil {
    65  			Texttype(t, r)
    66  		} else {
    67  			wind.Winlock(w, 'K')
    68  			Wintype(w, t, r)
    69  			// Expand tag if necessary
    70  			if t.What == wind.Tag {
    71  				t.W.Tagsafe = false
    72  				if r == '\n' {
    73  					t.W.Tagexpand = true
    74  				}
    75  				WinresizeAndMouse(w, w.R, true, true)
    76  			}
    77  			wind.Winunlock(w)
    78  		}
    79  	}
    80  	row.Lk.Unlock()
    81  	return t
    82  }
    83  
    84  var Bartflag bool