@effindomv2/fui-as 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/nodes/VirtualList.ts +43 -9
package/package.json
CHANGED
package/src/nodes/VirtualList.ts
CHANGED
|
@@ -18,10 +18,48 @@ const POOL_OVERSCAN_ITEMS: i32 = 2;
|
|
|
18
18
|
|
|
19
19
|
export type VirtualListBinder = (container: FlexBox, index: i32) => void;
|
|
20
20
|
|
|
21
|
+
abstract class VirtualListBinderCallback {
|
|
22
|
+
abstract invoke(container: FlexBox, index: i32): void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
class FunctionVirtualListBinderCallback extends VirtualListBinderCallback {
|
|
26
|
+
private readonly handler: VirtualListBinder;
|
|
27
|
+
|
|
28
|
+
constructor(handler: VirtualListBinder) {
|
|
29
|
+
super();
|
|
30
|
+
this.handler = handler;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
invoke(container: FlexBox, index: i32): void {
|
|
34
|
+
this.handler(container, index);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
class BoundVirtualListBinderCallback<Owner> extends VirtualListBinderCallback {
|
|
39
|
+
private readonly owner: Owner;
|
|
40
|
+
private readonly handler: (owner: Owner, container: FlexBox, index: i32) => void;
|
|
41
|
+
|
|
42
|
+
constructor(owner: Owner, handler: (owner: Owner, container: FlexBox, index: i32) => void) {
|
|
43
|
+
super();
|
|
44
|
+
this.owner = owner;
|
|
45
|
+
this.handler = handler;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
invoke(container: FlexBox, index: i32): void {
|
|
49
|
+
this.handler(this.owner, container, index);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
class MissingVirtualListBinderCallback extends VirtualListBinderCallback {
|
|
54
|
+
invoke(_container: FlexBox, _index: i32): void {
|
|
55
|
+
throw new VirtualListItemBindingError();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
21
59
|
export class VirtualList extends FlexBox {
|
|
22
60
|
private totalItemsValue: i32;
|
|
23
61
|
private readonly itemHeightValue: f32;
|
|
24
|
-
private bindItemValue:
|
|
62
|
+
private bindItemValue: VirtualListBinderCallback;
|
|
25
63
|
private readonly scrollStateValue: ScrollState;
|
|
26
64
|
private readonly scrollBoxValue: ScrollBox;
|
|
27
65
|
private readonly contentValue: FlexBox;
|
|
@@ -45,9 +83,7 @@ export class VirtualList extends FlexBox {
|
|
|
45
83
|
const poolSizeValue = maxVisible > 0 ? maxVisible + POOL_OVERSCAN_ITEMS : POOL_OVERSCAN_ITEMS;
|
|
46
84
|
this.totalItemsValue = totalItemsValue;
|
|
47
85
|
this.itemHeightValue = itemHeightValue;
|
|
48
|
-
this.bindItemValue = ()
|
|
49
|
-
throw new VirtualListItemBindingError();
|
|
50
|
-
};
|
|
86
|
+
this.bindItemValue = new MissingVirtualListBinderCallback();
|
|
51
87
|
this.scrollStateValue = scrollStateValue;
|
|
52
88
|
this.poolSizeValue = poolSizeValue;
|
|
53
89
|
|
|
@@ -179,7 +215,7 @@ export class VirtualList extends FlexBox {
|
|
|
179
215
|
}
|
|
180
216
|
|
|
181
217
|
onBindItem(renderer: VirtualListBinder): this {
|
|
182
|
-
this.bindItemValue = renderer;
|
|
218
|
+
this.bindItemValue = new FunctionVirtualListBinderCallback(renderer);
|
|
183
219
|
this.currentFirstVisibleIndex = -1;
|
|
184
220
|
this.currentLastVisibleIndex = -1;
|
|
185
221
|
this.rebuildVisibleRange(true);
|
|
@@ -187,9 +223,7 @@ export class VirtualList extends FlexBox {
|
|
|
187
223
|
}
|
|
188
224
|
|
|
189
225
|
onBindItemWith<Owner>(owner: Owner, renderer: (owner: Owner, container: FlexBox, index: i32) => void): this {
|
|
190
|
-
this.bindItemValue = (
|
|
191
|
-
renderer(owner, container, index);
|
|
192
|
-
};
|
|
226
|
+
this.bindItemValue = new BoundVirtualListBinderCallback<Owner>(owner, renderer);
|
|
193
227
|
this.currentFirstVisibleIndex = -1;
|
|
194
228
|
this.currentLastVisibleIndex = -1;
|
|
195
229
|
this.rebuildVisibleRange(true);
|
|
@@ -444,7 +478,7 @@ export class VirtualList extends FlexBox {
|
|
|
444
478
|
}
|
|
445
479
|
|
|
446
480
|
private renderItem(container: FlexBox, index: i32): void {
|
|
447
|
-
this.bindItemValue(container, index);
|
|
481
|
+
this.bindItemValue.invoke(container, index);
|
|
448
482
|
}
|
|
449
483
|
|
|
450
484
|
private maxOffsetForCurrentViewport(): f32 {
|