aerc/lib/ui/borders.go
y0ast 03650474e2 update tcell to v2 and enable TrueColor support
Also update to the tcell v2 PaletteColor api, which should keep the chosen
theme of the user intact.

Note, that if $TRUECOLOR is defined and a truecolor given, aerc will now stop
clipping the value to one of the theme colors.
Generally this is desired behaviour though.
2020-12-18 07:23:22 +01:00

80 lines
1.7 KiB
Go

package ui
import (
"github.com/gdamore/tcell/v2"
"git.sr.ht/~sircmpwn/aerc/config"
)
const (
BORDER_LEFT = 1 << iota
BORDER_TOP = 1 << iota
BORDER_RIGHT = 1 << iota
BORDER_BOTTOM = 1 << iota
)
type Bordered struct {
Invalidatable
borders uint
content Drawable
onInvalidate func(d Drawable)
uiConfig config.UIConfig
}
func NewBordered(
content Drawable, borders uint, uiConfig config.UIConfig) *Bordered {
b := &Bordered{
borders: borders,
content: content,
uiConfig: uiConfig,
}
content.OnInvalidate(b.contentInvalidated)
return b
}
func (bordered *Bordered) contentInvalidated(d Drawable) {
bordered.Invalidate()
}
func (bordered *Bordered) Children() []Drawable {
return []Drawable{bordered.content}
}
func (bordered *Bordered) Invalidate() {
bordered.DoInvalidate(bordered)
}
func (bordered *Bordered) Draw(ctx *Context) {
x := 0
y := 0
width := ctx.Width()
height := ctx.Height()
style := bordered.uiConfig.GetStyle(config.STYLE_BORDER)
if bordered.borders&BORDER_LEFT != 0 {
ctx.Fill(0, 0, 1, ctx.Height(), ' ', style)
x += 1
width -= 1
}
if bordered.borders&BORDER_TOP != 0 {
ctx.Fill(0, 0, ctx.Width(), 1, ' ', style)
y += 1
height -= 1
}
if bordered.borders&BORDER_RIGHT != 0 {
ctx.Fill(ctx.Width()-1, 0, 1, ctx.Height(), ' ', style)
width -= 1
}
if bordered.borders&BORDER_BOTTOM != 0 {
ctx.Fill(0, ctx.Height()-1, ctx.Width(), 1, ' ', style)
height -= 1
}
subctx := ctx.Subcontext(x, y, width, height)
bordered.content.Draw(subctx)
}
func (bordered *Bordered) MouseEvent(localX int, localY int, event tcell.Event) {
switch content := bordered.content.(type) {
case Mouseable:
content.MouseEvent(localX, localY, event)
}
}