Compare commits
2 Commits
73a666a216
...
6a5e6d0753
Author | SHA1 | Date | |
---|---|---|---|
6a5e6d0753 | |||
39a9d377d1 |
93
color.go
93
color.go
@ -2,6 +2,7 @@ package lifx
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
@ -19,41 +20,73 @@ type (
|
||||
}
|
||||
|
||||
HSBKColor struct {
|
||||
H float32 `json:"hue"`
|
||||
S float32 `json:"saturation"`
|
||||
B float32 `json:"brightness"`
|
||||
K int16 `json:"kelvin"`
|
||||
H *float32 `json:"hue"`
|
||||
S *float32 `json:"saturation"`
|
||||
B *float32 `json:"brightness"`
|
||||
K *int16 `json:"kelvin"`
|
||||
}
|
||||
|
||||
NamedColor string
|
||||
)
|
||||
|
||||
var (
|
||||
Candlelight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 1500} }
|
||||
Sunset = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 2000} }
|
||||
UltraWarm = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 2500} }
|
||||
Incandescent = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 2700} }
|
||||
Warm = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 3000} }
|
||||
Cool = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 4000} }
|
||||
CoolDaylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 4500} }
|
||||
SoftDaylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 5000} }
|
||||
Daylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 5600} }
|
||||
NoonDaylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 6000} }
|
||||
BrightDaylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 6500} }
|
||||
CloudDaylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 7000} }
|
||||
BlueDaylight = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 7500} }
|
||||
BlueOvercast = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 8000} }
|
||||
BlueIce = func() *HSBKColor { return &HSBKColor{H: 0, S: 0, K: 9000} }
|
||||
Candlelight = func() HSBKColor { c, _ := NewWhite(1500); return c }
|
||||
Sunset = func() HSBKColor { c, _ := NewWhite(2000); return c }
|
||||
UltraWarm = func() HSBKColor { c, _ := NewWhite(2500); return c }
|
||||
Incandescent = func() HSBKColor { c, _ := NewWhite(2700); return c }
|
||||
Warm = func() HSBKColor { c, _ := NewWhite(3000); return c }
|
||||
Cool = func() HSBKColor { c, _ := NewWhite(4000); return c }
|
||||
CoolDaylight = func() HSBKColor { c, _ := NewWhite(4500); return c }
|
||||
SoftDaylight = func() HSBKColor { c, _ := NewWhite(5000); return c }
|
||||
Daylight = func() HSBKColor { c, _ := NewWhite(5600); return c }
|
||||
NoonDaylight = func() HSBKColor { c, _ := NewWhite(6000); return c }
|
||||
BrightDaylight = func() HSBKColor { c, _ := NewWhite(6500); return c }
|
||||
CloudDaylight = func() HSBKColor { c, _ := NewWhite(7000); return c }
|
||||
BlueDaylight = func() HSBKColor { c, _ := NewWhite(7500); return c }
|
||||
BlueOvercast = func() HSBKColor { c, _ := NewWhite(8000); return c }
|
||||
BlueIce = func() HSBKColor { c, _ := NewWhite(9000); return c }
|
||||
)
|
||||
|
||||
func NewRGBColor(r, g, b uint8) (*RGBColor, error) {
|
||||
return &RGBColor{R: r, G: g, B: b}, nil
|
||||
}
|
||||
|
||||
func NewHSBKColor() HSBKColor {
|
||||
func NewHSBColor(h, s, b float32) (HSBKColor, error) {
|
||||
var c HSBKColor
|
||||
c.H, c.S, c.B, c.K = -1, -1, -1, -1
|
||||
return c
|
||||
|
||||
if h < 0 || h > 360 {
|
||||
return c, errors.New("hue must be between 0.0-360.0")
|
||||
}
|
||||
if s < 0 || s > 1 {
|
||||
return c, errors.New("saturation must be between 0.0-1.0")
|
||||
}
|
||||
if b < 0 || b > 1 {
|
||||
return c, errors.New("brightness must be between 0.0-1.0")
|
||||
}
|
||||
|
||||
c = HSBKColor{
|
||||
H: Float32Ptr(h),
|
||||
S: Float32Ptr(s),
|
||||
B: Float32Ptr(b),
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func NewWhite(k int16) (HSBKColor, error) {
|
||||
var c HSBKColor
|
||||
|
||||
if k < 1500 || k > 8000 {
|
||||
return c, errors.New("kelvin must be between 1500-9000")
|
||||
}
|
||||
|
||||
c = HSBKColor{
|
||||
H: Float32Ptr(0.0),
|
||||
S: Float32Ptr(0.0),
|
||||
K: Int16Ptr(k),
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (c RGBColor) ColorString() string {
|
||||
@ -66,17 +99,17 @@ func (c RGBColor) Hex() string {
|
||||
|
||||
func (c HSBKColor) ColorString() string {
|
||||
var s []string
|
||||
if c.H >= 0 {
|
||||
s = append(s, fmt.Sprintf("hue:%g", c.H))
|
||||
if c.H != nil {
|
||||
s = append(s, fmt.Sprintf("hue:%g", *c.H))
|
||||
}
|
||||
if c.S >= 0 {
|
||||
s = append(s, fmt.Sprintf("saturation:%g", c.S))
|
||||
if c.S != nil {
|
||||
s = append(s, fmt.Sprintf("saturation:%g", *c.S))
|
||||
}
|
||||
if c.B >= 0 {
|
||||
s = append(s, fmt.Sprintf("brightness:%g", c.B))
|
||||
if c.B != nil {
|
||||
s = append(s, fmt.Sprintf("brightness:%g", *c.B))
|
||||
}
|
||||
if c.K >= 0 {
|
||||
s = append(s, fmt.Sprintf("kelvin:%d", c.K))
|
||||
if c.K != nil {
|
||||
s = append(s, fmt.Sprintf("kelvin:%d", *c.K))
|
||||
}
|
||||
return strings.Join(s, " ")
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user