12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Copyright 2017 Zack Guo <zack.y.guo@gmail.com>. All rights reserved.
- // Use of this source code is governed by a MIT license that can
- // be found in the LICENSE file.
- package termui
- import "image"
- // Align is the position of the gauge's label.
- type Align uint
- // All supported positions.
- const (
- AlignNone Align = 0
- AlignLeft Align = 1 << iota
- AlignRight
- AlignBottom
- AlignTop
- AlignCenterVertical
- AlignCenterHorizontal
- AlignCenter = AlignCenterVertical | AlignCenterHorizontal
- )
- func AlignArea(parent, child image.Rectangle, a Align) image.Rectangle {
- w, h := child.Dx(), child.Dy()
- // parent center
- pcx, pcy := parent.Min.X+parent.Dx()/2, parent.Min.Y+parent.Dy()/2
- // child center
- ccx, ccy := child.Min.X+child.Dx()/2, child.Min.Y+child.Dy()/2
- if a&AlignLeft == AlignLeft {
- child.Min.X = parent.Min.X
- child.Max.X = child.Min.X + w
- }
- if a&AlignRight == AlignRight {
- child.Max.X = parent.Max.X
- child.Min.X = child.Max.X - w
- }
- if a&AlignBottom == AlignBottom {
- child.Max.Y = parent.Max.Y
- child.Min.Y = child.Max.Y - h
- }
- if a&AlignTop == AlignRight {
- child.Min.Y = parent.Min.Y
- child.Max.Y = child.Min.Y + h
- }
- if a&AlignCenterHorizontal == AlignCenterHorizontal {
- child.Min.X += pcx - ccx
- child.Max.X = child.Min.X + w
- }
- if a&AlignCenterVertical == AlignCenterVertical {
- child.Min.Y += pcy - ccy
- child.Max.Y = child.Min.Y + h
- }
- return child
- }
- func MoveArea(a image.Rectangle, dx, dy int) image.Rectangle {
- a.Min.X += dx
- a.Max.X += dx
- a.Min.Y += dy
- a.Max.Y += dy
- return a
- }
- var termWidth int
- var termHeight int
- func TermRect() image.Rectangle {
- return image.Rect(0, 0, termWidth, termHeight)
- }
|