| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** The interface that the layout algorithms use to talk to the view. */ | 5 /** The interface that the layout algorithms use to talk to the view. */ |
| 6 abstract class Positionable { | 6 abstract class Positionable { |
| 7 ViewLayout get layout; | 7 ViewLayout get layout; |
| 8 | 8 |
| 9 /** Gets our custom CSS properties, as provided by the CSS preprocessor. */ | 9 /** Gets our custom CSS properties, as provided by the CSS preprocessor. */ |
| 10 Map<String, String> get customStyle; | 10 Map<String, String> get customStyle; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 * Abstract base class for View layout. Tracks relevant layout state. | 64 * Abstract base class for View layout. Tracks relevant layout state. |
| 65 * This code was inspired by code in Android's View.java; it's needed for the | 65 * This code was inspired by code in Android's View.java; it's needed for the |
| 66 * rest of the layout system. | 66 * rest of the layout system. |
| 67 */ | 67 */ |
| 68 class ViewLayout { | 68 class ViewLayout { |
| 69 /** | 69 /** |
| 70 * The layout parameters associated with this view and used by the parent | 70 * The layout parameters associated with this view and used by the parent |
| 71 * to determine how this view should be laid out. | 71 * to determine how this view should be laid out. |
| 72 */ | 72 */ |
| 73 LayoutParams layoutParams; | 73 LayoutParams layoutParams; |
| 74 Future<ElementRect> _cachedViewRect; | 74 int _offsetWidth; |
| 75 int _offsetHeight; |
| 75 | 76 |
| 76 /** The view that this layout belongs to. */ | 77 /** The view that this layout belongs to. */ |
| 77 final Positionable view; | 78 final Positionable view; |
| 78 | 79 |
| 79 /** | 80 /** |
| 80 * To get a perforant positioning model on top of the DOM, we read all | 81 * To get a perforant positioning model on top of the DOM, we read all |
| 81 * properties in the first pass while computing positions. Then we have a | 82 * properties in the first pass while computing positions. Then we have a |
| 82 * second pass that actually moves everything. | 83 * second pass that actually moves everything. |
| 83 */ | 84 */ |
| 84 int _measuredLeft, _measuredTop, _measuredWidth, _measuredHeight; | 85 int _measuredLeft, _measuredTop, _measuredWidth, _measuredHeight; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 98 } | 99 } |
| 99 } | 100 } |
| 100 | 101 |
| 101 static bool hasCustomLayout(Positionable view) { | 102 static bool hasCustomLayout(Positionable view) { |
| 102 return view.customStyle['display'] == "-dart-grid"; | 103 return view.customStyle['display'] == "-dart-grid"; |
| 103 } | 104 } |
| 104 | 105 |
| 105 CSSStyleDeclaration get _style => layoutParams.style.value; | 106 CSSStyleDeclaration get _style => layoutParams.style.value; |
| 106 | 107 |
| 107 void cacheExistingBrowserLayout() { | 108 void cacheExistingBrowserLayout() { |
| 108 _cachedViewRect = view.node.rect; | 109 _offsetWidth = view.node.offsetWidth; |
| 110 _offsetHeight = view.node.offsetHeight; |
| 109 } | 111 } |
| 110 | 112 |
| 111 int get currentWidth { | 113 int get currentWidth { |
| 112 return _cachedViewRect.value.offset.width; | 114 return _offsetWidth; |
| 113 } | 115 } |
| 114 | 116 |
| 115 int get currentHeight { | 117 int get currentHeight { |
| 116 return _cachedViewRect.value.offset.height; | 118 return _offsetHeight; |
| 117 } | 119 } |
| 118 | 120 |
| 119 int get borderLeftWidth => _toPixels(_style.borderLeftWidth); | 121 int get borderLeftWidth => _toPixels(_style.borderLeftWidth); |
| 120 int get borderTopWidth => _toPixels(_style.borderTopWidth); | 122 int get borderTopWidth => _toPixels(_style.borderTopWidth); |
| 121 int get borderRightWidth => _toPixels(_style.borderRightWidth); | 123 int get borderRightWidth => _toPixels(_style.borderRightWidth); |
| 122 int get borderBottomWidth => _toPixels(_style.borderBottomWidth); | 124 int get borderBottomWidth => _toPixels(_style.borderBottomWidth); |
| 123 int get borderWidth => borderLeftWidth + borderRightWidth; | 125 int get borderWidth => borderLeftWidth + borderRightWidth; |
| 124 int get borderHeight => borderTopWidth + borderBottomWidth; | 126 int get borderHeight => borderTopWidth + borderBottomWidth; |
| 125 | 127 |
| 126 /** Implements the custom layout computation. */ | 128 /** Implements the custom layout computation. */ |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 // For an unset max-content size, use the actual size | 225 // For an unset max-content size, use the actual size |
| 224 return size; | 226 return size; |
| 225 } | 227 } |
| 226 if (style.endsWith('%')) { | 228 if (style.endsWith('%')) { |
| 227 num percent = double.parse(style.substring(0, style.length - 1)); | 229 num percent = double.parse(style.substring(0, style.length - 1)); |
| 228 return ((percent / 100) * parentSize).toInt(); | 230 return ((percent / 100) * parentSize).toInt(); |
| 229 } | 231 } |
| 230 return _toPixels(style); | 232 return _toPixels(style); |
| 231 } | 233 } |
| 232 } | 234 } |
| OLD | NEW |