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);
42 stackNode->addChildOrFail(*embeddedComponentNode);
43 windowIdStruct->stack = stackNode->handle();
46 m_jsStateData = QtOhos::makeProxyWithJsThreadDeleter(
47 std::make_shared<JsStateData>(JsStateData {
48 .embeddedWindow = std::make_unique<QArkUi::QEmbeddedWindowNode>(
49 std::move(stackNode), std::move(embeddedComponentNode),
50 std::move(windowIdStruct)),
64void QOhosForeignWindow::setGeometry(
const QRect &unscaledGeometry)
66 auto scaledGeometry = QHighDpi::fromNative(QRectF(unscaledGeometry),
67 static_cast<QOhosPlatformScreen *>(screen())->pixelScalingCoefficient());
70 m_jsStateData->embeddedWindow->setSize(scaledGeometry.size());
71 m_jsStateData->embeddedWindow->setPosition(scaledGeometry.topLeft());
74 setWindowGeometryFromOhos(unscaledGeometry);
84void QOhosForeignWindow::setParent(
const QPlatformWindow *window)
86 if (window !=
nullptr && window->isForeignWindow())
87 qOhosReportFatalErrorAndAbort(
"Reparenting to foreign windows is not supported");
89 if (window ==
nullptr) {
91 m_jsStateData->embeddedWindow->detachFromParentIfPresent();
97 auto *view = ohosPlatformWindow->ownedViewOrNull();
100 qOhosReportFatalErrorAndAbort(
"view was null, but should not be");
102 view->addForeignWindowChild(
this);