23 QOhosJsThreadGateway::runAndWait([&](QOhosJsState &) {
24 auto windowIdStruct = std::unique_ptr<QtOhos::WindowIdStruct>(
25 reinterpret_cast<QtOhos::WindowIdStruct *>(windowId));
27 if (windowIdStruct->content ==
nullptr)
28 qOhosReportFatalErrorAndAbort(
"Invalid WId data, content node is empty");
30 bool windowIdHasStackNode = windowIdStruct->stack !=
nullptr;
31 std::unique_ptr<QArkUi::Node> stackNode;
32 std::unique_ptr<QArkUi::Node> embeddedComponentNode =
33 QArkUi::Node::takeOwnershipOfExternalNode(windowIdStruct->content);
35 if (windowIdHasStackNode) {
36 stackNode = QArkUi::Node::takeOwnershipOfExternalNode(windowIdStruct->stack);
38 stackNode = QArkUi::Node::createOrFail(::ARKUI_NODE_STACK);
39 stackNode->setAttributeOrFail(::NODE_ACCESSIBILITY_ROLE, ::ARKUI_NODE_STACK);
40 stackNode->setAttributeOrFail(::NODE_STACK_ALIGN_CONTENT, ::ARKUI_ALIGNMENT_TOP_START);
41 stackNode->setAttributeOrFail(::NODE_Z_INDEX, QArkUi::QEmbeddedWindowNode::minimumNodeZIndexValue);
42 stackNode->addChildOrFail(*embeddedComponentNode);
43 windowIdStruct->stack = stackNode->handle();
46 *m_jsStateData = JsStateData {
47 .embeddedWindow = std::make_unique<QArkUi::QEmbeddedWindowNode>(
48 std::move(stackNode), std::move(embeddedComponentNode),
49 std::move(windowIdStruct)),
64void QOhosForeignWindow::
setGeometry(
const QRect &unscaledGeometry)
66 auto scaledGeometry = QHighDpi::fromNative(QRectF(unscaledGeometry),
67 static_cast<QOhosPlatformScreen *>(screen())->pixelScalingCoefficient());
69 QOhosJsThreadGateway::runAndWait([&](QOhosJsState &) {
70 m_jsStateData->embeddedWindow->setSize(scaledGeometry.size());
71 m_jsStateData->embeddedWindow->setPosition(scaledGeometry.topLeft());
75 setWindowGeometryFromOhos(unscaledGeometry);
86void QOhosForeignWindow::
setParent(
const QPlatformWindow *window)
88 if (window !=
nullptr && window->isForeignWindow())
89 qOhosReportFatalErrorAndAbort(
"Reparenting to foreign windows is not supported");
91 if (window ==
nullptr) {
92 QOhosJsThreadGateway::runAndWait([&](QOhosJsState &) {
93 m_jsStateData->embeddedWindow->detachFromParentIfPresent();
100 auto *view = ohosPlatformWindow->ownedViewOrNull();
103 qOhosReportFatalErrorAndAbort(
"view was null, but should not be");
105 view->addForeignWindowChild(
this);