Created
March 4, 2024 05:30
-
-
Save Capital-EX/23d0780ab024dfabb37af9264206f257 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
// An attempt to figure out the minimum boilplate needed for implementing a | |
// widget in Ebitenui | |
import ( | |
"image" | |
"image/color" | |
"github.com/ebitenui/ebitenui/widget" | |
"github.com/hajimehoshi/ebiten/v2" | |
"github.com/hajimehoshi/ebiten/v2/vector" | |
) | |
type CustomWidget struct { | |
widget *widget.Widget | |
init *widget.MultiOnce | |
} | |
type CustomWidgetOpt func(o *CustomWidget) | |
type CustomWidgetOptions struct { | |
} | |
var CustomWidgetOpts CustomWidgetOptions | |
func (o *CustomWidget) createWidget() { | |
o.widget = widget.NewWidget() | |
} | |
func (o *CustomWidget) Render(screen *ebiten.Image, def widget.DeferredRenderFunc) { | |
vector.DrawFilledCircle(screen, 15+float32(o.widget.Rect.Min.X), 15+float32(o.widget.Rect.Min.Y), 5, color.White, false) | |
} | |
func NewCustomWidget(opts ...CustomWidgetOpt) *CustomWidget { | |
obj := &CustomWidget{ | |
init: &widget.MultiOnce{}, | |
} | |
obj.init.Append(obj.createWidget) | |
for _, opt := range opts { | |
opt(obj) | |
} | |
return obj | |
} | |
// GetWidget implements widget.PreferredSizeLocateableWidget. | |
func (o *CustomWidget) GetWidget() *widget.Widget { | |
o.init.Do() | |
return o.widget | |
} | |
// PreferredSize implements widget.PreferredSizeLocateableWidget. | |
func (o *CustomWidget) PreferredSize() (int, int) { | |
o.init.Do() | |
return ebiten.WindowSize() | |
} | |
// SetLocation implements widget.PreferredSizeLocateableWidget. | |
func (o *CustomWidget) SetLocation(rect image.Rectangle) { | |
o.init.Do() | |
o.widget.SetLocation(rect) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment