erm/app/darktile/gui/render/selection.go

36 lines
1015 B
Go

package render
import (
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
"github.com/hajimehoshi/ebiten/v2/text"
)
func (r *Render) drawSelection() {
_, selection := r.buffer.GetSelection()
if selection == nil {
// nothing selected
return
}
bg, fg := r.theme.SelectionBackground(), r.theme.SelectionForeground()
for y := selection.Start.Line; y <= selection.End.Line; y++ {
xStart, xEnd := 0, int(r.buffer.ViewWidth())
if y == selection.Start.Line {
xStart = int(selection.Start.Col)
}
if y == selection.End.Line {
xEnd = int(selection.End.Col)
}
for x := xStart; x <= xEnd; x++ {
pX, pY := float64(x*r.font.CellSize.X), float64(y*uint64(r.font.CellSize.Y))
ebitenutil.DrawRect(r.frame, pX, pY, float64(r.font.CellSize.X), float64(r.font.CellSize.Y), bg)
cell := r.buffer.GetCell(uint16(x), uint16(y))
if cell == nil || cell.Rune().Rune == 0 {
continue
}
text.Draw(r.frame, string(cell.Rune().Rune), r.font.Regular, int(pX), int(pY)+r.font.DotDepth, fg)
}
}
}