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, " ")
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user