/
universe.go
73 lines (58 loc) · 1.38 KB
/
universe.go
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
package main
import (
"fmt"
)
// A Universe contains workspaces
type Universe struct {
workspaces []*Workspace
selectionIdx int
renderRect Rect
}
func (u *Universe) simplify() {
for _, e := range u.workspaces {
e.contents.simplify()
}
}
func (u *Universe) serialize() string {
out := fmt.Sprintf("Universe[%d]", u.selectionIdx)
out += "("
for i, e := range u.workspaces {
if i != 0 {
out += ", "
}
out += e.serialize()
}
out += ")"
return out
}
// setRenderRect updates the Split's renderRect cache after which it calls refreshRenderRect
// this for when a split is reshaped
func (u *Universe) setRenderRect(x, y, w, h int) {
u.renderRect = Rect{x, y, w, h}
// NOTE: should we clear the screen?
u.refreshRenderRect()
}
func (u *Universe) getRenderRect() Rect {
return u.renderRect
}
func (u *Universe) kill() {
for _, n := range u.workspaces {
n.contents.kill()
}
}
func (u *Universe) setPause(pause bool) {
for _, n := range u.workspaces {
n.contents.setPause(pause)
}
}
// refreshRenderRect recalculates the coordinates of a Split's elements and calls setRenderRect on each of its children
// this is for when one or more of a split's children are reshaped
func (u *Universe) refreshRenderRect() {
x := u.renderRect.x
y := u.renderRect.y
w := u.renderRect.w
h := u.renderRect.h
for _, child := range u.workspaces {
child.setRenderRect(x, y, w, h)
}
}