| OLD | NEW |
| 1 // | 1 // |
| 2 // Copyright 2014 Google Inc. All rights reserved. | 2 // Copyright 2014 Google Inc. All rights reserved. |
| 3 // | 3 // |
| 4 // Use of this source code is governed by a BSD-style | 4 // Use of this source code is governed by a BSD-style |
| 5 // license that can be found in the LICENSE file or at | 5 // license that can be found in the LICENSE file or at |
| 6 // https://developers.google.com/open-source/licenses/bsd | 6 // https://developers.google.com/open-source/licenses/bsd |
| 7 // | 7 // |
| 8 | 8 |
| 9 part of charted.charts; | 9 part of charted.charts; |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 var rows = new List() | 40 var rows = new List() |
| 41 ..addAll(area.data.rows.map((e) => new List.generate( | 41 ..addAll(area.data.rows.map((e) => new List.generate( |
| 42 measuresCount, (i) => e[series.measures.elementAt(i)]))); | 42 measuresCount, (i) => e[series.measures.elementAt(i)]))); |
| 43 | 43 |
| 44 var dimensionVals = area.data.rows | 44 var dimensionVals = area.data.rows |
| 45 .map((row) => row.elementAt(area.config.dimensions.first)) | 45 .map((row) => row.elementAt(area.config.dimensions.first)) |
| 46 .toList(); | 46 .toList(); |
| 47 | 47 |
| 48 var bars = new OrdinalScale() | 48 var bars = new OrdinalScale() |
| 49 ..domain = new Range(series.measures.length).toList() | 49 ..domain = new Range(series.measures.length).toList() |
| 50 ..rangeRoundBands([0, dimensionScale.rangeBand]); | 50 ..rangeRoundBands([0, (dimensionScale as OrdinalScale).rangeBand]); |
| 51 | 51 |
| 52 // Create and update the bar groups. | 52 // Create and update the bar groups. |
| 53 | 53 |
| 54 var groups = root.selectAll('.bar-rdr-rowgroup').data(rows); | 54 var groups = root.selectAll('.bar-rdr-rowgroup').data(rows); |
| 55 var animateBarGroups = alwaysAnimate || !groups.isEmpty; | 55 var animateBarGroups = alwaysAnimate || !groups.isEmpty; |
| 56 | 56 |
| 57 groups.enter.append('g') | 57 groups.enter.append('g') |
| 58 ..classed('bar-rdr-rowgroup') | 58 ..classed('bar-rdr-rowgroup') |
| 59 ..attrWithCallback( | 59 ..attrWithCallback( |
| 60 'transform', | 60 'transform', |
| (...skipping 27 matching lines...) Expand all Loading... |
| 88 var bar = | 88 var bar = |
| 89 groups.selectAll('.bar-rdr-bar').dataWithCallback((d, i, c) => rows[i]), | 89 groups.selectAll('.bar-rdr-bar').dataWithCallback((d, i, c) => rows[i]), |
| 90 scaled0 = measureScale.scale(0).round(); | 90 scaled0 = measureScale.scale(0).round(); |
| 91 | 91 |
| 92 var getBarLength = (d) { | 92 var getBarLength = (d) { |
| 93 var scaledVal = measureScale.scale(d).round(), | 93 var scaledVal = measureScale.scale(d).round(), |
| 94 ht = verticalBars | 94 ht = verticalBars |
| 95 ? (d >= 0 ? scaled0 - scaledVal : scaledVal - scaled0) | 95 ? (d >= 0 ? scaled0 - scaledVal : scaledVal - scaled0) |
| 96 : (d >= 0 ? scaledVal - scaled0 : scaled0 - scaledVal); | 96 : (d >= 0 ? scaledVal - scaled0 : scaled0 - scaledVal); |
| 97 ht = ht - strokeWidth; | 97 ht = ht - strokeWidth; |
| 98 return (ht < 0) ? 0 : ht; | 98 |
| 99 // If bar would be scaled to 0 height but data is not 0, render bar |
| 100 // at 1 pixel so user can see and hover over to see the data. |
| 101 return (ht < 0) ? 1 : ht; |
| 99 }; | 102 }; |
| 100 var getBarPos = (d) { | 103 var getBarPos = (d) { |
| 101 var scaledVal = measureScale.scale(d).round(); | 104 var scaledVal = measureScale.scale(d).round(); |
| 105 |
| 106 // If bar would be scaled to 0 height but data is not 0, reserve 1 pixel |
| 107 // height plus strokeWidthOffset to position the bar. |
| 108 if (scaledVal == scaled0) { |
| 109 return verticalBars |
| 110 ? d > 0 |
| 111 ? scaled0 - 1 - strokeWidthOffset |
| 112 : scaled0 + strokeWidthOffset |
| 113 : d > 0 |
| 114 ? scaled0 + strokeWidthOffset |
| 115 : scaled0 - 1 - strokeWidthOffset; |
| 116 } |
| 102 return verticalBars | 117 return verticalBars |
| 103 ? (d >= 0 ? scaledVal : scaled0) + strokeWidthOffset | 118 ? (d >= 0 ? scaledVal : scaled0) + strokeWidthOffset |
| 104 : (d >= 0 ? scaled0 : scaledVal) + strokeWidthOffset; | 119 : (d >= 0 ? scaled0 : scaledVal) + strokeWidthOffset; |
| 105 }; | 120 }; |
| 106 var buildPath = (d, int i, bool animate) { | 121 var buildPath = (d, int i, bool animate) { |
| 122 // If data is null or 0, an empty path for the bar is returned directly. |
| 107 if (d == null || d == 0) return ''; | 123 if (d == null || d == 0) return ''; |
| 108 if (verticalBars) { | 124 if (verticalBars) { |
| 109 var fn = d > 0 ? topRoundedRect : bottomRoundedRect; | 125 var fn = d > 0 ? topRoundedRect : bottomRoundedRect; |
| 110 return fn( | 126 return fn( |
| 111 bars.scale(i).toInt() + strokeWidthOffset, | 127 bars.scale(i).toInt() + strokeWidthOffset, |
| 112 animate ? rect.height : getBarPos(d), | 128 animate ? rect.height : getBarPos(d), |
| 113 barWidth, | 129 barWidth, |
| 114 animate ? 0 : getBarLength(d), | 130 animate ? 0 : getBarLength(d), |
| 115 RADIUS); | 131 RADIUS); |
| 116 } else { | 132 } else { |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 } | 247 } |
| 232 | 248 |
| 233 void _event(StreamController controller, data, int index, Element e) { | 249 void _event(StreamController controller, data, int index, Element e) { |
| 234 if (controller == null) return; | 250 if (controller == null) return; |
| 235 var rowStr = e.parent.dataset['row']; | 251 var rowStr = e.parent.dataset['row']; |
| 236 var row = rowStr != null ? int.parse(rowStr) : null; | 252 var row = rowStr != null ? int.parse(rowStr) : null; |
| 237 controller.add(new DefaultChartEventImpl(scope.event, area, series, row, | 253 controller.add(new DefaultChartEventImpl(scope.event, area, series, row, |
| 238 series.measures.elementAt(index), data)); | 254 series.measures.elementAt(index), data)); |
| 239 } | 255 } |
| 240 } | 256 } |
| OLD | NEW |