38
menu.go
38
menu.go
@@ -18,23 +18,28 @@ type Menu struct {
|
||||
}
|
||||
|
||||
// NewMenu creates a new menu with the specified items. The menu will appear
|
||||
// directly under the anchor Object. If the anchor is nil, it will appear
|
||||
// directly under the mouse pointer instead.
|
||||
func NewMenu (anchor tomo.Object, items ...tomo.Object) (*Menu, error) {
|
||||
menu := &Menu { }
|
||||
if anchor == nil {
|
||||
// TODO: *actually* put it under the mouse
|
||||
window, err := tomo.NewWindow(menu.bounds)
|
||||
if err != nil { return nil, err }
|
||||
menu.Window = window
|
||||
} else {
|
||||
menu.bounds = menuBoundsFromAnchor(anchor)
|
||||
menu.parent = anchor.GetBox().Window()
|
||||
window, err := menu.parent.NewMenu(menu.bounds)
|
||||
if err != nil { return nil, err }
|
||||
menu.Window = window
|
||||
}
|
||||
// directly under the mouse pointer.
|
||||
func NewMenu (parent tomo.Window, items ...tomo.Object) (*Menu, error) {
|
||||
bounds := (image.Rectangle { }).Add(parent.MousePosition())
|
||||
return newMenu(parent, bounds, items...)
|
||||
}
|
||||
|
||||
// NewAnchoredMenu creates a new menu with the specified items. The menu will
|
||||
// appear directly under the anchor.
|
||||
func NewAnchoredMenu (anchor tomo.Object, items ...tomo.Object) (*Menu, error) {
|
||||
parent := anchor.GetBox().Window()
|
||||
bounds := menuBoundsFromAnchor(anchor)
|
||||
return newMenu(parent, bounds, items...)
|
||||
}
|
||||
|
||||
func newMenu (parent tomo.Window, bounds image.Rectangle, items ...tomo.Object) (*Menu, error) {
|
||||
menu := &Menu { }
|
||||
menu.bounds = bounds
|
||||
menu.parent = parent
|
||||
window, err := menu.parent.NewMenu(menu.bounds)
|
||||
if err != nil { return nil, err }
|
||||
menu.Window = window
|
||||
|
||||
menu.rootContainer = tomo.NewContainerBox()
|
||||
menu.rootContainer.SetAttr(tomo.ALayout(layouts.ContractVertical))
|
||||
|
||||
@@ -74,6 +79,7 @@ func (this *Menu) TearOff () {
|
||||
this.Window.Close()
|
||||
|
||||
this.rootContainer.Remove(this.tearLine)
|
||||
this.rootContainer.SetTag("torn", true)
|
||||
|
||||
this.Window = window
|
||||
this.Window.SetRoot(this.rootContainer)
|
||||
|
||||
Reference in New Issue
Block a user