Files
2026-09-02 00:23:03 +03:00

61 lines
1.3 KiB
Go

package imgui
import (
"time"
"mxl-player/internal/sdl"
cimgui "github.com/AllenDang/cimgui-go/imgui"
)
// ImGui context & IO wrapper
type Context struct {
ctx *cimgui.Context
io *cimgui.IO
lastDrawData *cimgui.DrawData
}
func New() *Context {
ctx := cimgui.CreateContext()
cimgui.SetCurrentContext(ctx)
io := cimgui.CurrentIO()
cimgui.CurrentPlatformIO().SetClipboardHandler(sdlClipboardHandler{})
return &Context{ctx: ctx, io: io}
}
type sdlClipboardHandler struct{}
func (sdlClipboardHandler) GetClipboard() string {
return sdl.GetClipboardText()
}
func (sdlClipboardHandler) SetClipboard(text string) {
sdl.SetClipboardText(text)
}
func (c *Context) Destroy() {
cimgui.DestroyContext()
}
// Starts new ImGui frame
// dt - time since last frame
func (c *Context) BeginFrame(dt time.Duration, winW, winH int32) {
c.io.SetDeltaTime(float32(dt.Seconds()))
c.io.SetDisplaySize(cimgui.Vec2{X: float32(winW), Y: float32(winH)})
cimgui.NewFrame()
}
// Ends the frame, renders
// and returns data for Vulkan
func (c *Context) EndFrame() *cimgui.DrawData {
cimgui.EndFrame()
cimgui.Render()
c.lastDrawData = cimgui.CurrentDrawData()
return cimgui.CurrentDrawData()
}
// expose io to input backend
func (c *Context) IO() *cimgui.IO { return c.io }
func (c *Context) LastDrawData() *cimgui.DrawData { return c.lastDrawData }