118 lines
2.5 KiB
Go
118 lines
2.5 KiB
Go
|
package gui
|
||
|
|
||
|
import (
|
||
|
"github.com/hajimehoshi/ebiten/v2"
|
||
|
"github.com/liamg/darktile/internal/app/darktile/termutil"
|
||
|
)
|
||
|
|
||
|
type WindowManipulator struct {
|
||
|
g *GUI
|
||
|
title string
|
||
|
titleStack []string
|
||
|
}
|
||
|
|
||
|
func NewManipulator(g *GUI) *WindowManipulator {
|
||
|
return &WindowManipulator{
|
||
|
g: g,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) ReportError(err error) {
|
||
|
m.g.ShowError(err.Error())
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) CellSizeInPixels() (int, int) {
|
||
|
size := m.g.fontManager.CharSize()
|
||
|
return size.X, size.Y
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) Position() (int, int) {
|
||
|
return ebiten.WindowPosition()
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) GetTitle() string {
|
||
|
return m.title
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) SetTitle(title string) {
|
||
|
m.title = title
|
||
|
ebiten.SetWindowTitle(m.title)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) SaveTitleToStack() {
|
||
|
m.titleStack = append(m.titleStack, m.title)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) RestoreTitleFromStack() {
|
||
|
if len(m.titleStack) == 0 {
|
||
|
m.SetTitle("")
|
||
|
}
|
||
|
|
||
|
title := m.titleStack[len(m.titleStack)-1]
|
||
|
m.titleStack = m.titleStack[:len(m.titleStack)-1]
|
||
|
m.SetTitle(title)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) State() termutil.WindowState {
|
||
|
if ebiten.IsWindowMinimized() {
|
||
|
return termutil.StateMinimised
|
||
|
}
|
||
|
|
||
|
if ebiten.IsWindowMaximized() {
|
||
|
return termutil.StateMaximised
|
||
|
}
|
||
|
|
||
|
return termutil.StateNormal
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) Minimise() {
|
||
|
ebiten.MinimizeWindow()
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) Maximise() {
|
||
|
ebiten.MaximizeWindow()
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) Restore() {
|
||
|
ebiten.RestoreWindow()
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) SizeInPixels() (int, int) {
|
||
|
return m.g.size.X, m.g.size.Y
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) SizeInChars() (int, int) {
|
||
|
return int(m.g.terminal.GetActiveBuffer().ViewWidth()), int(m.g.terminal.GetActiveBuffer().ViewHeight())
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) ResizeInPixels(x int, y int) {
|
||
|
ebiten.SetWindowSize(x, y)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) ResizeInChars(cols int, rows int) {
|
||
|
x := cols * m.g.fontManager.CharSize().X
|
||
|
y := rows * m.g.fontManager.CharSize().Y
|
||
|
ebiten.SetWindowSize(x, y)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) ScreenSizeInPixels() (int, int) {
|
||
|
return ebiten.WindowSize()
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) ScreenSizeInChars() (int, int) {
|
||
|
w, h := ebiten.WindowSize()
|
||
|
return w / m.g.fontManager.CharSize().X, h / m.g.fontManager.CharSize().Y
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) Move(x, y int) {
|
||
|
ebiten.SetWindowPosition(x, y)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) SetFullscreen(enabled bool) {
|
||
|
ebiten.SetFullscreen(enabled)
|
||
|
}
|
||
|
|
||
|
func (m *WindowManipulator) IsFullscreen() bool {
|
||
|
return ebiten.IsFullscreen()
|
||
|
}
|