@dark-engine/platform-desktop
Version:
Dark renderer to desktop platforms like Windows, Linux, macOS via Nodegui and Qt
55 lines (54 loc) • 1.48 kB
JavaScript
import {
ROOT,
Fiber,
CREATE_EFFECT_TAG,
UPDATE_EFFECT_TAG,
platform,
flatten,
TagVirtualNode,
TaskPriority,
createReplacer,
setRootId,
$$scope,
trueFn,
scheduler,
} from '@dark-engine/core';
import { TagNativeElement } from '../native-element';
import { createNativeElement, toggle, commit, finishCommit } from '../dom';
const raf = setTimeout.bind(this);
const caf = clearTimeout.bind(this);
const spawn = raf;
let isInjected = false;
function inject() {
platform.createElement = createNativeElement;
platform.toggle = toggle;
platform.raf = raf;
platform.caf = caf;
platform.spawn = spawn;
platform.commit = commit;
platform.finishCommit = finishCommit;
platform.detectIsDynamic = trueFn;
isInjected = true;
}
function render(element) {
!isInjected && inject();
const callback = () => {
setRootId(0);
const $scope = $$scope();
const root = $scope.getRoot();
const isUpdate = Boolean(root);
const fiber = new Fiber().mutate({
el: isUpdate ? root.el : new TagNativeElement(ROOT),
inst: new TagVirtualNode(ROOT, {}, flatten([element || createReplacer()])),
alt: root,
tag: isUpdate ? UPDATE_EFFECT_TAG : CREATE_EFFECT_TAG,
});
$scope.resetMount();
$scope.setWorkInProgress(fiber);
$scope.setUnitOfWork(fiber);
};
scheduler.schedule(callback, { priority: TaskPriority.NORMAL });
}
globalThis._DARK_ = Fiber;
export { render, inject };
//# sourceMappingURL=render.js.map