2015-02-04 03:13:51 +08:00
|
|
|
package termui
|
|
|
|
|
2015-02-04 09:56:49 +08:00
|
|
|
type Block struct {
|
2015-02-05 05:57:24 +08:00
|
|
|
X int
|
|
|
|
Y int
|
|
|
|
Border labeledBorder
|
|
|
|
IsDisplay bool
|
|
|
|
HasBorder bool
|
|
|
|
BgColor Attribute
|
|
|
|
Width int
|
|
|
|
Height int
|
|
|
|
innerWidth int
|
|
|
|
innerHeight int
|
|
|
|
innerX int
|
|
|
|
innerY int
|
|
|
|
PaddingTop int
|
|
|
|
PaddingBottom int
|
|
|
|
PaddingLeft int
|
|
|
|
PaddingRight int
|
2015-02-04 03:13:51 +08:00
|
|
|
}
|
|
|
|
|
2015-02-04 09:56:49 +08:00
|
|
|
func NewBlock() *Block {
|
|
|
|
d := Block{}
|
2015-02-04 03:13:51 +08:00
|
|
|
d.IsDisplay = true
|
|
|
|
d.HasBorder = true
|
|
|
|
d.Width = 2
|
|
|
|
d.Height = 2
|
2015-02-04 09:56:49 +08:00
|
|
|
return &d
|
2015-02-04 03:13:51 +08:00
|
|
|
}
|
|
|
|
|
2015-02-04 09:56:49 +08:00
|
|
|
func (d *Block) align() {
|
2015-02-05 05:57:24 +08:00
|
|
|
d.innerWidth = d.Width - d.PaddingLeft - d.PaddingRight
|
|
|
|
d.innerHeight = d.Height - d.PaddingTop - d.PaddingBottom
|
|
|
|
d.innerX = d.X + d.PaddingLeft
|
|
|
|
d.innerY = d.Y + d.PaddingTop
|
2015-02-04 03:13:51 +08:00
|
|
|
|
|
|
|
if d.HasBorder {
|
|
|
|
d.innerHeight -= 2
|
|
|
|
d.innerWidth -= 2
|
|
|
|
d.Border.X = d.X
|
|
|
|
d.Border.Y = d.Y
|
|
|
|
d.Border.Width = d.Width
|
|
|
|
d.Border.Height = d.Height
|
|
|
|
d.innerX += 1
|
|
|
|
d.innerY += 1
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-02-04 09:56:49 +08:00
|
|
|
func (d *Block) Buffer() []Point {
|
|
|
|
d.align()
|
2015-02-04 03:13:51 +08:00
|
|
|
|
|
|
|
ps := []Point{}
|
|
|
|
if !d.IsDisplay {
|
|
|
|
return ps
|
|
|
|
}
|
|
|
|
|
|
|
|
if d.HasBorder {
|
|
|
|
ps = d.Border.Buffer()
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < d.innerWidth; i++ {
|
|
|
|
for j := 0; j < d.innerHeight; j++ {
|
|
|
|
p := Point{}
|
|
|
|
p.X = d.X + 1 + i
|
|
|
|
p.Y = d.Y + 1 + j
|
|
|
|
p.Code.Ch = ' '
|
2015-02-04 09:56:49 +08:00
|
|
|
p.Code.Bg = toTmAttr(d.BgColor)
|
2015-02-04 03:13:51 +08:00
|
|
|
ps = append(ps, p)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ps
|
|
|
|
}
|