github.com/jmigpin/editor@v1.6.0/util/uiutil/widget/floatboxbutton.go (about)

     1  package widget
     2  
     3  import (
     4  	"image"
     5  
     6  	"github.com/jmigpin/editor/util/uiutil/event"
     7  )
     8  
     9  type FloatBoxButton struct {
    10  	*Button
    11  	floatBox *FloatBox // added to the menulayer
    12  }
    13  
    14  func NewFloatBoxButton(ctx ImageContext, ml *MultiLayer, fl *FloatLayer, content Node) *FloatBoxButton {
    15  	b := NewButton(ctx)
    16  	b.Sticky = true
    17  	b.Label.Text.SetStr("floatboxbutton")
    18  
    19  	fbb := &FloatBoxButton{Button: b}
    20  
    21  	// floatbox
    22  	fbb.floatBox = NewFloatBox(ml, content)
    23  	fl.Append(fbb.floatBox)
    24  	fbb.floatBox.Hide()
    25  
    26  	fbb.OnClick = func(*event.MouseClick) {
    27  		fbb.floatBox.Toggle()
    28  	}
    29  
    30  	return fbb
    31  }
    32  
    33  func (fbb *FloatBoxButton) Close() {
    34  	// remove floatbox from the floatlayer
    35  	fbb.floatBox.Parent.Remove(fbb.floatBox)
    36  }
    37  
    38  //----------
    39  
    40  func (fbb *FloatBoxButton) Layout() {
    41  	fbb.Button.Layout()
    42  
    43  	// update refpoint
    44  	fbb.floatBox.RefPoint = image.Point{fbb.Bounds.Min.X, fbb.Bounds.Max.Y}
    45  
    46  	if !fbb.floatBox.Visible() {
    47  		//fbb.floatBox.Layout()
    48  		fbb.floatBox.MarkNeedsLayout()
    49  	}
    50  }