Noah Petherbridge
f9b305679a
* Tooltip can be added to any target widget (e.g. Button) and pop up on mouse over. * Refactor the event system. Instead of passing a render.Point to all event handlers, pass an EventData struct which can hold the Point or the render.Engine. * Add event types Computed and Present, so a widget can set a handler on whenever its Computed or Present method is called.
145 lines
2.7 KiB
Go
145 lines
2.7 KiB
Go
// Example script for using the Place strategy of ui.Frame.
|
|
package main
|
|
|
|
import (
|
|
"git.kirsle.net/go/render"
|
|
"git.kirsle.net/go/ui"
|
|
)
|
|
|
|
func main() {
|
|
mw, err := ui.NewMainWindow("Frame Placement Demo | Click a Button", 800, 600)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
mw.SetBackground(render.White)
|
|
|
|
// Create a sub-frame with its own buttons packed within.
|
|
frame := ui.NewFrame("Blue Frame")
|
|
frame.Configure(ui.Config{
|
|
Width: 300,
|
|
Height: 150,
|
|
Background: render.DarkBlue,
|
|
BorderSize: 1,
|
|
BorderStyle: ui.BorderSunken,
|
|
})
|
|
mw.Place(frame, ui.Place{
|
|
Point: render.NewPoint(80, 80),
|
|
})
|
|
|
|
// Create another frame that attaches itself to the bottom right
|
|
// of the window.
|
|
frame2 := ui.NewFrame("Red Frame")
|
|
frame2.Configure(ui.Config{
|
|
Width: 300,
|
|
Height: 150,
|
|
Background: render.DarkRed,
|
|
})
|
|
mw.Place(frame2, ui.Place{
|
|
Right: 80,
|
|
Bottom: 80,
|
|
})
|
|
|
|
// Draw rings of buttons around various widgets. The buttons say things
|
|
// like "Top Left", "Top Center", "Left Middle", "Center" etc. encompassing
|
|
// all 9 side placement options.
|
|
CreateButtons(mw, frame)
|
|
CreateButtons(mw, frame2)
|
|
CreateButtons(mw, mw.Frame())
|
|
|
|
mw.MainLoop()
|
|
}
|
|
|
|
// CreateButtons creates a set of Placed buttons around all the edges and
|
|
// center of the parent frame.
|
|
func CreateButtons(window *ui.MainWindow, parent *ui.Frame) {
|
|
// Draw buttons around the edges of the window.
|
|
buttons := []struct {
|
|
Label string
|
|
Place ui.Place
|
|
}{
|
|
{
|
|
Label: "Top Left",
|
|
Place: ui.Place{
|
|
Point: render.NewPoint(12, 12),
|
|
},
|
|
},
|
|
{
|
|
Label: "Top Middle",
|
|
Place: ui.Place{
|
|
Top: 12,
|
|
Center: true,
|
|
},
|
|
},
|
|
{
|
|
Label: "Top Right",
|
|
Place: ui.Place{
|
|
Top: 12,
|
|
Right: 12,
|
|
},
|
|
},
|
|
{
|
|
Label: "Left Middle",
|
|
Place: ui.Place{
|
|
Left: 12,
|
|
Middle: true,
|
|
},
|
|
},
|
|
{
|
|
Label: "Center",
|
|
Place: ui.Place{
|
|
Center: true,
|
|
Middle: true,
|
|
},
|
|
},
|
|
{
|
|
Label: "Right Middle",
|
|
Place: ui.Place{
|
|
Right: 12,
|
|
Middle: true,
|
|
},
|
|
},
|
|
{
|
|
Label: "Bottom Left",
|
|
Place: ui.Place{
|
|
Left: 12,
|
|
Bottom: 12,
|
|
},
|
|
},
|
|
{
|
|
Label: "Bottom Center",
|
|
Place: ui.Place{
|
|
Bottom: 12,
|
|
Center: true,
|
|
},
|
|
},
|
|
{
|
|
Label: "Bottom Right",
|
|
Place: ui.Place{
|
|
Bottom: 12,
|
|
Right: 12,
|
|
},
|
|
},
|
|
}
|
|
for _, setting := range buttons {
|
|
setting := setting
|
|
|
|
button := ui.NewButton(setting.Label, ui.NewLabel(ui.Label{
|
|
Text: setting.Label,
|
|
Font: render.Text{
|
|
FontFilename: "../DejaVuSans.ttf",
|
|
Size: 12,
|
|
Color: render.Black,
|
|
},
|
|
}))
|
|
|
|
// When clicked, change the window title to ID this button.
|
|
button.Handle(ui.Click, func(ed ui.EventData) {
|
|
window.SetTitle(parent.Name + ": " + setting.Label)
|
|
})
|
|
|
|
parent.Place(button, setting.Place)
|
|
window.Add(button)
|
|
}
|
|
}
|