]> git.lizzy.rs Git - micro.git/blob - internal/display/uiwindow.go
Finish support for a fake cursor
[micro.git] / internal / display / uiwindow.go
1 package display
2
3 import (
4         "github.com/zyedidia/micro/internal/buffer"
5         "github.com/zyedidia/micro/internal/config"
6         "github.com/zyedidia/micro/internal/screen"
7         "github.com/zyedidia/micro/internal/views"
8 )
9
10 type UIWindow struct {
11         root *views.Node
12 }
13
14 func NewUIWindow(n *views.Node) *UIWindow {
15         uw := new(UIWindow)
16         uw.root = n
17         return uw
18 }
19
20 func (w *UIWindow) drawNode(n *views.Node) {
21         cs := n.Children()
22         dividerStyle := config.DefStyle
23         if style, ok := config.Colorscheme["divider"]; ok {
24                 dividerStyle = style
25         }
26
27         for i, c := range cs {
28                 if c.IsLeaf() && c.Kind == views.STVert {
29                         if i != len(cs)-1 {
30                                 for h := 0; h < c.H; h++ {
31                                         screen.SetContent(c.X+c.W, c.Y+h, '|', nil, dividerStyle.Reverse(true))
32                                 }
33                         }
34                 } else {
35                         w.drawNode(c)
36                 }
37         }
38 }
39
40 func (w *UIWindow) Display() {
41         w.drawNode(w.root)
42 }
43
44 func (w *UIWindow) GetMouseSplitID(vloc buffer.Loc) uint64 {
45         var mouseLoc func(*views.Node) uint64
46         mouseLoc = func(n *views.Node) uint64 {
47                 cs := n.Children()
48                 for i, c := range cs {
49                         if c.Kind == views.STVert {
50                                 if i != len(cs)-1 {
51                                         if vloc.X == c.X+c.W && vloc.Y >= c.Y && vloc.Y < c.Y+c.H {
52                                                 return c.ID()
53                                         }
54                                 }
55                         } else if c.Kind == views.STHoriz {
56                                 if i != len(cs)-1 {
57                                         if vloc.Y == c.Y+c.H-1 && vloc.X >= c.X && vloc.X < c.X+c.W {
58                                                 return c.ID()
59                                         }
60                                 }
61                         }
62                 }
63                 for _, c := range cs {
64                         m := mouseLoc(c)
65                         if m != 0 {
66                                 return m
67                         }
68                 }
69                 return 0
70         }
71         return mouseLoc(w.root)
72 }
73 func (w *UIWindow) Resize(width, height int) {}
74 func (w *UIWindow) SetActive(b bool)         {}