43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package render
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
|
|
"github.com/hajimehoshi/ebiten/v2/text"
|
|
)
|
|
|
|
func (r *Render) drawPopups() {
|
|
|
|
if len(r.popups) == 0 {
|
|
return
|
|
}
|
|
|
|
pad := r.font.CellSize.Y / 2 // horizontal and vertical padding
|
|
maxPixelX := float64(r.font.CellSize.X * int(r.buffer.ViewWidth()))
|
|
maxPixelY := float64(r.font.CellSize.Y * int(r.buffer.ViewHeight()))
|
|
|
|
for _, msg := range r.popups {
|
|
|
|
lines := strings.Split(msg.Text, "\n")
|
|
msgX := pad
|
|
msgY := maxPixelY - float64(pad*3) - float64(r.font.CellSize.Y*len(lines))
|
|
boxWidth := float64(pad*2) + float64(r.font.CellSize.X*len(msg.Text))
|
|
boxHeight := float64(pad*2) + float64(r.font.CellSize.Y*len(lines))
|
|
|
|
if boxWidth < maxPixelX/8 {
|
|
boxWidth = maxPixelX / 8
|
|
}
|
|
|
|
ebitenutil.DrawRect(r.frame, float64(msgX-1), msgY-1, boxWidth+2, boxHeight+2, msg.Foreground)
|
|
ebitenutil.DrawRect(r.frame, float64(msgX), msgY, boxWidth, boxHeight, msg.Background)
|
|
for y, line := range lines {
|
|
for x, c := range line {
|
|
text.Draw(r.frame, string(c), r.font.Regular, msgX+pad+(x*r.font.CellSize.X), pad+(y*r.font.CellSize.Y)+int(msgY)+r.font.DotDepth, msg.Foreground)
|
|
}
|
|
}
|
|
maxPixelY = maxPixelY - float64(pad*4) - float64(len(lines)*r.font.CellSize.Y)
|
|
}
|
|
|
|
}
|