Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(599)

Unified Diff: runtime/observatory/lib/src/elements/containers/virtual_collection.dart

Issue 2991203002: Fix Observatory virtual-collection layout issues (Closed)
Patch Set: Fix persistent handles page Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/observatory/lib/src/elements/containers/virtual_collection.dart
diff --git a/runtime/observatory/lib/src/elements/containers/virtual_collection.dart b/runtime/observatory/lib/src/elements/containers/virtual_collection.dart
index 474753942d72635b0036580aa8f675a45418df7b..547a1fdcd3b54a3b4449aca17ed300f810608748 100644
--- a/runtime/observatory/lib/src/elements/containers/virtual_collection.dart
+++ b/runtime/observatory/lib/src/elements/containers/virtual_collection.dart
@@ -8,6 +8,7 @@ import 'package:observatory/src/elements/helpers/rendering_scheduler.dart';
import 'package:observatory/src/elements/helpers/tag.dart';
typedef HtmlElement VirtualCollectionCreateCallback();
+typedef List<HtmlElement> VirtualCollectionHeaderCallback();
typedef void VirtualCollectionUpdateCallback(
HtmlElement el, dynamic item, int index);
@@ -20,7 +21,7 @@ class VirtualCollectionElement extends HtmlElement implements Renderable {
_r.onRendered;
VirtualCollectionCreateCallback _create;
- VirtualCollectionCreateCallback _createHeader;
+ VirtualCollectionHeaderCallback _createHeader;
VirtualCollectionUpdateCallback _update;
double _itemHeight;
double _headerHeight = 0.0;
@@ -41,7 +42,7 @@ class VirtualCollectionElement extends HtmlElement implements Renderable {
factory VirtualCollectionElement(VirtualCollectionCreateCallback create,
VirtualCollectionUpdateCallback update,
{Iterable items: const [],
- VirtualCollectionCreateCallback createHeader,
+ VirtualCollectionHeaderCallback createHeader,
RenderingQueue queue}) {
assert(create != null);
assert(update != null);
@@ -79,14 +80,16 @@ class VirtualCollectionElement extends HtmlElement implements Renderable {
final DivElement _header = new DivElement()..classes = ['header'];
final DivElement _scroller = new DivElement()..classes = ['scroller'];
final DivElement _shifter = new DivElement()..classes = ['shifter'];
+ final DivElement _container = new DivElement()..classes = ['container'];
dynamic getItemFromElement(HtmlElement element) {
- final el_index = _shifter.children.indexOf(element);
+ final el_index = _container.children.indexOf(element);
if (el_index < 0) {
return null;
}
- final item_index =
- _top + el_index - (_shifter.children.length * _inverse_preload).floor();
+ final item_index = _top +
+ el_index -
+ (_container.children.length * _inverse_preload).floor();
if (0 <= item_index && item_index < items.length) {
return _items[item_index];
}
@@ -119,15 +122,22 @@ class VirtualCollectionElement extends HtmlElement implements Renderable {
children = [
_scroller
..children = [
- _shifter..children = [_create()]
+ _shifter
+ ..children = [
+ _container..children = [_create()]
+ ]
],
];
if (_createHeader != null) {
- _header.children = [_createHeader()];
+ _header.children = [
+ new DivElement()
+ ..classes = ['container']
+ ..children = _createHeader()
+ ];
_scroller.children.insert(0, _header);
_headerHeight = _header.children[0].getBoundingClientRect().height;
}
- _itemHeight = _shifter.children[0].getBoundingClientRect().height;
+ _itemHeight = _container.children[0].getBoundingClientRect().height;
_height = getBoundingClientRect().height;
}
@@ -148,11 +158,11 @@ class VirtualCollectionElement extends HtmlElement implements Renderable {
final tail_length = (_height / _itemHeight / _preload).ceil();
final length = tail_length * 2 + tail_length * _preload;
- if (_shifter.children.length < length) {
- while (_shifter.children.length != length) {
+ if (_container.children.length < length) {
+ while (_container.children.length != length) {
var e = _create();
e..style.display = 'hidden';
- _shifter.children.add(e);
+ _container.children.add(e);
}
_top = null; // force update;
}
@@ -160,7 +170,7 @@ class VirtualCollectionElement extends HtmlElement implements Renderable {
if ((_top == null) || ((top - _top).abs() >= tail_length)) {
_shifter.style.top = '${_itemHeight*(top-tail_length)}px';
int i = top - tail_length;
- for (final HtmlElement e in _shifter.children) {
+ for (final HtmlElement e in _container.children) {
if (0 <= i && i < _items.length) {
e..style.display = null;
_update(e, _items[i], i);

Powered by Google App Engine
This is Rietveld 408576698