package gui import ( "image" "image/color" "github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2/ebitenutil" "github.com/hajimehoshi/ebiten/v2/text" "golang.org/x/image/font" ) type Image struct { img *ebiten.Image bounds image.Rectangle } func newImage(img *ebiten.Image) *Image { return &Image{ img: img, bounds: img.Bounds(), } } func NewImage(width, height int) *Image { return &Image{ img: ebiten.NewImage(width, height), bounds: image.Rect(0, 0, width, height), } } func (i *Image) SubImage(rect image.Rectangle) image.Image { img := i.img.SubImage(rect).(*ebiten.Image) return &Image{ img: img, bounds: img.Bounds().Intersect(i.bounds), } } func (i *Image) At(x, y int) color.Color { return i.image().At(x, y) } func (i *Image) Constrain(rect image.Rectangle) *Image { return &Image{ img: i.img, bounds: i.bounds.Intersect(rect), } } func (i *Image) ColorModel() color.Model { return i.image().ColorModel() } func (i *Image) Const() image.Rectangle { return i.bounds } func (i *Image) Bounds() image.Rectangle { return i.img.Bounds() } func (i *Image) image() *ebiten.Image { return i.img.SubImage(i.bounds).(*ebiten.Image) } func (i *Image) Fill(c color.Color) { i.image().Fill(c) } func (i *Image) DrawString(s string, f font.Face, x, y int, c color.Color) { text.Draw(i.image(), s, f, i.img.Bounds().Min.X+x, i.img.Bounds().Min.Y+y, c) } func (i *Image) DrawImage(img *Image, op *ebiten.DrawImageOptions) { i.image().DrawImage(img.img, op) } func (i *Image) DrawRect(rect image.Rectangle, colr color.Color) { ebitenutil.DrawRect(i.image(), float64(rect.Min.X), float64(rect.Min.Y), float64(rect.Dx()), float64(rect.Dy()), colr) }