diff --git a/Backend.go b/Backend.go index 95968f79..c880bcff 100644 --- a/Backend.go +++ b/Backend.go @@ -1,6 +1,8 @@ package giu import ( + "fmt" + "github.com/AllenDang/cimgui-go/backend" "github.com/AllenDang/cimgui-go/backend/glfwbackend" ) @@ -8,13 +10,15 @@ import ( // sometimes we need to tell what we mean ;-) // good example is: // FlagsNotResizable in giu, -// but cimgui-go has only FlagsResizable. So SetFlags(Resizable, 0) +// but cimgui-go has only FlagsResizable. So SetFlags(Resizable, 0). type flagValue[T ~int] struct { flag T value int } // GIUBackend is an abstraction layer between cimgui-go's Backends. +// +//nolint:revive // this name is OK type GIUBackend backend.Backend[MasterWindowFlags] var _ GIUBackend = &GLFWBackend{} @@ -25,23 +29,30 @@ type GLFWBackend struct { *glfwbackend.GLFWBackend } +// NewGLFWBackend creates a new instance of GLFWBackend. func NewGLFWBackend() *GLFWBackend { return &GLFWBackend{ GLFWBackend: glfwbackend.NewGLFWBackend(), } } -func (b *GLFWBackend) SetInputMode(mode MasterWindowFlags, value MasterWindowFlags) { +// SetInputMode implements backend.Backend interface. +func (b *GLFWBackend) SetInputMode(mode, _ MasterWindowFlags) { flag := b.parseFlag(mode) b.GLFWBackend.SetInputMode(flag.flag, glfwbackend.GLFWWindowFlags(flag.value)) } +// SetSwapInterval implements backend.Backend interface. func (b *GLFWBackend) SetSwapInterval(interval MasterWindowFlags) error { intervalV := b.parseFlag(interval).flag - b.GLFWBackend.SetSwapInterval(intervalV) + if err := b.GLFWBackend.SetSwapInterval(intervalV); err != nil { + return fmt.Errorf("giu.GLFWBackend got error while SwapInterval: %w", err) + } + return nil } +// SetWindowFlags implements backend.Backend interface. func (b *GLFWBackend) SetWindowFlags(flags MasterWindowFlags, _ int) { flag := b.parseFlag(flags) b.GLFWBackend.SetWindowFlags(flag.flag, flag.value) diff --git a/MasterWindow.go b/MasterWindow.go index bbe9d4cb..0d9974b2 100644 --- a/MasterWindow.go +++ b/MasterWindow.go @@ -100,6 +100,7 @@ func NewMasterWindow(title string, width, height int, flags MasterWindowFlags) * currentBackend.SetBeforeRenderHook(mw.beforeRender) currentBackend.SetAfterRenderHook(mw.afterRender) currentBackend.SetBeforeDestroyContextHook(mw.beforeDestroy) + for f := MasterWindowFlagsNotResizable; f <= MasterWindowFlagsHidden; f <<= 1 { if f&flags != 0 { currentBackend.SetWindowFlags(f, 0) // 0 because it is not used anyway (flag values are determined by giu