Add the ui.ColorPicker
This commit is contained in:
parent
fa5f303dad
commit
690fdedb91
|
@ -138,6 +138,11 @@ func NewCanvas(size int, editable bool) *Canvas {
|
||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Destroy the canvas.
|
||||||
|
//
|
||||||
|
// TODO: Not implemented, here to satisfy ui.Widget, should free up textures tho.
|
||||||
|
func (w *Canvas) Destroy() {}
|
||||||
|
|
||||||
// Load initializes the Canvas using an existing Palette and Grid.
|
// Load initializes the Canvas using an existing Palette and Grid.
|
||||||
func (w *Canvas) Load(p *level.Palette, g *level.Chunker) {
|
func (w *Canvas) Load(p *level.Palette, g *level.Chunker) {
|
||||||
w.Palette = p
|
w.Palette = p
|
||||||
|
|
|
@ -180,38 +180,60 @@ func NewPaletteEditor(config PaletteEditor) *ui.Window {
|
||||||
Height: 24,
|
Height: 24,
|
||||||
})
|
})
|
||||||
btnColor.Handle(ui.Click, func(ed ui.EventData) error {
|
btnColor.Handle(ui.Click, func(ed ui.EventData) error {
|
||||||
shmem.Prompt(fmt.Sprintf(
|
// Open a ColorPicker widget.
|
||||||
"New color in hex notation [%s]: ", swatch.Color.ToHex()), func(answer string) {
|
picker, err := ui.NewColorPicker(ui.ColorPicker{
|
||||||
if answer != "" {
|
Title: "Select a color",
|
||||||
// XXX: pure white renders as invisible, fudge it a bit.
|
Supervisor: config.Supervisor,
|
||||||
if answer == "FFFFFF" {
|
Engine: config.Engine,
|
||||||
answer = "FFFFFE"
|
Color: swatch.Color,
|
||||||
}
|
OnManualInput: func(callback func(render.Color)) {
|
||||||
|
// Prompt the user to enter a hex color using the developer shell.
|
||||||
|
shmem.Prompt(fmt.Sprintf(
|
||||||
|
"New color in hex notation [%s]: ", swatch.Color.ToHex()), func(answer string) {
|
||||||
|
if answer != "" {
|
||||||
|
// XXX: pure white renders as invisible, fudge it a bit.
|
||||||
|
if answer == "FFFFFF" {
|
||||||
|
answer = "FFFFFE"
|
||||||
|
}
|
||||||
|
|
||||||
color, err := render.HexColor(answer)
|
color, err := render.HexColor(answer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
shmem.Flash("Error with that color code: %s", err)
|
shmem.Flash("Error with that color code: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
swatch.Color = color
|
callback(color)
|
||||||
|
}
|
||||||
// TODO: redundant from above, consolidate these
|
|
||||||
fmt.Printf("Set button style to: %s\n", swatch.Color)
|
|
||||||
btnColor.SetStyle(&style.Button{
|
|
||||||
Background: swatch.Color,
|
|
||||||
HoverBackground: swatch.Color.Lighten(40),
|
|
||||||
OutlineColor: render.Black,
|
|
||||||
OutlineSize: 1,
|
|
||||||
BorderStyle: style.BorderRaised,
|
|
||||||
BorderSize: 2,
|
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Couldn't open ColorPicker: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if config.OnChange != nil {
|
picker.Then(func(color render.Color) {
|
||||||
config.OnChange()
|
swatch.Color = color
|
||||||
}
|
|
||||||
|
// TODO: redundant from above, consolidate these
|
||||||
|
fmt.Printf("Set button style to: %s\n", swatch.Color)
|
||||||
|
btnColor.SetStyle(&style.Button{
|
||||||
|
Background: swatch.Color,
|
||||||
|
HoverBackground: swatch.Color.Lighten(40),
|
||||||
|
OutlineColor: render.Black,
|
||||||
|
OutlineSize: 1,
|
||||||
|
BorderStyle: style.BorderRaised,
|
||||||
|
BorderSize: 2,
|
||||||
|
})
|
||||||
|
|
||||||
|
if config.OnChange != nil {
|
||||||
|
config.OnChange()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
picker.Center(shmem.CurrentRenderEngine.WindowSize())
|
||||||
|
picker.Show()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
config.Supervisor.Add(btnColor)
|
config.Supervisor.Add(btnColor)
|
||||||
|
|
|
@ -300,16 +300,38 @@ func (c Settings) makeOptionsTab(tabFrame *ui.TabFrame, Width, Height int) *ui.F
|
||||||
style.HoverBackground = style.Background.Lighten(20)
|
style.HoverBackground = style.Background.Lighten(20)
|
||||||
btn.SetStyle(&style)
|
btn.SetStyle(&style)
|
||||||
btn.Handle(ui.Click, func(ed ui.EventData) error {
|
btn.Handle(ui.Click, func(ed ui.EventData) error {
|
||||||
shmem.Prompt("Enter color in hexadecimal notation: ", func(answer string) {
|
// Open a ColorPicker widget.
|
||||||
if answer == "" {
|
picker, err := ui.NewColorPicker(ui.ColorPicker{
|
||||||
return
|
Title: "Select a color",
|
||||||
}
|
Supervisor: c.Supervisor,
|
||||||
|
Engine: c.Engine,
|
||||||
|
Color: *row.Color,
|
||||||
|
OnManualInput: func(callback func(render.Color)) {
|
||||||
|
// Prompt the user to enter a hex color using the developer shell.
|
||||||
|
shmem.Prompt("New color in hex notation: ", func(answer string) {
|
||||||
|
if answer != "" {
|
||||||
|
// XXX: pure white renders as invisible, fudge it a bit.
|
||||||
|
if answer == "FFFFFF" {
|
||||||
|
answer = "FFFFFE"
|
||||||
|
}
|
||||||
|
|
||||||
color, err := render.HexColor(answer)
|
color, err := render.HexColor(answer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
shmem.FlashError("Invalid color value: %s", err)
|
shmem.Flash("Error with that color code: %s", err)
|
||||||
}
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(color)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Couldn't open ColorPicker: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
picker.Then(func(color render.Color) {
|
||||||
*row.Color = color
|
*row.Color = color
|
||||||
style.Background = color
|
style.Background = color
|
||||||
style.HoverBackground = style.Background.Lighten(20)
|
style.HoverBackground = style.Background.Lighten(20)
|
||||||
|
@ -317,6 +339,10 @@ func (c Settings) makeOptionsTab(tabFrame *ui.TabFrame, Width, Height int) *ui.F
|
||||||
// call onClick to save change to disk now
|
// call onClick to save change to disk now
|
||||||
onClick(ed)
|
onClick(ed)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
picker.Center(shmem.CurrentRenderEngine.WindowSize())
|
||||||
|
picker.Show()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user