From d0ee6c432c066d45928ec21eddca3df4caaa37a9 Mon Sep 17 00:00:00 2001 From: "sashakoshka@tebibyte.media" Date: Wed, 26 Jun 2024 11:20:53 -0400 Subject: [PATCH] Add OnEnter to Swatch and ColorPicker --- labelswatch.go | 8 +++++++- swatch.go | 26 +++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/labelswatch.go b/labelswatch.go index 10947cb..f935b78 100644 --- a/labelswatch.go +++ b/labelswatch.go @@ -49,11 +49,17 @@ func (this *LabelSwatch) RGBA () (r, g, b, a uint32) { } // OnValueChange specifies a function to be called when the swatch's color -// changes. +// is changed by the user. func (this *LabelSwatch) OnValueChange (callback func ()) event.Cookie { return this.swatch.OnValueChange(callback) } +// OnEnter specifies a function to be called when the user selects "OK" in the +// color picker. +func (this *LabelSwatch) OnEnter (callback func ()) event.Cookie { + return this.swatch.OnEnter(callback) +} + func (this *LabelSwatch) handleMouseUp (button input.Button) { if button != input.ButtonLeft { return } if this.MousePosition().In(this.Bounds()) { diff --git a/swatch.go b/swatch.go index 8b87051..2757df9 100644 --- a/swatch.go +++ b/swatch.go @@ -17,6 +17,7 @@ type Swatch struct { label string on struct { valueChange event.FuncBroadcaster + enter event.FuncBroadcaster } } @@ -49,15 +50,22 @@ func (this *Swatch) Value () color.Color { // RGBA satisfies the color.Color interface func (this *Swatch) RGBA () (r, g, b, a uint32) { + if this.value == nil { return } return this.value.RGBA() } // OnValueChange specifies a function to be called when the swatch's color -// changes. +// is changed by the user. func (this *Swatch) OnValueChange (callback func ()) event.Cookie { return this.on.valueChange.Connect(callback) } +// OnEnter specifies a function to be called when the user selects "OK" in the +// color picker. +func (this *Swatch) OnEnter (callback func ()) event.Cookie { + return this.on.enter.Connect(callback) +} + // Choose creates a modal that allows the user to edit the color of the swatch. func (this *Swatch) Choose () { if this.editing { return } @@ -65,7 +73,7 @@ func (this *Swatch) Choose () { var err error var window tomo.Window if parent := this.Window(); parent != nil { - window, err = parent.NewModal(image.Rectangle { }) + window, err = parent.NewChild(image.Rectangle { }) } else { window, err = tomo.NewWindow(image.Rectangle { }) } @@ -79,22 +87,26 @@ func (this *Swatch) Choose () { window.SetTitle(this.label) } + committed := false + colorPicker := NewColorPicker(this.Value()) colorPicker.OnValueChange(func () { this.userSetValue(colorPicker.Value()) }) + hexInput := NewTextInput("TODO") + colorMemory := this.value cancelButton := NewButton("Cancel") cancelButton.SetIcon(tomo.IconDialogCancel) cancelButton.OnClick(func () { - this.userSetValue(colorMemory) window.Close() }) okButton := NewButton("OK") okButton.SetFocused(true) okButton.SetIcon(tomo.IconDialogOkay) okButton.OnClick(func () { + committed = true window.Close() }) @@ -106,8 +118,16 @@ func (this *Swatch) Choose () { window.SetRoot(NewOuterContainer ( layouts.Column { true, false }, colorPicker, + NewInnerContainer(layouts.Row { false, true }, + NewLabel("Hex"), + hexInput), controlRow)) window.OnClose(func () { + if committed { + this.on.enter.Broadcast() + } else { + this.userSetValue(colorMemory) + } this.editing = false }) this.editing = true