mirror of
https://github.com/rivo/tview.git
synced 2024-11-15 06:12:46 +00:00
Primitive widths/heights should not become negative. Also fixed a
TextView issue where purging led to panics. Fixes #306
This commit is contained in:
parent
c3d1d4bcf9
commit
fc28d646d0
24
box.go
24
box.go
@ -88,7 +88,8 @@ func (b *Box) GetRect() (int, int, int, int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetInnerRect returns the position of the inner rectangle (x, y, width,
|
// GetInnerRect returns the position of the inner rectangle (x, y, width,
|
||||||
// height), without the border and without any padding.
|
// height), without the border and without any padding. Width and height values
|
||||||
|
// will clamp to 0 and thus never be negative.
|
||||||
func (b *Box) GetInnerRect() (int, int, int, int) {
|
func (b *Box) GetInnerRect() (int, int, int, int) {
|
||||||
if b.innerX >= 0 {
|
if b.innerX >= 0 {
|
||||||
return b.innerX, b.innerY, b.innerWidth, b.innerHeight
|
return b.innerX, b.innerY, b.innerWidth, b.innerHeight
|
||||||
@ -100,10 +101,17 @@ func (b *Box) GetInnerRect() (int, int, int, int) {
|
|||||||
width -= 2
|
width -= 2
|
||||||
height -= 2
|
height -= 2
|
||||||
}
|
}
|
||||||
return x + b.paddingLeft,
|
x, y, width, height = x+b.paddingLeft,
|
||||||
y + b.paddingTop,
|
y+b.paddingTop,
|
||||||
width - b.paddingLeft - b.paddingRight,
|
width-b.paddingLeft-b.paddingRight,
|
||||||
height - b.paddingTop - b.paddingBottom
|
height-b.paddingTop-b.paddingBottom
|
||||||
|
if width < 0 {
|
||||||
|
width = 0
|
||||||
|
}
|
||||||
|
if height < 0 {
|
||||||
|
height = 0
|
||||||
|
}
|
||||||
|
return x, y, width, height
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetRect sets a new position of the primitive. Note that this has no effect
|
// SetRect sets a new position of the primitive. Note that this has no effect
|
||||||
@ -318,6 +326,12 @@ func (b *Box) Draw(screen tcell.Screen) {
|
|||||||
b.innerHeight += b.innerY
|
b.innerHeight += b.innerY
|
||||||
b.innerY = 0
|
b.innerY = 0
|
||||||
}
|
}
|
||||||
|
if b.innerWidth < 0 {
|
||||||
|
b.innerWidth = 0
|
||||||
|
}
|
||||||
|
if b.innerHeight < 0 {
|
||||||
|
b.innerHeight = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Focus is called when this primitive receives focus.
|
// Focus is called when this primitive receives focus.
|
||||||
|
@ -939,8 +939,13 @@ func (t *TextView) Draw(screen tcell.Screen) {
|
|||||||
// If this view is not scrollable, we'll purge the buffer of lines that have
|
// If this view is not scrollable, we'll purge the buffer of lines that have
|
||||||
// scrolled out of view.
|
// scrolled out of view.
|
||||||
if !t.scrollable && t.lineOffset > 0 {
|
if !t.scrollable && t.lineOffset > 0 {
|
||||||
t.buffer = t.buffer[t.index[t.lineOffset].Line:]
|
if t.lineOffset <= len(t.index) {
|
||||||
|
t.buffer = nil
|
||||||
|
} else {
|
||||||
|
t.buffer = t.buffer[t.index[t.lineOffset].Line:]
|
||||||
|
}
|
||||||
t.index = nil
|
t.index = nil
|
||||||
|
t.lineOffset = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user