blob: 177b77394a76cea8b8a489bb26ebe7492447fe03 (
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
(tset package.loaded :conf.wict-nvim.frames.frame nil)
(local vec (require :conf.wict-nvim.frames.vec))
(local frame (require :conf.wict-nvim.frames.frame))
(local m {})
;; Creates a new painter that wraps the paint and close methods of a painter
(local transform-painter (fn [painter ori width height]
(fn [frm]
(local coord (frame.frame->coord frm))
(local new-ori (coord ori))
(local new-frame
(frame new-ori
(vec.sub (coord width) new-ori)
(vec.sub (coord height) new-ori)))
(painter new-frame))))
(local pad (fn [painter pad-size]
(fn [frm]
(local pad-width (/ pad-size (frame.width frm)))
(local pad-height (/ pad-size (frame.height frm)))
(local transformed
(transform-painter painter (vec.vec pad-width pad-height)
(vec.vec (- 1 pad-width) pad-height)
(vec.vec pad-width (- 1 pad-height))))
(transformed frm))))
(local beside (fn [p1 p2 size]
(local size (or size 0.5))
(local left
(transform-painter p1 (vec.vec 0 0) (vec.vec size 0)
(vec.vec 0 1)))
(local right
(transform-painter p2 (vec.vec size 0) (vec.vec 1 0)
(vec.vec size 1)))
(fn [frm]
(left frm)
(right frm))))
(local builder {})
(fn builder.Padding [self size]
(table.insert self.partial-painters {:op :pad : size})
self)
(fn builder.Beside [self partial-builder size]
(table.insert self.partial-painters {:op :beside : partial-builder : size})
self)
(fn builder.LeftOf [self partial-builder size]
(table.insert self.partial-painters {:op :left : partial-builder : size})
self)
(fn builder.RightOf [self partial-builder size]
(table.insert self.partial-painters {:op :right : partial-builder : size})
self)
(fn builder.build-painter [self effects]
(accumulate [painter (fn [frame] (print :leaf-painter)) _ partial-painter (ipairs self.partial-painters)]
(do
(match partial-painter
{:op :pad : size} (do
(pad painter size))
{:op :left : partial-builder} (do
(beside painter
(partial-builder:build-painter effects)
partial-painter.size))
{:op :right : partial-builder} (do
(beside (partial-builder:build-painter effects)
painter partial-painter.size))
{:op :beside : partial-builder} (do
(beside painter
(partial-builder:build-painter effects)
partial-painter.size))
{: maps : buffer} (do
(local window (effects:new-window maps))
(local painter-ptr painter)
(fn [frm]
(local frame-opts
(frame.frame->open-win-options frm))
(local buf (buffer))
(if (not (window:open?))
(window:open buf frame-opts)
(window:repaint buf frame-opts))
(painter-ptr frm)))
_ painter))))
(fn builder.Build [self effects]
(local painter (self:build-painter effects))
(fn [frm]
(effects:attach)
(painter frm)))
(fn builder.For [partial-painter]
(local bldr {:partial-painters [partial-painter]})
(setmetatable bldr builder)
(set builder.__index builder)
bldr)
builder
|