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