UNPKG

@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
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