Swatch no longer embeds tomo.CanvasBox
This commit is contained in:
parent
d9d758b5fc
commit
32eae0bcca
46
swatch.go
46
swatch.go
@ -10,12 +10,14 @@ import "git.tebibyte.media/tomo/tomo/canvas"
|
|||||||
import "git.tebibyte.media/tomo/objects/layouts"
|
import "git.tebibyte.media/tomo/objects/layouts"
|
||||||
import "git.tebibyte.media/tomo/objects/internal"
|
import "git.tebibyte.media/tomo/objects/internal"
|
||||||
|
|
||||||
|
var _ tomo.Object = new(Swatch)
|
||||||
|
|
||||||
// Swatch displays a color, allowing the user to edit it by clicking on it.
|
// Swatch displays a color, allowing the user to edit it by clicking on it.
|
||||||
type Swatch struct {
|
type Swatch struct {
|
||||||
tomo.CanvasBox
|
box tomo.CanvasBox
|
||||||
value color.Color
|
value color.Color
|
||||||
editing bool
|
editing bool
|
||||||
label string
|
label string
|
||||||
on struct {
|
on struct {
|
||||||
valueChange event.FuncBroadcaster
|
valueChange event.FuncBroadcaster
|
||||||
confirm event.FuncBroadcaster
|
confirm event.FuncBroadcaster
|
||||||
@ -25,20 +27,32 @@ type Swatch struct {
|
|||||||
// NewSwatch creates a new swatch with the given color.
|
// NewSwatch creates a new swatch with the given color.
|
||||||
func NewSwatch (value color.Color) *Swatch {
|
func NewSwatch (value color.Color) *Swatch {
|
||||||
swatch := &Swatch {
|
swatch := &Swatch {
|
||||||
CanvasBox: tomo.NewCanvasBox(),
|
box: tomo.NewCanvasBox(),
|
||||||
}
|
}
|
||||||
swatch.SetRole(tomo.R("objects", "Swatch"))
|
swatch.box.SetRole(tomo.R("objects", "Swatch"))
|
||||||
swatch.SetDrawer(swatch)
|
swatch.box.SetDrawer(swatch)
|
||||||
swatch.SetValue(value)
|
swatch.SetValue(value)
|
||||||
|
|
||||||
swatch.OnButtonDown(swatch.handleButtonDown)
|
swatch.box.OnButtonDown(swatch.handleButtonDown)
|
||||||
swatch.OnButtonUp(swatch.handleButtonUp)
|
swatch.box.OnButtonUp(swatch.handleButtonUp)
|
||||||
swatch.OnKeyDown(swatch.handleKeyDown)
|
swatch.box.OnKeyDown(swatch.handleKeyDown)
|
||||||
swatch.OnKeyUp(swatch.handleKeyUp)
|
swatch.box.OnKeyUp(swatch.handleKeyUp)
|
||||||
swatch.SetFocusable(true)
|
swatch.box.SetFocusable(true)
|
||||||
return swatch
|
return swatch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBox returns the underlying box.
|
||||||
|
func (this *Swatch) GetBox () tomo.Box {
|
||||||
|
return this.box
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetFocused sets whether or not this swatch has keyboard focus. If set to
|
||||||
|
// true, this method will steal focus away from whichever object currently has
|
||||||
|
// focus.
|
||||||
|
func (this *Swatch) SetFocused (focused bool) {
|
||||||
|
this.box.SetFocused(focused)
|
||||||
|
}
|
||||||
|
|
||||||
// Value returns the color of the swatch.
|
// Value returns the color of the swatch.
|
||||||
func (this *Swatch) Value () color.Color {
|
func (this *Swatch) Value () color.Color {
|
||||||
return this.value
|
return this.value
|
||||||
@ -48,7 +62,7 @@ func (this *Swatch) Value () color.Color {
|
|||||||
func (this *Swatch) SetValue (value color.Color) {
|
func (this *Swatch) SetValue (value color.Color) {
|
||||||
this.value = value
|
this.value = value
|
||||||
if value == nil { value = color.Transparent }
|
if value == nil { value = color.Transparent }
|
||||||
this.Invalidate()
|
this.box.Invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnValueChange specifies a function to be called when the swatch's color
|
// OnValueChange specifies a function to be called when the swatch's color
|
||||||
@ -75,7 +89,7 @@ func (this *Swatch) Choose () {
|
|||||||
|
|
||||||
var err error
|
var err error
|
||||||
var window tomo.Window
|
var window tomo.Window
|
||||||
if parent := this.Window(); parent != nil {
|
if parent := this.box.Window(); parent != nil {
|
||||||
window, err = parent.NewChild(image.Rectangle { })
|
window, err = parent.NewChild(image.Rectangle { })
|
||||||
} else {
|
} else {
|
||||||
window, err = tomo.NewWindow(image.Rectangle { })
|
window, err = tomo.NewWindow(image.Rectangle { })
|
||||||
@ -155,13 +169,13 @@ func (this *Swatch) Draw (can canvas.Canvas) {
|
|||||||
// transparency slash
|
// transparency slash
|
||||||
pen.Stroke(color.RGBA { R: 255, A: 255 })
|
pen.Stroke(color.RGBA { R: 255, A: 255 })
|
||||||
pen.StrokeWeight(1)
|
pen.StrokeWeight(1)
|
||||||
pen.Path(this.Bounds().Min, this.Bounds().Max)
|
pen.Path(this.box.Bounds().Min, this.box.Bounds().Max)
|
||||||
|
|
||||||
// color
|
// color
|
||||||
if this.value != nil {
|
if this.value != nil {
|
||||||
pen.StrokeWeight(0)
|
pen.StrokeWeight(0)
|
||||||
pen.Fill(this.value)
|
pen.Fill(this.value)
|
||||||
pen.Rectangle(this.Bounds())
|
pen.Rectangle(this.box.Bounds())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +202,7 @@ func (this *Swatch) handleButtonDown (button input.Button) bool {
|
|||||||
|
|
||||||
func (this *Swatch) handleButtonUp (button input.Button) bool {
|
func (this *Swatch) handleButtonUp (button input.Button) bool {
|
||||||
if !isClickingButton(button) { return false }
|
if !isClickingButton(button) { return false }
|
||||||
if this.Window().MousePosition().In(this.Bounds()) {
|
if this.box.Window().MousePosition().In(this.box.Bounds()) {
|
||||||
this.Choose()
|
this.Choose()
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
Loading…
Reference in New Issue
Block a user