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 }