Noah Petherbridge
22440f436b
* Rudimentary scrolling shows a Left and Right button at the top of the Doodad Palette if your window is deemed not tall enough to contain all of the doodads. * A "progress bar" is shown between the buttons indicating the percentage of your scroll down the doodad list. When you're able to see the final row of doodads, the progress bar is at 100%.
124 lines
2.7 KiB
Go
124 lines
2.7 KiB
Go
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,
|
|
&u.activeTool,
|
|
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
|
|
}
|