Add WindowOption and RunWithOptions function to allow for extra configuration

This commit is contained in:
obvionaoe 2024-05-09 16:01:48 +01:00
parent a3526f42c5
commit ea37c58ee8
No known key found for this signature in database
GPG Key ID: 151EEA7BF7C3A851

51
crt.go
View File

@ -66,6 +66,43 @@ type Window struct {
invalidateBuffer bool
}
type WindowOption func(window *Window)
// WithWindowTitle sets the window title.
func WithWindowTitle(title string) WindowOption {
return func(window *Window) {
ebiten.SetWindowTitle(title)
}
}
// WithScreenFilter enables the screen filter.
func WithScreenFilter() WindowOption {
return func(window *Window) {
ebiten.SetScreenFilterEnabled(true)
}
}
// WithoutScreenFilter disables the screen filter.
func WithoutScreenFilter() WindowOption {
return func(window *Window) {
ebiten.SetScreenFilterEnabled(true)
}
}
// WithWindowDecoration enables window decorations.
func WithWindowDecoration() WindowOption {
return func(window *Window) {
ebiten.SetWindowDecorated(true)
}
}
// WithoutWindowDecoration enables window decorations.
func WithoutWindowDecoration() WindowOption {
return func(window *Window) {
ebiten.SetWindowDecorated(false)
}
}
// NewGame creates a new terminal game with the given dimensions and font faces.
func NewGame(width int, height int, fonts Fonts, tty io.Reader, adapter InputAdapter, defaultBg color.Color) (*Window, error) {
if defaultBg == nil {
@ -631,6 +668,20 @@ func (g *Window) Run(title string) error {
return nil
}
func (g *Window) RunWithOptions(options ...WindowOption) error {
ebiten.SetWindowSize(int(float64(g.cellsWidth*g.cellWidth)/DeviceScale()), int(float64(g.cellsHeight*g.cellHeight)/DeviceScale()))
for _, opt := range options {
opt(g)
}
if err := ebiten.RunGame(g); err != nil {
return err
}
return nil
}
func (g *Window) Kill() {
SysKill()
}