diff --git a/button.go b/button.go index 95cbb57..f8b80df 100644 --- a/button.go +++ b/button.go @@ -89,23 +89,23 @@ func (this *Button) applyLayout () { } func (this *Button) handleKeyDown (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } + if !isClickingKey(key) { return false } this.on.click.Broadcast() return true } func (this *Button) handleKeyUp (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } + if !isClickingKey(key) { return false } return true } func (this *Button) handleButtonDown (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } return true } func (this *Button) handleButtonUp (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } if this.Window().MousePosition().In(this.Bounds()) { this.on.click.Broadcast() } diff --git a/checkbox.go b/checkbox.go index 987d461..ab65dbc 100644 --- a/checkbox.go +++ b/checkbox.go @@ -54,23 +54,23 @@ func (this *Checkbox) OnValueChange (callback func ()) event.Cookie { } func (this *Checkbox) handleKeyDown (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } + if !isClickingKey(key) { return false } this.Toggle() return true } func (this *Checkbox) handleKeyUp (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false} + if !isClickingKey(key) { return false} return true } func (this *Checkbox) handleButtonDown (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } return true } func (this *Checkbox) handleButtonUp (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } if this.Window().MousePosition().In(this.Bounds()) { this.Toggle() } diff --git a/dropdown.go b/dropdown.go index b2b7da4..391e82b 100644 --- a/dropdown.go +++ b/dropdown.go @@ -66,6 +66,17 @@ func (this *Dropdown) SetItems (items ...string) { this.items = items } +// Choose creates a menu that allows the user to pick a value. +func (this *Dropdown) Choose () { + if this.menu != nil { + this.menu.Close() + } + menu, err := NewAnchoredMenu(this, this.itemList()...) + if err != nil { return } + this.menu = menu + menu.SetVisible(true) +} + func (this *Dropdown) itemList () []tomo.Object { items := make([]tomo.Object, len(this.items)) for index, value := range this.items { @@ -80,36 +91,26 @@ func (this *Dropdown) itemList () []tomo.Object { return items } -func (this *Dropdown) showMenu () { - if this.menu != nil { - this.menu.Close() - } - menu, err := NewAnchoredMenu(this, this.itemList()...) - if err != nil { return } - this.menu = menu - menu.SetVisible(true) -} - func (this *Dropdown) handleKeyDown (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } - this.showMenu() + if !isClickingKey(key) { return false } + this.Choose() return true } func (this *Dropdown) handleKeyUp (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } + if !isClickingKey(key) { return false } return true } func (this *Dropdown) handleButtonDown (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } return true } func (this *Dropdown) handleButtonUp (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } if this.Window().MousePosition().In(this.Bounds()) { - this.showMenu() + this.Choose() } return true } diff --git a/input.go b/input.go new file mode 100644 index 0000000..8465a5a --- /dev/null +++ b/input.go @@ -0,0 +1,19 @@ +package objects + +import "git.tebibyte.media/tomo/tomo/input" + +func isClickingKey (key input.Key) bool { + return key == input.KeyEnter || key == input.Key(' ') +} + +func isConfirmationKey (key input.Key) bool { + return key == input.KeyEnter +} + +func isClickingButton (button input.Button) bool { + return button == input.ButtonLeft +} + +func isMenuButton (button input.Button) bool { + return button == input.ButtonLeft +} diff --git a/labelcheckbox.go b/labelcheckbox.go index c6f67aa..e1f1bee 100644 --- a/labelcheckbox.go +++ b/labelcheckbox.go @@ -55,12 +55,12 @@ func (this *LabelCheckbox) OnValueChange (callback func ()) event.Cookie { } func (this *LabelCheckbox) handleButtonDown (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } return true } func (this *LabelCheckbox) handleButtonUp (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } if this.Window().MousePosition().In(this.Bounds()) { this.checkbox.SetFocused(true) this.checkbox.Toggle() diff --git a/swatch.go b/swatch.go index 6547b28..2a4c7da 100644 --- a/swatch.go +++ b/swatch.go @@ -171,23 +171,23 @@ func (this *Swatch) userSetValue (value color.Color) { } func (this *Swatch) handleKeyDown (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } + if !isClickingKey(key) { return false } this.Choose() return true } func (this *Swatch) handleKeyUp (key input.Key, numberPad bool) bool { - if key != input.KeyEnter && key != input.Key(' ') { return false } + if !isClickingKey(key) { return false } return true } func (this *Swatch) handleButtonDown (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } return true } func (this *Swatch) handleButtonUp (button input.Button) bool { - if button != input.ButtonLeft { return false } + if !isClickingButton(button) { return false } if this.Window().MousePosition().In(this.Bounds()) { this.Choose() } diff --git a/textinput.go b/textinput.go index 3805106..9724ca6 100644 --- a/textinput.go +++ b/textinput.go @@ -87,7 +87,7 @@ func (this *TextInput) handleKeyDown (key input.Key, numpad bool) bool { } () switch { - case key == input.KeyEnter: + case isConfirmationKey(key): this.on.confirm.Broadcast() return true case key == input.KeyBackspace: @@ -114,7 +114,7 @@ func (this *TextInput) handleKeyDown (key input.Key, numpad bool) bool { func (this *TextInput) handleKeyUp (key input.Key, numpad bool) bool { modifiers := this.Window().Modifiers() switch { - case key == input.KeyEnter: + case isConfirmationKey(key): return true case key == input.KeyBackspace: return true