| 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 |
| 11 abstract class CartesianRendererBase implements CartesianRenderer { | 11 abstract class CartesianRendererBase implements CartesianRenderer { |
| 12 final SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); | 12 final SubscriptionsDisposer _disposer = new SubscriptionsDisposer(); |
| 13 | 13 |
| 14 CartesianArea area; | 14 CartesianArea area; |
| 15 ChartSeries series; | 15 ChartSeries series; |
| 16 ChartTheme theme; | 16 ChartTheme theme; |
| 17 ChartState state; | 17 ChartState state; |
| 18 Rect rect; | 18 Rect rect; |
| 19 | 19 |
| 20 List<int> _columnStateCache; | 20 List<int> _columnStateCache; |
| 21 List<Iterable<String>> _columnStylesCache; | 21 List<Iterable<String>> _columnStylesCache; |
| 22 | 22 |
| 23 final _valueColorCache = new Map<int,String>(); | 23 final _valueColorCache = new Map<int, String>(); |
| 24 final _valueFilterCache = new Map<int,String>(); | 24 final _valueFilterCache = new Map<int, String>(); |
| 25 final _valueStylesCache = new Map<int,Iterable<String>>(); | 25 final _valueStylesCache = new Map<int, Iterable<String>>(); |
| 26 | 26 |
| 27 Element host; | 27 Element host; |
| 28 Selection root; | 28 Selection root; |
| 29 SelectionScope scope; | 29 SelectionScope scope; |
| 30 | 30 |
| 31 StreamController<ChartEvent> mouseOverController; | 31 StreamController<ChartEvent> mouseOverController; |
| 32 StreamController<ChartEvent> mouseOutController; | 32 StreamController<ChartEvent> mouseOutController; |
| 33 StreamController<ChartEvent> mouseClickController; | 33 StreamController<ChartEvent> mouseClickController; |
| 34 | 34 |
| 35 void _ensureAreaAndSeries(CartesianArea area, ChartSeries series) { | 35 void _ensureAreaAndSeries(CartesianArea area, ChartSeries series) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 return new Extent(min, max); | 100 return new Extent(min, max); |
| 101 } | 101 } |
| 102 | 102 |
| 103 @override | 103 @override |
| 104 Extent extentForRow(Iterable row) { | 104 Extent extentForRow(Iterable row) { |
| 105 assert(series != null && area != null); | 105 assert(series != null && area != null); |
| 106 var measures = series.measures, | 106 var measures = series.measures, max = SMALL_INT_MIN, min = SMALL_INT_MAX; |
| 107 max = SMALL_INT_MIN, | |
| 108 min = SMALL_INT_MAX; | |
| 109 | 107 |
| 110 for (int i = 0, len = measures.length; i < len; ++i) { | 108 for (int i = 0, len = measures.length; i < len; ++i) { |
| 111 var measure = measures.elementAt(i), | 109 var measure = measures.elementAt(i), value = row.elementAt(measure); |
| 112 value = row.elementAt(measure); | |
| 113 if (value != null && value.isFinite) { | 110 if (value != null && value.isFinite) { |
| 114 if (value > max) { | 111 if (value > max) { |
| 115 max = value; | 112 max = value; |
| 116 } else if (value < min) { | 113 } else if (value < min) { |
| 117 min = value; | 114 min = value; |
| 118 } | 115 } |
| 119 } | 116 } |
| 120 } | 117 } |
| 121 return new Extent(min, max); | 118 return new Extent(min, max); |
| 122 } | 119 } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 } | 173 } |
| 177 } | 174 } |
| 178 _columnStateCache[column] = flags; | 175 _columnStateCache[column] = flags; |
| 179 }); | 176 }); |
| 180 }); | 177 }); |
| 181 } | 178 } |
| 182 | 179 |
| 183 Iterable<String> stylesForColumn(int column) { | 180 Iterable<String> stylesForColumn(int column) { |
| 184 if (_columnStylesCache[column] == null) { | 181 if (_columnStylesCache[column] == null) { |
| 185 if (state == null || area.useRowColoring) { | 182 if (state == null || area.useRowColoring) { |
| 186 _columnStylesCache[column] = const[]; | 183 _columnStylesCache[column] = const []; |
| 187 } else { | 184 } else { |
| 188 var styles = [], | 185 var styles = [], flags = _columnStateCache[column]; |
| 189 flags = _columnStateCache[column]; | |
| 190 | 186 |
| 191 if (flags & ChartState.COL_SELECTED != 0) { | 187 if (flags & ChartState.COL_SELECTED != 0) { |
| 192 styles.add(ChartState.COL_SELECTED_CLASS); | 188 styles.add(ChartState.COL_SELECTED_CLASS); |
| 193 } else if (flags & ChartState.COL_UNSELECTED != 0){ | 189 } else if (flags & ChartState.COL_UNSELECTED != 0) { |
| 194 styles.add(ChartState.COL_UNSELECTED_CLASS); | 190 styles.add(ChartState.COL_UNSELECTED_CLASS); |
| 195 } | 191 } |
| 196 | 192 |
| 197 if (flags & ChartState.COL_HIGHLIGHTED != 0) { | 193 if (flags & ChartState.COL_HIGHLIGHTED != 0) { |
| 198 styles.add(ChartState.COL_HIGHLIGHTED_CLASS); | 194 styles.add(ChartState.COL_HIGHLIGHTED_CLASS); |
| 199 } else if (flags & ChartState.COL_UNHIGHLIGHTED != 0) { | 195 } else if (flags & ChartState.COL_UNHIGHLIGHTED != 0) { |
| 200 styles.add(ChartState.COL_UNHIGHLIGHTED_CLASS); | 196 styles.add(ChartState.COL_UNHIGHLIGHTED_CLASS); |
| 201 } | 197 } |
| 202 | 198 |
| 203 if (flags & ChartState.COL_HOVERED != 0) { | 199 if (flags & ChartState.COL_HOVERED != 0) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 219 String colorForColumn(int column) => | 215 String colorForColumn(int column) => |
| 220 theme.getColorForKey(column, _columnStateCache[column]); | 216 theme.getColorForKey(column, _columnStateCache[column]); |
| 221 | 217 |
| 222 String filterForColumn(int column) => | 218 String filterForColumn(int column) => |
| 223 theme.getFilterForState(_columnStateCache[column]); | 219 theme.getFilterForState(_columnStateCache[column]); |
| 224 | 220 |
| 225 Iterable<String> stylesForValue(int column, int row) { | 221 Iterable<String> stylesForValue(int column, int row) { |
| 226 var hash = hash2(column, row); | 222 var hash = hash2(column, row); |
| 227 if (_valueStylesCache[hash] == null) { | 223 if (_valueStylesCache[hash] == null) { |
| 228 if (state == null) { | 224 if (state == null) { |
| 229 _valueStylesCache[hash] = const[]; | 225 _valueStylesCache[hash] = const []; |
| 230 } else { | 226 } else { |
| 231 var styles = stylesForColumn(column).toList(); | 227 var styles = stylesForColumn(column).toList(); |
| 232 if (state.highlights.isNotEmpty) { | 228 if (state.highlights.isNotEmpty) { |
| 233 styles.add(state.highlights.any((x) => x.last == row) | 229 styles.add(state.highlights.any((x) => x.last == row) |
| 234 ? ChartState.VAL_HIGHLIGHTED_CLASS | 230 ? ChartState.VAL_HIGHLIGHTED_CLASS |
| 235 : ChartState.VAL_UNHIGHLIGHTED_CLASS); | 231 : ChartState.VAL_UNHIGHLIGHTED_CLASS); |
| 236 } | 232 } |
| 237 if (state.hovered != null && state.hovered.last == row) { | 233 if (state.hovered != null && state.hovered.last == row) { |
| 238 styles.add(ChartState.VAL_HOVERED_CLASS); | 234 styles.add(ChartState.VAL_HOVERED_CLASS); |
| 239 } | 235 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 261 | 257 |
| 262 _cacheColorsAndFilter(int hash, int column, int row) { | 258 _cacheColorsAndFilter(int hash, int column, int row) { |
| 263 if (state == null) { | 259 if (state == null) { |
| 264 _valueColorCache[hash] = | 260 _valueColorCache[hash] = |
| 265 theme.getColorForKey(area.useRowColoring ? row : column); | 261 theme.getColorForKey(area.useRowColoring ? row : column); |
| 266 _valueFilterCache[hash] = theme.getFilterForState(0); | 262 _valueFilterCache[hash] = theme.getFilterForState(0); |
| 267 } else { | 263 } else { |
| 268 var flags = _columnStateCache[column]; | 264 var flags = _columnStateCache[column]; |
| 269 if (state.highlights.isNotEmpty) { | 265 if (state.highlights.isNotEmpty) { |
| 270 flags |= (state.highlights.any((x) => x.last == row) | 266 flags |= (state.highlights.any((x) => x.last == row) |
| 271 ? ChartState.VAL_HIGHLIGHTED | 267 ? ChartState.VAL_HIGHLIGHTED |
| 272 : ChartState.VAL_UNHIGHLIGHTED); | 268 : ChartState.VAL_UNHIGHLIGHTED); |
| 273 } | 269 } |
| 274 if (state.hovered != null && state.hovered.last == row) { | 270 if (state.hovered != null && state.hovered.last == row) { |
| 275 flags |= ChartState.VAL_HOVERED; | 271 flags |= ChartState.VAL_HOVERED; |
| 276 } | 272 } |
| 277 _valueColorCache[hash] = | 273 _valueColorCache[hash] = |
| 278 theme.getColorForKey(area.useRowColoring ? row : column, flags); | 274 theme.getColorForKey(area.useRowColoring ? row : column, flags); |
| 279 _valueFilterCache[hash] = theme.getFilterForState(flags); | 275 _valueFilterCache[hash] = theme.getFilterForState(flags); |
| 280 } | 276 } |
| 281 } | 277 } |
| 282 } | 278 } |
| OLD | NEW |