forked from blrsn/zentile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvertical_horizonal_layout.go
100 lines (83 loc) · 1.7 KB
/
vertical_horizonal_layout.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
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
100
package main
import (
"github.com/blrsn/zentile/state"
log "github.com/sirupsen/logrus"
)
type VerticalLayout struct {
*VertHorz
}
func (l *VerticalLayout) Do() {
log.Info("Switching to Vertical Layout")
wx, wy, ww, wh := state.WorkAreaDimensions(l.WorkspaceNum)
msize := len(l.masters)
ssize := len(l.slaves)
mx := wx
mw := int(float64(ww) * l.Proportion)
sx := mx + mw
sw := ww - mw
gap := Config.Gap
if msize > 0 {
mh := (wh - (msize+1)*gap) / msize
if ssize == 0 {
mw = ww
}
for i, c := range l.masters {
if Config.HideDecor {
c.UnDecorate()
}
c.MoveResize(mx+gap, gap+wy+i*(mh+gap), mw-2*gap, mh)
}
}
if ssize > 0 {
sh := (wh - (ssize+1)*gap) / ssize
if msize == 0 {
sx, sw = wx, ww
}
for i, c := range l.slaves {
if Config.HideDecor {
c.UnDecorate()
}
c.MoveResize(sx, gap+wy+i*(sh+gap), sw-gap, sh)
}
}
state.X.Conn().Sync()
}
type HorizontalLayout struct {
*VertHorz
}
func (l *HorizontalLayout) Do() {
log.Info("Switching to Horizontal Layout")
wx, wy, ww, wh := state.WorkAreaDimensions(l.WorkspaceNum)
msize := len(l.masters)
ssize := len(l.slaves)
my := wy
mh := int(float64(wh) * l.Proportion)
sy := my + mh
sh := wh - mh
gap := Config.Gap
if msize > 0 {
mw := (ww - (msize+1)*gap) / msize
if ssize == 0 {
mh = wh
}
for i, c := range l.masters {
if Config.HideDecor {
c.UnDecorate()
}
c.MoveResize(gap+wx+i*(mw+gap), my+gap, mw, mh-2*gap)
}
}
if ssize > 0 {
sw := (ww - (ssize+1)*gap) / ssize
if msize == 0 {
sy, sh = wy, wh
}
for i, c := range l.slaves {
if Config.HideDecor {
c.UnDecorate()
}
c.MoveResize(gap+wx+i*(sw+gap), sy, sw, sh-gap)
}
}
state.X.Conn().Sync()
}