diff --git a/chart_option_test.go b/chart_option_test.go
index 6f331b3..ff17750 100644
--- a/chart_option_test.go
+++ b/chart_option_test.go
@@ -277,7 +277,7 @@ func TestBarRender(t *testing.T) {
assert.Nil(err)
data, err := p.Bytes()
assert.Nil(err)
- assert.Equal("", string(data))
+ assert.Equal("", string(data))
}
func TestHorizontalBarRender(t *testing.T) {
diff --git a/echarts_test.go b/echarts_test.go
index 5c2dbad..2ce1715 100644
--- a/echarts_test.go
+++ b/echarts_test.go
@@ -578,5 +578,5 @@ func TestRenderEChartsToSVG(t *testing.T) {
]
}`)
assert.Nil(err)
- assert.Equal("", string(data))
+ assert.Equal("", string(data))
}
diff --git a/mark_point.go b/mark_point.go
index f6c93f3..fd8a88b 100644
--- a/mark_point.go
+++ b/mark_point.go
@@ -24,7 +24,6 @@ package charts
import (
"github.com/golang/freetype/truetype"
- "github.com/wcharczuk/go-chart/v2/drawing"
)
// NewMarkPoint returns a series mark point
@@ -78,16 +77,15 @@ func (m *markPointPainter) Render() (Box, error) {
symbolSize = 30
}
textStyle := Style{
- FontColor: drawing.Color{
- R: 238,
- G: 238,
- B: 238,
- A: 255,
- },
FontSize: labelFontSize,
StrokeWidth: 1,
Font: opt.Font,
}
+ if isLightColor(opt.FillColor) {
+ textStyle.FontColor = defaultLightFontColor
+ } else {
+ textStyle.FontColor = defaultDarkFontColor
+ }
painter.OverrideDrawingStyle(Style{
FillColor: opt.FillColor,
}).OverrideTextStyle(textStyle)
diff --git a/theme.go b/theme.go
index 17706ad..a6d624f 100644
--- a/theme.go
+++ b/theme.go
@@ -76,6 +76,19 @@ const defaultFontSize = 12.0
var defaultTheme ColorPalette
+var defaultLightFontColor = drawing.Color{
+ R: 70,
+ G: 70,
+ B: 70,
+ A: 255,
+}
+var defaultDarkFontColor = drawing.Color{
+ R: 238,
+ G: 238,
+ B: 238,
+ A: 255,
+}
+
func init() {
echartSeriesColors := []Color{
parseColor("#5470c6"),
diff --git a/util.go b/util.go
index f8a451e..b333e6d 100644
--- a/util.go
+++ b/util.go
@@ -262,3 +262,10 @@ func getPolygonPoints(center Point, radius float64, sides int) []Point {
}
return points
}
+
+func isLightColor(c Color) bool {
+ r := float64(c.R) * float64(c.R) * 0.299
+ g := float64(c.G) * float64(c.G) * 0.587
+ b := float64(c.B) * float64(c.B) * 0.114
+ return math.Sqrt(r+g+b) > 127.5
+}
diff --git a/util_test.go b/util_test.go
index 7c2ab2f..62fd08d 100644
--- a/util_test.go
+++ b/util_test.go
@@ -189,3 +189,35 @@ func TestParseColor(t *testing.T) {
A: 250,
}, c)
}
+
+func TestIsLightColor(t *testing.T) {
+ assert := assert.New(t)
+
+ assert.True(isLightColor(drawing.Color{
+ R: 255,
+ G: 255,
+ B: 255,
+ }))
+ assert.True(isLightColor(drawing.Color{
+ R: 145,
+ G: 204,
+ B: 117,
+ }))
+
+ assert.False(isLightColor(drawing.Color{
+ R: 88,
+ G: 112,
+ B: 198,
+ }))
+
+ assert.False(isLightColor(drawing.Color{
+ R: 0,
+ G: 0,
+ B: 0,
+ }))
+ assert.False(isLightColor(drawing.Color{
+ R: 16,
+ G: 12,
+ B: 42,
+ }))
+}