blob: d32c9b5a55da3e7f398d6b45de6fc69da5777c60 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
(local vec (require :conf.wict-nvim.frames.vec))
(local m {})
(local frame {})
;; frame is interpreted as matrix coords
;; origin ------------------> ne-edge
;; |
;; |
;; |
;; |
;; |
;; |
;;\ /
;; .
;; sw-edge
(fn frame.make [self ori width height]
(local f {: ori : width : height})
(setmetatable f self)
(set self.__index self)
f)
(fn frame.origin [f]
f.ori)
(fn frame.width-edge [f]
f.width)
(fn frame.height-edge [f]
f.height)
(fn m.frame->coord [f]
(fn [v]
(vec.add (f:origin)
(vec.add (vec.scale (v:x-coord) (f:width-edge))
(vec.scale (v:y-coord) (f:height-edge))))))
(fn m.width [f]
(let [width-edge (f:width-edge)]
(width-edge:x-coord)))
(fn m.height [f]
(let [height-edge (f:height-edge)]
(height-edge:y-coord)))
(fn m.frame->open-win-options [f anchor]
(local coord (m.frame->coord f))
(local ori (f:origin))
(local width-edge (f:width-edge))
(local height-edge (f:height-edge))
(local anchor (or anchor :NW))
{:width (width-edge:x-coord)
:height (height-edge:y-coord)
:col (ori:x-coord)
:row (ori:y-coord)
: anchor
:relative :editor})
(setmetatable m {:__call (fn [self ...]
(frame:make ...))})
m
|