@@ -48,17 +48,36 @@ defaults._set('global', {
4848 generateLabels : function ( chart ) {
4949 var data = chart . data ;
5050 return helpers . isArray ( data . datasets ) ? data . datasets . map ( function ( dataset , i ) {
51+ var type = chart . getDatasetMeta ( i ) . type ;
52+ var options = chart . options ;
53+ var legendOpts = options . legend ;
54+ var valueAtIndexOrDefault = helpers . valueAtIndexOrDefault ;
55+ var valueOrDefault = helpers . valueOrDefault ;
56+
57+ var usePointStyle = legendOpts && legendOpts . labels && legendOpts . labels . usePointStyle ;
58+ var backgroundColor = usePointStyle ? valueAtIndexOrDefault ( dataset . pointBackgroundColor , 0 , dataset . backgroundColor ) : dataset . backgroundColor ;
59+ var borderWidth = usePointStyle ? valueAtIndexOrDefault ( dataset . pointBorderWidth , 0 , dataset . borderWidth ) : dataset . borderWidth ;
60+ var borderColor = usePointStyle ? valueAtIndexOrDefault ( dataset . pointBorderColor , 0 , dataset . borderColor ) : dataset . borderColor ;
61+
62+ var useLineStyles = ( type === 'line' || type === 'radar' ) && ! usePointStyle ;
63+ var borderCapStyle = useLineStyles ? dataset . borderCapStyle : 'butt' ;
64+ var borderDash = useLineStyles ? dataset . borderDash : [ ] ;
65+ var borderDashOffset = useLineStyles ? dataset . borderDashOffset : 0 ;
66+ var borderJoinStyle = useLineStyles ? dataset . borderJoinStyle : 'miter' ;
67+
68+ var elementOpts = options . elements [ useLineStyles ? 'line' : type === 'bar' ? 'rectangle' : 'point' ] ;
69+
5170 return {
5271 text : dataset . label ,
53- fillStyle : ( ! helpers . isArray ( dataset . backgroundColor ) ? dataset . backgroundColor : dataset . backgroundColor [ 0 ] ) ,
72+ fillStyle : valueAtIndexOrDefault ( backgroundColor , 0 , elementOpts . backgroundColor ) ,
5473 hidden : ! chart . isDatasetVisible ( i ) ,
55- lineCap : dataset . borderCapStyle ,
56- lineDash : dataset . borderDash ,
57- lineDashOffset : dataset . borderDashOffset ,
58- lineJoin : dataset . borderJoinStyle ,
59- lineWidth : dataset . borderWidth ,
60- strokeStyle : dataset . borderColor ,
61- pointStyle : dataset . pointStyle ,
74+ lineCap : valueOrDefault ( borderCapStyle , elementOpts . borderCapStyle ) ,
75+ lineDash : valueOrDefault ( borderDash , elementOpts . borderDash ) ,
76+ lineDashOffset : valueOrDefault ( borderDashOffset , elementOpts . borderDashOffset ) ,
77+ lineJoin : valueOrDefault ( borderJoinStyle , elementOpts . borderJoinStyle ) ,
78+ lineWidth : valueAtIndexOrDefault ( borderWidth , 0 , elementOpts . borderWidth ) ,
79+ strokeStyle : valueAtIndexOrDefault ( borderColor , 0 , elementOpts . borderColor ) ,
80+ pointStyle : valueAtIndexOrDefault ( dataset . pointStyle , 0 , elementOpts . pointStyle ) ,
6281
6382 // Below is extra data used for toggling the datasets
6483 datasetIndex : i
@@ -377,10 +396,10 @@ var Legend = Element.extend({
377396 helpers . canvas . drawPoint ( ctx , legendItem . pointStyle , radius , centerX , centerY ) ;
378397 } else {
379398 // Draw box as legend symbol
399+ ctx . fillRect ( x , y , boxWidth , fontSize ) ;
380400 if ( lineWidth !== 0 ) {
381401 ctx . strokeRect ( x , y , boxWidth , fontSize ) ;
382402 }
383- ctx . fillRect ( x , y , boxWidth , fontSize ) ;
384403 }
385404
386405 ctx . restore ( ) ;
0 commit comments