aboutsummaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-05-21 18:21:35 +0300
committerTulir Asokan <tulir@maunium.net>2018-05-21 18:21:35 +0300
commitcbbec5bd18f76990ac401ef41b35fa798367a31d (patch)
treede3f34fd9bed0f2b7771a40ec21f14fb4c7bb925 /ui
parente079f7615728517b143dae4d62755d5018b28f76 (diff)
Add transparent centering to widget
Diffstat (limited to 'ui')
-rw-r--r--ui/widget/center.go44
1 files changed, 40 insertions, 4 deletions
diff --git a/ui/widget/center.go b/ui/widget/center.go
index 8d22528..48e6153 100644
--- a/ui/widget/center.go
+++ b/ui/widget/center.go
@@ -18,17 +18,53 @@ package widget
import (
"maunium.net/go/tview"
+ "maunium.net/go/tcell"
)
// Center wraps the given tview primitive into a Flex element in order to
// vertically and horizontally center the given primitive.
func Center(width, height int, p tview.Primitive) tview.Primitive {
return tview.NewFlex().
- AddItem(tview.NewBox(), 0, 1, false).
+ AddItem(nil, 0, 1, false).
AddItem(tview.NewFlex().
SetDirection(tview.FlexRow).
- AddItem(tview.NewBox(), 0, 1, false).
+ AddItem(nil, 0, 1, false).
AddItem(p, height, 1, true).
- AddItem(tview.NewBox(), 0, 1, false), width, 1, true).
- AddItem(tview.NewBox(), 0, 1, false)
+ AddItem(nil, 0, 1, false), width, 1, true).
+ AddItem(nil, 0, 1, false)
+}
+
+type transparentCenter struct {
+ *tview.Box
+ prefWidth, prefHeight int
+ p tview.Primitive
+}
+
+func TransparentCenter(width, height int, p tview.Primitive) tview.Primitive {
+ return &transparentCenter{
+ Box: tview.NewBox(),
+ prefWidth: width,
+ prefHeight: height,
+ p: p,
+ }
+}
+
+func (tc *transparentCenter) Draw(screen tcell.Screen) {
+ x, y, width, height := tc.GetRect()
+ if width > tc.prefWidth {
+ x += (width - tc.prefWidth) / 2
+ width = tc.prefWidth
+ }
+ if height > tc.prefHeight {
+ y += (height - tc.prefHeight) / 2
+ height = tc.prefHeight
+ }
+ tc.p.SetRect(x, y, width, height)
+ tc.p.Draw(screen)
+}
+
+func (tc *transparentCenter) Focus(delegate func(p tview.Primitive)) {
+ if delegate != nil {
+ delegate(tc.p)
+ }
}