mirror of
https://github.com/clockworkpi/LauncherGoDev.git
synced 2025-12-12 16:08:52 +01:00
150 lines
1.9 KiB
Go
150 lines
1.9 KiB
Go
package UI
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/veandco/go-sdl2/sdl"
|
|
|
|
)
|
|
|
|
type element struct {
|
|
data interface{}
|
|
next *element
|
|
}
|
|
|
|
type PageStack struct {
|
|
lock *sync.Mutex
|
|
head *element
|
|
Size int
|
|
}
|
|
|
|
func (stk *PageStack) Push(data interface{}) {
|
|
stk.lock.Lock()
|
|
|
|
element := new(element)
|
|
element.data = data
|
|
temp := stk.head
|
|
element.next = temp
|
|
stk.head = element
|
|
stk.Size++
|
|
|
|
stk.lock.Unlock()
|
|
}
|
|
|
|
func (stk *PageStack) Pop() interface{} {
|
|
if stk.head == nil {
|
|
return nil
|
|
}
|
|
stk.lock.Lock()
|
|
r := stk.head.data
|
|
stk.head = stk.head.next
|
|
stk.Size--
|
|
|
|
stk.lock.Unlock()
|
|
|
|
return r
|
|
}
|
|
|
|
func NewPageStack() *PageStack {
|
|
stk := new(PageStack)
|
|
stk.lock = &sync.Mutex{}
|
|
return stk
|
|
}
|
|
|
|
|
|
type PageSelector struct {
|
|
|
|
PosX int
|
|
PosY int
|
|
Width int
|
|
Height int
|
|
Parent interface{} //
|
|
Alpha int
|
|
OnShow bool
|
|
IconSurf *sdl.Surface
|
|
|
|
}
|
|
|
|
func (p *PageSelector) Adjust(x,y,w,h,alpha int) {
|
|
p.PosX = x
|
|
p.PosY = y
|
|
p.Width = w
|
|
p.Height = h
|
|
p.Alpha = alpha
|
|
}
|
|
|
|
func (p *PageSelector) Draw() {
|
|
|
|
}
|
|
|
|
|
|
type PageInterface interface {
|
|
// shared functions
|
|
// GetScreen
|
|
// GetIcons
|
|
// SetScreen
|
|
// SetFootMsg
|
|
// SetCanvasHWND
|
|
// GetCanvasHWND
|
|
// GetHWND
|
|
// SetHWND
|
|
// AdjustHLeftAlign
|
|
// AdjustSAutoLeftAlign
|
|
// SetPsIndex
|
|
// SetIconIndex
|
|
// GetPsIndex
|
|
// GetIconIndex
|
|
// Coord
|
|
// Size
|
|
}
|
|
|
|
type Page struct {
|
|
|
|
PosX int
|
|
PosY int
|
|
Width int
|
|
Height int
|
|
Icons []interface{} // make first
|
|
IconNumbers int
|
|
IconIndex int
|
|
PrevIconIndex int
|
|
|
|
Ps interface{}
|
|
PsIndex int
|
|
|
|
Index int
|
|
|
|
Align string
|
|
|
|
CanvasHWND *sdl.Surface
|
|
HWND *sdl.Surface
|
|
|
|
OnShow bool
|
|
|
|
Name string
|
|
Screen *MainScreen
|
|
|
|
PageIconMargin int // default 20
|
|
FootMsg [5]string
|
|
|
|
SelectedIconTopOffset int
|
|
EasingDur int
|
|
}
|
|
|
|
func NewPage() *Page {
|
|
p := &Page{}
|
|
p.PageIconMargin = 20
|
|
p.SelectedIconTopOffset = 20
|
|
p.EasingDur = 30
|
|
|
|
p.FootMsg = [5]string{"Nav.","","","","Enter"}
|
|
|
|
return p
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|