summaryrefslogtreecommitdiff
path: root/fnl/conf/wict-nvim/frames/frame.fnl
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