OLD | NEW |
1 <!-- | 1 <!-- |
2 // Copyright 2015 The Chromium Authors. All rights reserved. | 2 // Copyright 2015 The Chromium Authors. All rights reserved. |
3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
5 --> | 5 --> |
6 <import src="sky-element.sky" /> | 6 <import src="sky-element.sky" /> |
7 | 7 |
8 <sky-element> | 8 <sky-element> |
9 <template> | 9 <template> |
10 <style> | 10 <style> |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 double get scrollOffset => _scrollOffset; | 87 double get scrollOffset => _scrollOffset; |
88 | 88 |
89 set scrollOffset(double value) { | 89 set scrollOffset(double value) { |
90 // TODO(abarth): Can we get these values without forcing a synchronous layou
t? | 90 // TODO(abarth): Can we get these values without forcing a synchronous layou
t? |
91 double outerHeight = clientHeight.toDouble(); | 91 double outerHeight = clientHeight.toDouble(); |
92 double innerHeight = _scrollable.clientHeight.toDouble(); | 92 double innerHeight = _scrollable.clientHeight.toDouble(); |
93 double scrollRange = innerHeight - outerHeight; | 93 double scrollRange = innerHeight - outerHeight; |
94 double newScrollOffset = math.max(0.0, math.min(scrollRange, value)); | 94 double newScrollOffset = math.max(0.0, math.min(scrollRange, value)); |
95 if (newScrollOffset == _scrollOffset) | 95 if (newScrollOffset == _scrollOffset) |
96 return; | 96 return; |
| 97 // TODO(eseidel): We should scroll in device pixels instead of logical |
| 98 // pixels, but to do that correctly we need to use a device pixel unit. |
97 _scrollOffset = newScrollOffset; | 99 _scrollOffset = newScrollOffset; |
98 String transform = 'translateY(${(-_scrollOffset).toStringAsFixed(2)}px)'; | 100 String transform = 'translateY(${(-_scrollOffset).toInt()}px)'; |
99 _scrollable.style['transform'] = transform; | 101 _scrollable.style['transform'] = transform; |
100 | 102 |
101 double topPercent = newScrollOffset / innerHeight * 100.0; | 103 double topPercent = newScrollOffset / innerHeight * 100.0; |
102 double heightPercent = outerHeight / innerHeight * 100.0; | 104 double heightPercent = outerHeight / innerHeight * 100.0; |
103 _vbar.style['top'] = '${topPercent}%'; | 105 _vbar.style['top'] = '${topPercent}%'; |
104 _vbar.style['height'] = '${heightPercent}%'; | 106 _vbar.style['height'] = '${heightPercent}%'; |
105 } | 107 } |
106 | 108 |
107 bool scrollBy(double scrollDelta) { | 109 bool scrollBy(double scrollDelta) { |
108 double oldScrollOffset = _scrollOffset; | 110 double oldScrollOffset = _scrollOffset; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 } | 153 } |
152 | 154 |
153 void _handleWheel(WheelEvent event) { | 155 void _handleWheel(WheelEvent event) { |
154 scrollBy(-event.offsetY); | 156 scrollBy(-event.offsetY); |
155 } | 157 } |
156 } | 158 } |
157 | 159 |
158 _init(script) => register(script, SkyScrollable); | 160 _init(script) => register(script, SkyScrollable); |
159 </script> | 161 </script> |
160 </sky-element> | 162 </sky-element> |
OLD | NEW |