package tins2020 import ( "opslag.de/schobers/zntg/ui" ) // import ( // "github.com/veandco/go-sdl2/sdl" // ) // type HoverEffect int // const ( // HoverEffectLigthen HoverEffect = iota // HoverEffectColor // ) type IconButton struct { ui.Button IconDisabled string // IconScale Scale // IconWidth int32 // IconActive HoverEffect // IconHover HoverEffect // Tooltip Tooltip IsActive bool } func NewIconButton(icon string, click ui.EventEmptyFn) *IconButton { b := &IconButton{ Button: ui.Button{ Icon: icon, }, } b.ControlClicked().AddHandler(func(ctx ui.Context, _ ui.ControlClickedArgs) { click(ctx) }) return b } func NewIconButtonConfigure(icon string, click ui.EventEmptyFn, configure func(*IconButton)) *IconButton { button := NewIconButton(icon, click) configure(button) return button } // func (b *IconButton) activeTexture(ctx ui.Context) *Texture { // if b.Disabled { // texture := ctx.Textures.Texture(b.IconDisabled) // if texture != nil { // return texture // } // texture = ctx.Textures.Texture(b.Icon) // if len(b.IconDisabled) == 0 { // return texture // } // color, err := HexColor(b.IconDisabled) // if err == nil { // texture.SetColor(color) // } // return texture // } // return ctx.Textures.Texture(b.Icon) // } // func (b *IconButton) Arrange(ctx ui.Context, bounds Rectangle) { // b.ControlBase.Arrange(ctx, bounds) // b.Tooltip.Arrange(ctx, bounds) // } // func (b *IconButton) Handle(ctx ui.Context, event sdl.Event) bool { // if b.ControlBase.Handle(ctx, event) { // return true // } // if b.Tooltip.Handle(ctx, event) { // return true // } // return false // } // func (b *IconButton) Init(ctx ui.Context) error { // if err := b.ControlBase.Init(ctx); err != nil { // return err // } // if err := b.Tooltip.Init(ctx); err != nil { // return err // } // return nil // } // func (b *IconButton) Render(ctx ui.Context) { // iconTexture := b.activeTexture(ctx) // hover := b.IsMouseOver && !b.Disabled // if (hover && b.IconHover == HoverEffectColor) || (b.IsActive && b.IconActive == HoverEffectColor) { // iconTexture.SetColor(MustHexColor("#15569F")) // } // if b.IconScale == ScaleCenter { // size := iconTexture.Size() // if b.IconWidth != 0 { // size = Pt(b.IconWidth, b.IconWidth*size.Y/size.X) // } else if b.IconHeight != 0 { // size = Pt(b.IconHeight*size.X/size.Y, b.IconHeight) // } // iconTexture.CopyResize(ctx.Renderer, Rect(b.Bounds.X+(b.Bounds.W-size.X)/2, b.Bounds.Y+(b.Bounds.H-size.Y)/2, size.X, size.Y)) // } else { // iconTexture.CopyResize(ctx.Renderer, b.Bounds) // } // if (hover && b.IconHover == HoverEffectLigthen) || (b.IsActive && b.IconActive == HoverEffectLigthen) { // SetDrawColor(ctx.Renderer, TransparentWhite) // ctx.Renderer.FillRect(b.Bounds.SDLPtr()) // } // iconTexture.SetColor(White) // if len(b.Tooltip.Text) > 0 && b.IsMouseOver { // b.Tooltip.Render(ctx) // } // } // type Scale int // const ( // ScaleCenter Scale = iota // ScaleStretch // )