You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
superhighway84/tui/splashscreen.go

64 lines
1.5 KiB
Go

package tui
import (
"bytes"
"fmt"
"image/color"
"github.com/eliukblau/pixterm/pkg/ansimage"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
type Splashscreen struct {
T *TUI
Canvas *tview.TextView
ImageBytes []byte
}
func(t *TUI) NewSplashscreen(logo *[]byte) (*Splashscreen) {
splashscreen := new(Splashscreen)
splashscreen.T = t
canvas := tview.NewTextView().
SetDynamicColors(true).
SetRegions(true).
SetWrap(true)
canvas.SetBorder(false)
canvas.Clear()
splashscreen.ImageBytes = *logo
splashscreen.Canvas = canvas
return splashscreen
}
func (splashscreen *Splashscreen) GetCanvas() (tview.Primitive) {
return splashscreen.Canvas
}
func (splashscreen *Splashscreen) GetDefaultFocus() (tview.Primitive) {
return splashscreen.Canvas
}
func(splashscreen *Splashscreen) Refresh() {
_, _, w, h := splashscreen.Canvas.Box.GetRect()
// TODO:
// (h * 2) is a workaround for what looks like a bug in
// https://github.com/eliukblau/pixterm/blob/master/pkg/ansimage/ansimage.go
// Depending on the dithering setting the h/w changes significantly.
logoImage, err := ansimage.NewScaledFromReader(bytes.NewReader(splashscreen.ImageBytes), (h * 2), w, color.Black, ansimage.ScaleModeFill, ansimage.NoDithering)
if err != nil {
return
}
// splashscreen.Canvas.Clear()
fmt.Fprint(splashscreen.Canvas, tview.TranslateANSI(logoImage.RenderExt(false, false)))
}
func (splashscreen *Splashscreen) HandleInput(event *tcell.EventKey) (*tcell.EventKey) {
return nil
}