Button now conforms to new API
This commit is contained in:
		
							parent
							
								
									afd125c083
								
							
						
					
					
						commit
						5ca4d0be6e
					
				@ -13,6 +13,7 @@ type Button struct {
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	pressed  bool
 | 
						pressed  bool
 | 
				
			||||||
	enabled  bool
 | 
						enabled  bool
 | 
				
			||||||
 | 
						selected bool
 | 
				
			||||||
	onClick func ()
 | 
						onClick func ()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	text   string
 | 
						text   string
 | 
				
			||||||
@ -24,36 +25,18 @@ func NewButton (text string) (element *Button) {
 | 
				
			|||||||
	element = &Button { enabled: true }
 | 
						element = &Button { enabled: true }
 | 
				
			||||||
	element.Core, element.core = core.NewCore(element)
 | 
						element.Core, element.core = core.NewCore(element)
 | 
				
			||||||
	element.drawer.SetFace(theme.FontFaceRegular())
 | 
						element.drawer.SetFace(theme.FontFaceRegular())
 | 
				
			||||||
	element.core.SetSelectable(true)
 | 
					 | 
				
			||||||
	element.SetText(text)
 | 
						element.SetText(text)
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Handle handles an event.
 | 
					func (element *Button) Resize (width, height int) {
 | 
				
			||||||
func (element *Button) Handle (event tomo.Event) {
 | 
						element.core.AllocateCanvas(width, height)
 | 
				
			||||||
	switch event.(type) {
 | 
					 | 
				
			||||||
	case tomo.EventResize:
 | 
					 | 
				
			||||||
		resizeEvent := event.(tomo.EventResize)
 | 
					 | 
				
			||||||
		element.core.AllocateCanvas (
 | 
					 | 
				
			||||||
			resizeEvent.Width,
 | 
					 | 
				
			||||||
			resizeEvent.Height)
 | 
					 | 
				
			||||||
	element.draw()
 | 
						element.draw()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case tomo.EventMouseDown:
 | 
					func (element *Button) HandleMouseDown (x, y int, button tomo.Button) {
 | 
				
			||||||
		if !element.enabled { break }
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		mouseDownEvent := event.(tomo.EventMouseDown)
 | 
					 | 
				
			||||||
	element.Select()
 | 
						element.Select()
 | 
				
			||||||
		if mouseDownEvent.Button != tomo.ButtonLeft { break }
 | 
						if button != tomo.ButtonLeft { return }
 | 
				
			||||||
		element.pressed = true
 | 
					 | 
				
			||||||
		if element.core.HasImage() {
 | 
					 | 
				
			||||||
			element.draw()
 | 
					 | 
				
			||||||
			element.core.PushAll()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case tomo.EventKeyDown:
 | 
					 | 
				
			||||||
		keyDownEvent := event.(tomo.EventKeyDown)
 | 
					 | 
				
			||||||
		if keyDownEvent.Key == tomo.KeyEnter {
 | 
					 | 
				
			||||||
	element.pressed = true
 | 
						element.pressed = true
 | 
				
			||||||
	if element.core.HasImage() {
 | 
						if element.core.HasImage() {
 | 
				
			||||||
		element.draw()
 | 
							element.draw()
 | 
				
			||||||
@ -61,27 +44,41 @@ func (element *Button) Handle (event tomo.Event) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case tomo.EventMouseUp:
 | 
					func (element *Button) HandleMouseUp (x, y int, button tomo.Button) {
 | 
				
			||||||
		if !element.enabled { break }
 | 
						if button != tomo.ButtonLeft { return }
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
		mouseUpEvent := event.(tomo.EventMouseUp)
 | 
					 | 
				
			||||||
		if mouseUpEvent.Button != tomo.ButtonLeft { break }
 | 
					 | 
				
			||||||
	element.pressed = false
 | 
						element.pressed = false
 | 
				
			||||||
	if element.core.HasImage() {
 | 
						if element.core.HasImage() {
 | 
				
			||||||
		element.draw()
 | 
							element.draw()
 | 
				
			||||||
		element.core.PushAll()
 | 
							element.core.PushAll()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		within := image.Point { mouseUpEvent.X, mouseUpEvent.Y }.
 | 
						within := image.Point { x, y }.
 | 
				
			||||||
		In(element.Bounds())
 | 
							In(element.Bounds())
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	if within && element.onClick != nil {
 | 
						if within && element.onClick != nil {
 | 
				
			||||||
		element.onClick()
 | 
							element.onClick()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case tomo.EventKeyUp:
 | 
					func (element *Button) HandleMouseMove (x, y int) { }
 | 
				
			||||||
		keyDownEvent := event.(tomo.EventKeyUp)
 | 
					func (element *Button) HandleScroll (x, y int, deltaX, deltaY float64) { }
 | 
				
			||||||
		if keyDownEvent.Key == tomo.KeyEnter && element.pressed {
 | 
					
 | 
				
			||||||
 | 
					func (element *Button) HandleKeyDown (
 | 
				
			||||||
 | 
						key tomo.Key,
 | 
				
			||||||
 | 
						modifiers tomo.Modifiers,
 | 
				
			||||||
 | 
						repeated bool,
 | 
				
			||||||
 | 
					) {
 | 
				
			||||||
 | 
						if key == tomo.KeyEnter {
 | 
				
			||||||
 | 
							element.pressed = true
 | 
				
			||||||
 | 
							if element.core.HasImage() {
 | 
				
			||||||
 | 
								element.draw()
 | 
				
			||||||
 | 
								element.core.PushAll()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (element *Button) HandleKeyUp(key tomo.Key, modifiers tomo.Modifiers) {
 | 
				
			||||||
 | 
						if key == tomo.KeyEnter && element.pressed {
 | 
				
			||||||
		element.pressed = false
 | 
							element.pressed = false
 | 
				
			||||||
		if element.core.HasImage() {
 | 
							if element.core.HasImage() {
 | 
				
			||||||
			element.draw()
 | 
								element.draw()
 | 
				
			||||||
@ -91,40 +88,50 @@ func (element *Button) Handle (event tomo.Event) {
 | 
				
			|||||||
			element.onClick()
 | 
								element.onClick()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case tomo.EventSelect:
 | 
					func (element *Button) Selected () (selected bool) {
 | 
				
			||||||
		element.core.SetSelected(true)
 | 
						return element.selected
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (element *Button) Select () {
 | 
				
			||||||
 | 
						element.core.RequestSelection()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (element *Button) HandleSelection (
 | 
				
			||||||
 | 
						direction tomo.SelectionDirection,
 | 
				
			||||||
 | 
					) (
 | 
				
			||||||
 | 
						accepted bool,
 | 
				
			||||||
 | 
					) {
 | 
				
			||||||
 | 
						if direction == tomo.SelectionDirectionNeutral {
 | 
				
			||||||
 | 
							element.selected = true
 | 
				
			||||||
		if element.core.HasImage() {
 | 
							if element.core.HasImage() {
 | 
				
			||||||
			element.draw()
 | 
								element.draw()
 | 
				
			||||||
			element.core.PushAll()
 | 
								element.core.PushAll()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case tomo.EventDeselect:
 | 
					func (element *Button) HandleDeselection () {
 | 
				
			||||||
		element.core.SetSelected(false)
 | 
						element.selected = false
 | 
				
			||||||
	if element.core.HasImage() {
 | 
						if element.core.HasImage() {
 | 
				
			||||||
		element.draw()
 | 
							element.draw()
 | 
				
			||||||
		element.core.PushAll()
 | 
							element.core.PushAll()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
	return
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// OnClick sets the function to be called when the button is clicked.
 | 
					// OnClick sets the function to be called when the button is clicked.
 | 
				
			||||||
func (element *Button) OnClick (callback func ()) {
 | 
					func (element *Button) OnClick (callback func ()) {
 | 
				
			||||||
	element.onClick = callback
 | 
						element.onClick = callback
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Select requests that this button's parent container send it a selection
 | 
					 | 
				
			||||||
// event.
 | 
					 | 
				
			||||||
func (element *Button) Select () {
 | 
					 | 
				
			||||||
	element.core.Select()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SetEnabled sets whether this button can be clicked or not.
 | 
					// SetEnabled sets whether this button can be clicked or not.
 | 
				
			||||||
func (element *Button) SetEnabled (enabled bool) {
 | 
					func (element *Button) SetEnabled (enabled bool) {
 | 
				
			||||||
	if element.enabled == enabled { return }
 | 
						if element.enabled == enabled { return }
 | 
				
			||||||
	element.enabled = enabled
 | 
						element.enabled = enabled
 | 
				
			||||||
	element.core.SetSelectable(enabled)
 | 
					 | 
				
			||||||
	if element.core.HasImage () {
 | 
						if element.core.HasImage () {
 | 
				
			||||||
		element.draw()
 | 
							element.draw()
 | 
				
			||||||
		element.core.PushAll()
 | 
							element.core.PushAll()
 | 
				
			||||||
 | 
				
			|||||||
@ -73,6 +73,13 @@ type CoreControl struct {
 | 
				
			|||||||
	core *Core
 | 
						core *Core
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RequestSelection requests that the element's parent send it a selection
 | 
				
			||||||
 | 
					// event. If the request was granted, it returns true. If it was denied, it
 | 
				
			||||||
 | 
					// returns false.
 | 
				
			||||||
 | 
					func (control CoreControl) RequestSelection () (granted bool) {
 | 
				
			||||||
 | 
						return control.core.hooks.RunSelectionRequest()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// HasImage returns true if the core has an allocated image buffer, and false if
 | 
					// HasImage returns true if the core has an allocated image buffer, and false if
 | 
				
			||||||
// it doesn't.
 | 
					// it doesn't.
 | 
				
			||||||
func (control CoreControl) HasImage () (has bool) {
 | 
					func (control CoreControl) HasImage () (has bool) {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user