Clean up usage of RenderComponentArgs in TS by explicitly defining accessors
This commit is contained in:
parent
950250d1f7
commit
111e83c976
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { Pointer, System_Array } from '../Platform/Platform';
|
||||||
|
import { platform } from '../Environment';
|
||||||
|
|
||||||
|
// Keep in sync with the RenderComponentArgs struct in .NET code
|
||||||
|
export const renderComponentArgs = {
|
||||||
|
browserRendererId: (obj: RenderComponentArgsPointer) => platform.readInt32Field(obj, 0),
|
||||||
|
componentId: (obj: RenderComponentArgsPointer) => platform.readInt32Field(obj, 4),
|
||||||
|
renderTree: (obj: RenderComponentArgsPointer) => platform.readObjectField(obj, 8) as System_Array,
|
||||||
|
renderTreeLength: (obj: RenderComponentArgsPointer) => platform.readInt32Field(obj, 12),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nominal type to ensure only valid pointers are passed to the renderComponentArgs functions.
|
||||||
|
// At runtime the values are just numbers.
|
||||||
|
export interface RenderComponentArgsPointer extends Pointer { RenderComponentArgsPointer__DO_NOT_IMPLEMENT: any }
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { System_Object, System_String, System_Array, MethodHandle, Pointer } from '../Platform/Platform';
|
import { System_Object, System_String, System_Array, MethodHandle, Pointer } from '../Platform/Platform';
|
||||||
import { platform } from '../Environment';
|
import { platform } from '../Environment';
|
||||||
import { getTreeNodePtr, renderTreeNode, NodeType, RenderTreeNodePointer } from './RenderTreeNode';
|
import { getTreeNodePtr, renderTreeNode, NodeType, RenderTreeNodePointer } from './RenderTreeNode';
|
||||||
|
import { renderComponentArgs, RenderComponentArgsPointer } from './RenderComponentArgs';
|
||||||
let raiseEventMethod: MethodHandle;
|
let raiseEventMethod: MethodHandle;
|
||||||
let renderComponentMethod: MethodHandle;
|
let renderComponentMethod: MethodHandle;
|
||||||
|
|
||||||
|
|
@ -24,14 +25,14 @@ export function attachComponentToElement(browserRendererId: number, elementSelec
|
||||||
browserRenderers[browserRendererId][componentId] = element;
|
browserRenderers[browserRendererId][componentId] = element;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function renderRenderTree(renderComponentArgs: Pointer) {
|
export function renderRenderTree(args: RenderComponentArgsPointer) {
|
||||||
const browserRendererId = platform.readInt32Field(renderComponentArgs, 0);
|
const browserRendererId = renderComponentArgs.browserRendererId(args);
|
||||||
const browserRenderer = browserRenderers[browserRendererId];
|
const browserRenderer = browserRenderers[browserRendererId];
|
||||||
if (!browserRenderer) {
|
if (!browserRenderer) {
|
||||||
throw new Error(`There is no browser renderer with ID ${browserRendererId}.`);
|
throw new Error(`There is no browser renderer with ID ${browserRendererId}.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const componentId = platform.readInt32Field(renderComponentArgs, 4);
|
const componentId = renderComponentArgs.componentId(args);
|
||||||
const element = browserRenderer[componentId];
|
const element = browserRenderer[componentId];
|
||||||
if (!element) {
|
if (!element) {
|
||||||
throw new Error(`No element is currently associated with component ${componentId}`);
|
throw new Error(`No element is currently associated with component ${componentId}`);
|
||||||
|
|
@ -39,8 +40,8 @@ export function renderRenderTree(renderComponentArgs: Pointer) {
|
||||||
|
|
||||||
clearElement(element);
|
clearElement(element);
|
||||||
|
|
||||||
const tree = platform.readObjectField(renderComponentArgs, 8) as System_Array;
|
const tree = renderComponentArgs.renderTree(args);
|
||||||
const treeLength = platform.readInt32Field(renderComponentArgs, 12);
|
const treeLength = renderComponentArgs.renderTreeLength(args);
|
||||||
insertNodeRange(browserRendererId, componentId, element, tree, 0, treeLength - 1);
|
insertNodeRange(browserRendererId, componentId, element, tree, 0, treeLength - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue