| 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 20 matching lines...) Expand all Loading... |
| 31 } | 31 } |
| 32 | 32 |
| 33 void dispose() { | 33 void dispose() { |
| 34 _disposer.dispose(); | 34 _disposer.dispose(); |
| 35 if (_tooltipRoot != null) _tooltipRoot.remove(); | 35 if (_tooltipRoot != null) _tooltipRoot.remove(); |
| 36 } | 36 } |
| 37 | 37 |
| 38 void _subscribe() { | 38 void _subscribe() { |
| 39 var elements = _area.host.querySelectorAll(_AXIS_SELECTOR); | 39 var elements = _area.host.querySelectorAll(_AXIS_SELECTOR); |
| 40 _disposer.dispose(); | 40 _disposer.dispose(); |
| 41 _disposer | 41 _disposer.addAll( |
| 42 .addAll(elements.map((x) => x.onMouseOver.listen(_handleMouseOver))); | 42 elements.map((Element x) => x.onMouseOver.listen(_handleMouseOver))); |
| 43 _disposer.addAll(elements.map((x) => x.onMouseOut.listen(_handleMouseOut))); | 43 _disposer.addAll(elements.map((x) => x.onMouseOut.listen(_handleMouseOut))); |
| 44 } | 44 } |
| 45 | 45 |
| 46 void _handleMouseOver(MouseEvent e) { | 46 void _handleMouseOver(MouseEvent e) { |
| 47 Element target = e.target; | 47 Element target = e.target; |
| 48 if (!target.dataset.containsKey('detail')) return; | 48 if (!target.dataset.containsKey('detail')) return; |
| 49 ensureTooltipRoot(); | 49 ensureTooltipRoot(); |
| 50 ensureRenderAreaRect(); | 50 ensureRenderAreaRect(); |
| 51 | 51 |
| 52 _tooltipRoot.text = target.dataset['detail']; | 52 _tooltipRoot.text = target.dataset['detail']; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 81 } else { | 81 } else { |
| 82 _tooltipRoot.classes.remove('rtl'); | 82 _tooltipRoot.classes.remove('rtl'); |
| 83 } | 83 } |
| 84 _area.host.append(_tooltipRoot); | 84 _area.host.append(_tooltipRoot); |
| 85 } | 85 } |
| 86 } | 86 } |
| 87 | 87 |
| 88 void ensureRenderAreaRect() { | 88 void ensureRenderAreaRect() { |
| 89 var layout = _area.layout; | 89 var layout = _area.layout; |
| 90 _hostAreaRect = _area.host.getBoundingClientRect(); | 90 _hostAreaRect = _area.host.getBoundingClientRect(); |
| 91 _renderAreaRect = new math.Rectangle( | 91 _renderAreaRect = new math.Rectangle<num>( |
| 92 _hostAreaRect.left + layout.chartArea.x + layout.renderArea.x, | 92 _hostAreaRect.left + layout.chartArea.x + layout.renderArea.x, |
| 93 _hostAreaRect.top + layout.chartArea.y + layout.renderArea.y, | 93 _hostAreaRect.top + layout.chartArea.y + layout.renderArea.y, |
| 94 layout.renderArea.width, | 94 layout.renderArea.width, |
| 95 layout.renderArea.height); | 95 layout.renderArea.height); |
| 96 } | 96 } |
| 97 | 97 |
| 98 /// Computes the ideal tooltip position based on orientation. | 98 /// Computes the ideal tooltip position based on orientation. |
| 99 math.Point computeTooltipPosition( | 99 math.Point computeTooltipPosition( |
| 100 math.Rectangle label, math.Rectangle tooltip, math.Rectangle renderArea) { | 100 math.Rectangle label, math.Rectangle tooltip, math.Rectangle renderArea) { |
| 101 var x = label.left + (label.width - tooltip.width) / 2, | 101 var x = label.left + (label.width - tooltip.width) / 2, |
| 102 y = label.top + (label.height - tooltip.height) / 2; | 102 y = label.top + (label.height - tooltip.height) / 2; |
| 103 | 103 |
| 104 if (x + tooltip.width > renderArea.right) { | 104 if (x + tooltip.width > renderArea.right) { |
| 105 x = renderArea.right - tooltip.width; | 105 x = renderArea.right - tooltip.width; |
| 106 } else if (x < renderArea.left) { | 106 } else if (x < renderArea.left) { |
| 107 x = renderArea.left; | 107 x = renderArea.left; |
| 108 } | 108 } |
| 109 | 109 |
| 110 if (y + tooltip.height > renderArea.bottom) { | 110 if (y + tooltip.height > renderArea.bottom) { |
| 111 y = renderArea.bottom - tooltip.height; | 111 y = renderArea.bottom - tooltip.height; |
| 112 } else if (y < renderArea.top) { | 112 } else if (y < renderArea.top) { |
| 113 y = renderArea.top; | 113 y = renderArea.top; |
| 114 } | 114 } |
| 115 | 115 |
| 116 return new math.Point(x - _hostAreaRect.left, y - _hostAreaRect.top); | 116 return new math.Point(x - _hostAreaRect.left, y - _hostAreaRect.top); |
| 117 } | 117 } |
| 118 } | 118 } |
| OLD | NEW |