diff --git a/internal/style/tss/color_test.go b/internal/style/tss/color_test.go new file mode 100644 index 0000000..694a88e --- /dev/null +++ b/internal/style/tss/color_test.go @@ -0,0 +1,17 @@ +package tss + +import "testing" + +func TestValueColor (test *testing.T) { + testValueColorRGBA(test, 0xFB380CFF, 0xFBFB, 0x3838, 0x0C0C, 0xFFFF) + testValueColorRGBA(test, 0xFB380C00, 0x0000, 0x0000, 0x0000, 0x0000) +} + +func testValueColorRGBA (test *testing.T, col ValueColor, r, g, b, a uint32) { + gr, gg, gb, ga := col.RGBA() + test.Logf("testing RGBA for color #%08X", col) + if gr != r { test.Errorf("r component inequal (%04X != %04X)", gr, r) } + if gg != g { test.Errorf("g component inequal (%04X != %04X)", gg, g) } + if gb != b { test.Errorf("b component inequal (%04X != %04X)", gb, b) } + if ga != a { test.Errorf("a component inequal (%04X != %04X)", ga, a) } +} diff --git a/internal/style/tss/tss.go b/internal/style/tss/tss.go index 7796bb4..35451c0 100644 --- a/internal/style/tss/tss.go +++ b/internal/style/tss/tss.go @@ -35,19 +35,19 @@ func (ValueColor) value () { } func (value ValueColor) RGBA () (r, g, b, a uint32) { // extract components bits := uint32(value) - r = (bits & 0xF000) >> 24 - g = (bits & 0x0F00) >> 16 - b = (bits & 0x00F0) >> 8 - a = (bits & 0x000A) + r = (bits & 0xFF000000) >> 24 + g = (bits & 0x00FF0000) >> 16 + b = (bits & 0x0000FF00) >> 8 + a = (bits & 0x000000FF) // extend to 16 bits per channel r = r << 8 | r g = g << 8 | g b = b << 8 | b a = a << 8 | a // alpha premultiply - r = (r * a) / 256 - g = (g * a) / 256 - b = (b * a) / 256 + r = (r * a) / 0xFFFF + g = (g * a) / 0xFFFF + b = (b * a) / 0xFFFF return }