@@ -47,17 +47,36 @@ defaults._set('global', {
47
47
generateLabels : function ( chart ) {
48
48
var data = chart . data ;
49
49
return helpers . isArray ( data . datasets ) ? data . datasets . map ( function ( dataset , i ) {
50
+ var type = chart . getDatasetMeta ( i ) . type ;
51
+ var options = chart . options ;
52
+ var legendOpts = options . legend ;
53
+ var valueAtIndexOrDefault = helpers . valueAtIndexOrDefault ;
54
+ var valueOrDefault = helpers . valueOrDefault ;
55
+
56
+ var usePointStyle = legendOpts && legendOpts . labels && legendOpts . labels . usePointStyle ;
57
+ var backgroundColor = usePointStyle ? valueAtIndexOrDefault ( dataset . pointBackgroundColor , 0 , dataset . backgroundColor ) : dataset . backgroundColor ;
58
+ var borderWidth = usePointStyle ? valueAtIndexOrDefault ( dataset . pointBorderWidth , 0 , dataset . borderWidth ) : dataset . borderWidth ;
59
+ var borderColor = usePointStyle ? valueAtIndexOrDefault ( dataset . pointBorderColor , 0 , dataset . borderColor ) : dataset . borderColor ;
60
+
61
+ var useLineStyles = ( type === 'line' || type === 'radar' ) && ! usePointStyle ;
62
+ var borderCapStyle = useLineStyles ? dataset . borderCapStyle : 'butt' ;
63
+ var borderDash = useLineStyles ? dataset . borderDash : [ ] ;
64
+ var borderDashOffset = useLineStyles ? dataset . borderDashOffset : 0 ;
65
+ var borderJoinStyle = useLineStyles ? dataset . borderJoinStyle : 'miter' ;
66
+
67
+ var elementOpts = options . elements [ useLineStyles ? 'line' : type === 'bar' ? 'rectangle' : 'point' ] ;
68
+
50
69
return {
51
70
text : dataset . label ,
52
- fillStyle : ( ! helpers . isArray ( dataset . backgroundColor ) ? dataset . backgroundColor : dataset . backgroundColor [ 0 ] ) ,
71
+ fillStyle : valueAtIndexOrDefault ( backgroundColor , 0 , elementOpts . backgroundColor ) ,
53
72
hidden : ! chart . isDatasetVisible ( i ) ,
54
- lineCap : dataset . borderCapStyle ,
55
- lineDash : dataset . borderDash ,
56
- lineDashOffset : dataset . borderDashOffset ,
57
- lineJoin : dataset . borderJoinStyle ,
58
- lineWidth : dataset . borderWidth ,
59
- strokeStyle : dataset . borderColor ,
60
- pointStyle : dataset . pointStyle ,
73
+ lineCap : valueOrDefault ( borderCapStyle , elementOpts . borderCapStyle ) ,
74
+ lineDash : valueOrDefault ( borderDash , elementOpts . borderDash ) ,
75
+ lineDashOffset : valueOrDefault ( borderDashOffset , elementOpts . borderDashOffset ) ,
76
+ lineJoin : valueOrDefault ( borderJoinStyle , elementOpts . borderJoinStyle ) ,
77
+ lineWidth : valueAtIndexOrDefault ( borderWidth , 0 , elementOpts . borderWidth ) ,
78
+ strokeStyle : valueAtIndexOrDefault ( borderColor , 0 , elementOpts . borderColor ) ,
79
+ pointStyle : valueAtIndexOrDefault ( dataset . pointStyle , 0 , elementOpts . pointStyle ) ,
61
80
62
81
// Below is extra data used for toggling the datasets
63
82
datasetIndex : i
@@ -383,10 +402,10 @@ var Legend = Element.extend({
383
402
helpers . canvas . drawPoint ( ctx , legendItem . pointStyle , radius , centerX , centerY ) ;
384
403
} else {
385
404
// Draw box as legend symbol
405
+ ctx . fillRect ( x , y , boxWidth , fontSize ) ;
386
406
if ( ! isLineWidthZero ) {
387
407
ctx . strokeRect ( x , y , boxWidth , fontSize ) ;
388
408
}
389
- ctx . fillRect ( x , y , boxWidth , fontSize ) ;
390
409
}
391
410
392
411
ctx . restore ( ) ;
0 commit comments