| 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 part of charted.core.scales; | 8 part of charted.core.scales; |
| 9 | 9 |
| 10 class _OrdinalScale implements OrdinalScale { | 10 class _OrdinalScale implements OrdinalScale { |
| 11 final _index = new Map<dynamic, int>(); | 11 final _index = new Map<dynamic, int>(); |
| 12 | 12 |
| 13 List _domain = []; | 13 List _domain = []; |
| 14 List _range = []; | 14 List _range = []; |
| 15 num _rangeBand = 0; | 15 num _rangeBand = 0; |
| 16 Extent _rangeExtent; | 16 Extent _rangeExtent; |
| 17 Function _reset; | 17 Function _reset; |
| 18 | 18 |
| 19 _OrdinalScale(); | 19 _OrdinalScale(); |
| 20 | 20 |
| 21 _OrdinalScale._clone(_OrdinalScale source) | 21 _OrdinalScale._clone(_OrdinalScale source) |
| 22 : _domain = source._domain, | 22 : _domain = new List.from(source._domain), |
| 23 _range = source._range, | 23 _range = new List.from(source._range), |
| 24 _reset = source._reset, | 24 _reset = source._reset, |
| 25 _rangeExtent = source._rangeExtent, | 25 _rangeExtent = source._rangeExtent, |
| 26 _rangeBand = source._rangeBand { | 26 _rangeBand = source._rangeBand { |
| 27 _index.addAll(source._index); | 27 _index.addAll(source._index); |
| 28 } | 28 } |
| 29 | 29 |
| 30 @override | 30 @override |
| 31 scale(dynamic value) { | 31 scale(dynamic value) { |
| 32 if (!_index.containsKey(value)) { | 32 if (!_index.containsKey(value)) { |
| 33 _index[value] = domain.length; | 33 _index[value] = domain.length; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 s._rangeExtent = null; | 113 s._rangeExtent = null; |
| 114 }; | 114 }; |
| 115 scale._reset(scale); | 115 scale._reset(scale); |
| 116 } | 116 } |
| 117 | 117 |
| 118 static void _setRangePoints( | 118 static void _setRangePoints( |
| 119 _OrdinalScale scale, Iterable range, double padding) { | 119 _OrdinalScale scale, Iterable range, double padding) { |
| 120 scale._reset = (_OrdinalScale s) { | 120 scale._reset = (_OrdinalScale s) { |
| 121 var start = range.first, | 121 var start = range.first, |
| 122 stop = range.last, | 122 stop = range.last, |
| 123 step = (stop - start) / (s.domain.length - 1 + padding); | 123 step = s.domain.length > 1 |
| 124 ? (stop - start - 2 * padding) / (s.domain.length - 1) |
| 125 : 0; |
| 124 | 126 |
| 125 s._range = s._steps( | 127 s._range = s._steps( |
| 126 s.domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, | 128 s.domain.length < 2 ? (start + stop) / 2 : start + padding, step); |
| 127 step); | |
| 128 s._rangeBand = 0; | 129 s._rangeBand = 0; |
| 129 s._rangeExtent = new Extent(start, stop); | 130 s._rangeExtent = new Extent(start, stop); |
| 130 }; | 131 }; |
| 131 if (scale.domain.isNotEmpty) { | 132 if (scale.domain.isNotEmpty) { |
| 132 scale._reset(scale); | 133 scale._reset(scale); |
| 133 } | 134 } |
| 134 } | 135 } |
| 135 | 136 |
| 136 static void _setRangeBands(_OrdinalScale scale, Iterable range, | 137 static void _setRangeBands(_OrdinalScale scale, Iterable range, |
| 137 double padding, double outerPadding) { | 138 double padding, double outerPadding) { |
| 138 scale._reset = (_OrdinalScale s) { | 139 scale._reset = (_OrdinalScale s) { |
| 139 var start = range.first, | 140 var start = range.first, |
| 140 stop = range.last, | 141 stop = range.last, |
| 141 step = (stop - start) / s.domain.length - padding + 2 * outerPadding; | 142 step = (stop - start - 2 * outerPadding) / |
| 143 (s.domain.length > 1 |
| 144 ? (s.domain.length - padding) |
| 145 : 1); |
| 142 | 146 |
| 143 s._range = s._steps(start + step * outerPadding, step); | 147 s._range = s._steps(start + step * outerPadding, step); |
| 144 s._rangeBand = step * (1 - padding); | 148 s._rangeBand = step * (1 - padding); |
| 145 s._rangeExtent = new Extent(start, stop); | 149 s._rangeExtent = new Extent(start, stop); |
| 146 }; | 150 }; |
| 147 if (scale.domain.isNotEmpty) { | 151 if (scale.domain.isNotEmpty) { |
| 148 scale._reset(scale); | 152 scale._reset(scale); |
| 149 } | 153 } |
| 150 } | 154 } |
| 151 | 155 |
| 152 static void _setRangeRoundBands(_OrdinalScale scale, Iterable range, | 156 static void _setRangeRoundBands(_OrdinalScale scale, Iterable range, |
| 153 double padding, double outerPadding) { | 157 double padding, double outerPadding) { |
| 154 scale._reset = (_OrdinalScale s) { | 158 scale._reset = (_OrdinalScale s) { |
| 155 var start = range.first, | 159 var start = range.first, |
| 156 stop = range.last, | 160 stop = range.last, |
| 157 step = | 161 step = |
| 158 ((stop - start) / (s.domain.length - padding + 2 * outerPadding)) | 162 ((stop - start - 2 * outerPadding) / |
| 159 .floor(), | 163 (s.domain.length > 1 |
| 160 error = stop - start - (s.domain.length - padding) * step; | 164 ? (s.domain.length - padding) |
| 165 : 1)).floor(); |
| 161 | 166 |
| 162 s._range = s._steps(start + (error / 2).round(), step); | 167 s._range = s._steps(start + outerPadding, step); |
| 163 s._rangeBand = (step * (1 - padding)).round(); | 168 s._rangeBand = (step * (1 - padding)).round(); |
| 164 s._rangeExtent = new Extent(start, stop); | 169 s._rangeExtent = new Extent(start, stop); |
| 165 }; | 170 }; |
| 166 if (scale.domain.isNotEmpty) { | 171 if (scale.domain.isNotEmpty) { |
| 167 scale._reset(scale); | 172 scale._reset(scale); |
| 168 } | 173 } |
| 169 } | 174 } |
| 170 | 175 |
| 171 // | 176 // |
| 172 // Properties that are valid only on quantitative scales. | 177 // Properties that are valid only on quantitative scales. |
| 173 // | 178 // |
| 174 | |
| 175 bool clamp; | 179 bool clamp; |
| 176 bool nice; | 180 bool nice; |
| 177 bool rounded; | 181 bool rounded; |
| 178 int ticksCount; | 182 int ticksCount; |
| 183 int forcedTicksCount; |
| 179 } | 184 } |
| OLD | NEW |