2019-07-04 03:24:04 +00:00
|
|
|
package doodle
|
|
|
|
|
|
|
|
import (
|
|
|
|
"git.kirsle.net/apps/doodle/lib/render"
|
|
|
|
"git.kirsle.net/apps/doodle/lib/ui"
|
|
|
|
"git.kirsle.net/apps/doodle/pkg/drawtool"
|
|
|
|
"git.kirsle.net/apps/doodle/pkg/log"
|
|
|
|
"git.kirsle.net/apps/doodle/pkg/sprites"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Width of the toolbar frame.
|
|
|
|
var toolbarWidth int32 = 44 // 38px button (32px sprite + borders) + padding
|
|
|
|
var toolbarSpriteSize int32 = 32 // 32x32 sprites.
|
|
|
|
|
|
|
|
// SetupToolbar configures the UI for the Tools panel.
|
|
|
|
func (u *EditorUI) SetupToolbar(d *Doodle) *ui.Frame {
|
|
|
|
frame := ui.NewFrame("Tool Bar")
|
|
|
|
frame.Resize(render.NewRect(toolbarWidth, 100))
|
|
|
|
frame.Configure(ui.Config{
|
|
|
|
BorderSize: 2,
|
|
|
|
BorderStyle: ui.BorderRaised,
|
|
|
|
Background: render.Grey,
|
|
|
|
})
|
|
|
|
|
|
|
|
btnFrame := ui.NewFrame("Tool Buttons")
|
|
|
|
frame.Pack(btnFrame, ui.Pack{
|
|
|
|
Anchor: ui.N,
|
|
|
|
})
|
|
|
|
|
|
|
|
// Buttons.
|
|
|
|
var buttons = []struct {
|
|
|
|
Value string
|
|
|
|
Icon string
|
|
|
|
Click func()
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
Value: drawtool.PencilTool.String(),
|
|
|
|
Icon: "assets/sprites/pencil-tool.png",
|
|
|
|
Click: func() {
|
|
|
|
u.Canvas.Tool = drawtool.PencilTool
|
|
|
|
u.DoodadTab.Hide()
|
|
|
|
u.PaletteTab.Show()
|
|
|
|
d.Flash("Pencil Tool selected.")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
Value: drawtool.LineTool.String(),
|
|
|
|
Icon: "assets/sprites/line-tool.png",
|
|
|
|
Click: func() {
|
|
|
|
u.Canvas.Tool = drawtool.LineTool
|
|
|
|
u.DoodadTab.Hide()
|
|
|
|
u.PaletteTab.Show()
|
|
|
|
d.Flash("Line Tool selected.")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
Value: drawtool.RectTool.String(),
|
|
|
|
Icon: "assets/sprites/rect-tool.png",
|
|
|
|
Click: func() {
|
|
|
|
u.Canvas.Tool = drawtool.RectTool
|
|
|
|
u.DoodadTab.Hide()
|
|
|
|
u.PaletteTab.Show()
|
|
|
|
d.Flash("Rectangle Tool selected.")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
Value: drawtool.ActorTool.String(),
|
|
|
|
Icon: "assets/sprites/actor-tool.png",
|
|
|
|
Click: func() {
|
|
|
|
u.Canvas.Tool = drawtool.ActorTool
|
|
|
|
u.PaletteTab.Hide()
|
|
|
|
u.DoodadTab.Show()
|
|
|
|
d.Flash("Actor Tool selected. Drag a Doodad from the drawer into your level.")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
Value: drawtool.LinkTool.String(),
|
|
|
|
Icon: "assets/sprites/link-tool.png",
|
|
|
|
Click: func() {
|
|
|
|
u.Canvas.Tool = drawtool.LinkTool
|
|
|
|
u.PaletteTab.Hide()
|
|
|
|
u.DoodadTab.Show()
|
|
|
|
d.Flash("Link Tool selected. Click a doodad in your level to link it to another.")
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
for _, button := range buttons {
|
|
|
|
button := button
|
|
|
|
image, err := sprites.LoadImage(d.Engine, button.Icon)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
btn := ui.NewRadioButton(
|
|
|
|
button.Value,
|
2019-07-04 04:55:15 +00:00
|
|
|
&u.activeTool,
|
2019-07-04 03:24:04 +00:00
|
|
|
button.Value,
|
|
|
|
image,
|
|
|
|
)
|
|
|
|
|
|
|
|
var btnSize int32 = btn.BoxThickness(2) + toolbarSpriteSize
|
|
|
|
log.Info("BtnSize: %d", btnSize)
|
|
|
|
btn.Resize(render.NewRect(btnSize, btnSize))
|
|
|
|
|
|
|
|
btn.Handle(ui.Click, func(p render.Point) {
|
|
|
|
button.Click()
|
|
|
|
})
|
|
|
|
u.Supervisor.Add(btn)
|
|
|
|
|
|
|
|
btnFrame.Pack(btn, ui.Pack{
|
|
|
|
Anchor: ui.N,
|
|
|
|
PadY: 2,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
frame.Compute(d.Engine)
|
|
|
|
|
|
|
|
return frame
|
|
|
|
}
|