From c426fba4e95a7ff90a404b33c40e5e3f57d0df7c Mon Sep 17 00:00:00 2001 From: cuitengfei Date: Thu, 6 Jun 2024 23:33:21 +0800 Subject: [PATCH] fix cj frontend error Signed-off-by: cuitengfei Change-Id: I5337c15912baa3163a8e2bc1e41c30f682a0e3d9 --- adapter/ohos/entrance/ui_content_impl.cpp | 6 +- build/libace.map | 7 + frameworks/bridge/cj_frontend/BUILD.gn | 18 ++- .../cj_frontend/cppview/native_view.cpp | 13 ++ .../bridge/cj_frontend/cppview/native_view.h | 1 + .../frontend/cj_frontend_abstract.cpp | 60 ++++++- .../frontend/cj_frontend_abstract.h | 12 +- .../cj_frontend/frontend/cj_page_router.h | 4 + .../frontend/cj_page_router_abstract.h | 15 +- .../frontend/cj_page_router_ng.cpp | 19 ++- .../cj_frontend/frontend/cj_page_router_ng.h | 4 +- .../interfaces/cj_ffi/cj_alert_dialog_ffi.h | 11 +- .../interfaces/cj_ffi/cj_common_ffi.h | 23 +++ .../cj_ffi/cj_customdialog_controller_ffi.h | 6 +- .../interfaces/cj_ffi/cj_flex_ffi.cpp | 2 +- .../interfaces/cj_ffi/cj_foreach_ffi.cpp | 8 +- .../interfaces/cj_ffi/cj_foreach_ffi.h | 5 +- .../interfaces/cj_ffi/cj_image_ffi.cpp | 5 + .../interfaces/cj_ffi/cj_image_ffi.h | 1 + .../interfaces/cj_ffi/cj_list_ffi.cpp | 7 + .../interfaces/cj_ffi/cj_list_ffi.h | 1 + .../cj_ffi/cj_richeditor_controller_ffi.cpp | 33 +++- .../cj_ffi/cj_richeditor_controller_ffi.h | 2 +- .../interfaces/cj_ffi/cj_scroll_ffi.cpp | 7 + .../interfaces/cj_ffi/cj_scroll_ffi.h | 1 + .../interfaces/cj_ffi/cj_textfield_ffi.cpp | 12 ++ .../interfaces/cj_ffi/cj_textfield_ffi.h | 2 + .../interfaces/cj_ffi/cj_toggle_ffi.cpp | 5 + .../interfaces/cj_ffi/cj_toggle_ffi.h | 1 + .../cj_ffi/cj_view_abstract_ffi.cpp | 59 +++---- .../interfaces/cj_ffi/cj_view_abstract_ffi.h | 3 +- .../interfaces/cj_ffi/cj_web_ffi.cpp | 147 ++++++++++++++---- .../interfaces/cj_ffi/cj_web_ffi.h | 41 ++++- .../interfaces/cj_ffi/font/cj_font_ffi.cpp | 53 +++++++ .../interfaces/cj_ffi/font/cj_font_ffi.h | 29 ++++ .../interfaces/cj_ffi/mock/cj_web_mock.cpp | 12 +- .../canvas_rendering_context_2d_model_ng.h | 2 +- .../pattern/custom/custom_node.h | 2 +- .../pattern/custom_paint/canvas_model.h | 2 +- .../pattern/stage/page_pattern.cpp | 2 +- 40 files changed, 527 insertions(+), 116 deletions(-) create mode 100644 frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.cpp create mode 100644 frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.h diff --git a/adapter/ohos/entrance/ui_content_impl.cpp b/adapter/ohos/entrance/ui_content_impl.cpp index c958604c5647..ee1e5d903efa 100644 --- a/adapter/ohos/entrance/ui_content_impl.cpp +++ b/adapter/ohos/entrance/ui_content_impl.cpp @@ -1520,7 +1520,9 @@ UIContentErrorCode UIContentImpl::CommonInitialize( auto token = context->GetToken(); container->SetToken(token); container->SetParentToken(parentToken_); - container->SetPageUrlChecker(AceType::MakeRefPtr(context, info)); + if (!isCJFrontend) { + container->SetPageUrlChecker(AceType::MakeRefPtr(context, info)); + } container->SetNavigationRoute(AceType::MakeRefPtr(context->GetBundleName())); // Mark the relationship between windowId and containerId, it is 1:1 SubwindowManager::GetInstance()->AddContainerId(window->GetWindowId(), instanceId_); @@ -1529,6 +1531,8 @@ UIContentErrorCode UIContentImpl::CommonInitialize( if (runtime_) { container->GetSettings().SetUsingSharedRuntime(true); container->SetSharedRuntime(runtime_); + } else if (isCJFrontend) { + container->GetSettings().SetUsingSharedRuntime(true); } else { container->GetSettings().SetUsingSharedRuntime(false); } diff --git a/build/libace.map b/build/libace.map index 9036fb84db02..84e569aedf9c 100644 --- a/build/libace.map +++ b/build/libace.map @@ -223,6 +223,9 @@ OHOS::Ace::PipelineBase::PrepareOpenImplicitAnimation*; OHOS::Ace::PipelineBase::PrepareCloseImplicitAnimation*; OHOS::Ace::PipelineBase::GetCurrentDensity*; + OHOS::Ace::PipelineBase::RegisterFont*; + OHOS::Ace::PipelineBase::GetSystemFontList*; + OHOS::Ace::PipelineBase::GetSystemFont*; OHOS::Ace::NG::ViewAbstract::*; OHOS::Ace::NG::Inspector::*; OHOS::Ace::V2::Inspector::*; @@ -239,6 +242,8 @@ OHOS::Ace::StorageProxy::*; OHOS::Ace::EnvironmentProxy::*; OHOS::Ace::AceScoringLog::*; + "OHOS::Ace::NG::CustomNode::FlushReload()"; + "OHOS::Ace::CanvasModel::GetInstance()"; virtual?thunk?to?OHOS::Ace::Animator::~Animator??; virtual?thunk?to?OHOS::Ace::Frontend::MaybeRelease*; @@ -273,6 +278,7 @@ vtable?for?OHOS::Ace::NG::SwipeGesture; vtable?for?OHOS::Ace::NG::PanGesture; vtable?for?OHOS::Ace::NG::GestureGroup; + vtable?for?OHOS::Ace::NG::CanvasRenderingContext2DModelNG; VTT?for?OHOS::Ace::Animator; VTT?for?OHOS::Ace::Container; @@ -293,6 +299,7 @@ VTT?for?OHOS::Ace::NG::SwipeGesture; VTT?for?OHOS::Ace::NG::PanGesture; VTT?for?OHOS::Ace::NG::GestureGroup; + VTT?for?OHOS::Ace::NG::CanvasRenderingContext2DModelNG; OHOS::Ace::AceScopedTraceFlag::*; OHOS::Ace::AnimationUtils::*; diff --git a/frameworks/bridge/cj_frontend/BUILD.gn b/frameworks/bridge/cj_frontend/BUILD.gn index 59f98a46e088..c67d62038dff 100644 --- a/frameworks/bridge/cj_frontend/BUILD.gn +++ b/frameworks/bridge/cj_frontend/BUILD.gn @@ -61,6 +61,9 @@ template("cj_frontend") { } sources += [ + "cppview/canvas_gradient.cpp", + "cppview/canvas_path.cpp", + "cppview/canvas_renderer.cpp", "cppview/data_change_listener.cpp", "cppview/gesture.cpp", "cppview/interactable_view.cpp", @@ -81,6 +84,7 @@ template("cj_frontend") { "interfaces/cj_ffi/cj_badge_ffi.cpp", "interfaces/cj_ffi/cj_blank_ffi.cpp", "interfaces/cj_ffi/cj_button_ffi.cpp", + "interfaces/cj_ffi/cj_canvas_ffi.cpp", "interfaces/cj_ffi/cj_checkbox_ffi.cpp", "interfaces/cj_ffi/cj_checkbox_group_ffi.cpp", "interfaces/cj_ffi/cj_circle_ffi.cpp", @@ -171,6 +175,7 @@ template("cj_frontend") { "interfaces/cj_ffi/cj_view_context_ffi.cpp", "interfaces/cj_ffi/cj_view_stack_processor_ffi.cpp", "interfaces/cj_ffi/concurrency/cj_concurrency_ffi.cpp", + "interfaces/cj_ffi/font/cj_font_ffi.cpp", "interfaces/cj_ffi/measure/cj_measure_ffi.cpp", "interfaces/cj_ffi/prompt/cj_prompt_ffi.cpp", "interfaces/cj_ffi/router/cj_router_ffi.cpp", @@ -200,7 +205,6 @@ template("cj_frontend") { } else { sources -= [ "interfaces/cj_ffi/cj_richeditor_controller_ffi.cpp", - "interfaces/cj_ffi/cj_richeditor_ffi.cpp", "interfaces/cj_ffi/state_manage/cj_environment.cpp", "interfaces/cj_ffi/state_manage/cj_persistent_storage_ffi.cpp", ] @@ -214,7 +218,17 @@ template("cj_frontend") { if (defined(config.web_components_support) && config.web_components_support) { - sources += [ "interfaces/cj_ffi/cj_richtext_ffi.cpp" ] + external_deps += [ + "ability_runtime:app_context", + "webview:cj_webview_ffi", + "webview:libnweb", + ] + sources += [ + "interfaces/cj_ffi/cj_richtext_ffi.cpp", + "interfaces/cj_ffi/cj_web_ffi.cpp", + ] + } else { + sources += [ "interfaces/cj_ffi/mock/cj_web_mock.cpp" ] } if (defined(config.video_components_support) && diff --git a/frameworks/bridge/cj_frontend/cppview/native_view.cpp b/frameworks/bridge/cj_frontend/cppview/native_view.cpp index 9f08693622ec..2088c3cba48d 100644 --- a/frameworks/bridge/cj_frontend/cppview/native_view.cpp +++ b/frameworks/bridge/cj_frontend/cppview/native_view.cpp @@ -154,6 +154,19 @@ void NativeView::MarkNeedUpdate() } } +void NativeView::FlushReload() +{ + auto node = node_.Upgrade(); + if (!node) { + LOGE("fail to update due to custom Node is null"); + return; + } + if (AceType::InstanceOf(node)) { + auto customNode = AceType::DynamicCast(node); + customNode->FlushReload(); + } +} + void NativeView::FinishUpdateFunc(int32_t elmtId) { LOGI("FinishUpdateFunc start"); diff --git a/frameworks/bridge/cj_frontend/cppview/native_view.h b/frameworks/bridge/cj_frontend/cppview/native_view.h index 035a3707b596..07ea30905232 100644 --- a/frameworks/bridge/cj_frontend/cppview/native_view.h +++ b/frameworks/bridge/cj_frontend/cppview/native_view.h @@ -87,6 +87,7 @@ public: void SyncInstanceId(); void RestoreInstanceId(); void MarkNeedUpdate(); + void FlushReload(); bool NeedsUpdate() const { return needsUpdate_; diff --git a/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.cpp b/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.cpp index 4bcc65e6e069..3fc425e6d404 100644 --- a/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.cpp +++ b/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.cpp @@ -27,6 +27,7 @@ #include "core/components/navigator/navigator_component.h" #include "core/components_ng/pattern/overlay/overlay_manager.h" #include "core/pipeline_ng/pipeline_context.h" +#include "core/common/font_manager.h" using namespace OHOS::Ace::NG; using namespace OHOS::Ace; @@ -41,7 +42,7 @@ constexpr int32_t CALLBACK_DATACODE_ZERO = 0; // helper function to run OverlayManager task // ensures that the task runs in subwindow instead of main Window -void MainWindowOverlay(std::function)>&& task) +void MainWindowOverlay(std::function)>&& task, const std::string& name) { auto currentId = Container::CurrentId(); ContainerScope scope(currentId); @@ -53,7 +54,7 @@ void MainWindowOverlay(std::function)>&& task) auto overlayManager = weak.Upgrade(); task(overlayManager); }, - TaskExecutor::TaskType::UI, "CJFroentendMainWindowOverlay"); + TaskExecutor::TaskType::UI, name); } } // namespace @@ -95,6 +96,15 @@ bool CJFrontendAbstract::Initialize(FrontendType type, const RefPtrFlushReload(); +} + void CJFrontendAbstract::RebuildAllPages() { CHECK_NULL_VOID(pageRouterManager_); @@ -223,7 +233,7 @@ void CJFrontendAbstract::ShowToast( ContainerScope scope(containerId); overlayManager->ShowToast(message, durationTime, bottom, isRightToLeft, showMode); }; - MainWindowOverlay(std::move(task)); + MainWindowOverlay(std::move(task), "ArkUIOverlayShowToast"); } void CJFrontendAbstract::ShowDialog(const std::string& title, const std::string& message, @@ -266,7 +276,7 @@ void CJFrontendAbstract::ShowDialogInner(DialogProperties& dialogProperties, CHECK_NULL_VOID(dialog); } }; - MainWindowOverlay(std::move(task)); + MainWindowOverlay(std::move(task), "ArkUIShowDialogInner"); } void CJFrontendAbstract::ShowActionMenu(const std::string& title, const std::vector& button, @@ -359,7 +369,7 @@ void CJFrontendAbstract::OpenCustomDialog(const PromptDialogAttr &dialogAttr, overlayManager->OpenCustomDialog(dialogProperties, std::move(callback)); } }; - MainWindowOverlay(std::move(task)); + MainWindowOverlay(std::move(task), "ArkUIOpenCustomDialog"); return; } @@ -371,8 +381,46 @@ void CJFrontendAbstract::CloseCustomDialog(int32_t id) overlayManager->CloseCustomDialog(id); SubwindowManager::GetInstance()->CloseCustomDialogNG(id); }; - MainWindowOverlay(std::move(task)); + MainWindowOverlay(std::move(task), "ArkUICloseCustomDialog"); return; } +void CJFrontendAbstract::RegisterFont(const std::string& familyName, const std::string& familySrc, + const std::string& bundleName, const std::string& moduleName) +{ + pipelineContextHolder_.Get()->RegisterFont(familyName, familySrc, bundleName, moduleName); +} + +VectorStringHandle CJFrontendAbstract::GetSystemFontList() +{ + auto fontList = new std::vector; + pipelineContextHolder_.Get()->GetSystemFontList(*fontList); + return fontList; +} + +NativeOptionFontInfo CJFrontendAbstract::GetSystemFont(const std::string& fontName) +{ + auto fontInfo = new FontInfo; + if (!pipelineContextHolder_.Get()->GetSystemFont(fontName, *fontInfo)) { + return NativeOptionFontInfo { + .hasValue = false, + .info = nullptr + }; + } + return NativeOptionFontInfo { + .hasValue = true, + .info = new NativeFontInfo { + .path = fontInfo->path.c_str(), + .postScriptName = fontInfo->postScriptName.c_str(), + .fullName = fontInfo->fullName.c_str(), + .family = fontInfo->family.c_str(), + .subfamily = fontInfo->subfamily.c_str(), + .weight = fontInfo->weight, + .width = fontInfo->width, + .italic = fontInfo->italic, + .monoSpace = fontInfo->monoSpace, + .symbolic = fontInfo->symbolic + } + }; +} } // namespace OHOS::Ace diff --git a/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.h b/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.h index a236c720536b..f3d7fa42ca55 100644 --- a/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.h +++ b/frameworks/bridge/cj_frontend/frontend/cj_frontend_abstract.h @@ -22,6 +22,8 @@ #include "base/utils/measure_util.h" #include "bridge/common/manifest/manifest_parser.h" #include "bridge/common/utils/pipeline_context_holder.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_collection_ffi.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" #include "core/components_ng/pattern/overlay/overlay_manager.h" #include "cj_page_router_abstract.h" #include "core/common/frontend.h" @@ -47,7 +49,7 @@ public: ~CJFrontendAbstract() override; bool Initialize(FrontendType type, const RefPtr& taskExecutor) override; void Destroy() override; - + void FlushReload() override; bool LoadAppLibrary(); void AttachPipelineContext(const RefPtr& context) override; @@ -110,6 +112,14 @@ public: void ShowActionMenuInner(DialogProperties& dialogProperties, const std::vector& button, std::function&& callback); + // ---------------- + // Font + // ---------------- + void RegisterFont(const std::string& familyName, const std::string& familySrc, const std::string& bundleName = "", + const std::string& moduleName = ""); + + VectorStringHandle GetSystemFontList(); + NativeOptionFontInfo GetSystemFont(const std::string& fontName); #if defined(PREVIEW) void TransferJsResponseDataPreview(int32_t callbackId, int32_t code, ResponseData responseData) const; diff --git a/frameworks/bridge/cj_frontend/frontend/cj_page_router.h b/frameworks/bridge/cj_frontend/frontend/cj_page_router.h index 09ffbb15afbe..92a6ee3ba8ba 100644 --- a/frameworks/bridge/cj_frontend/frontend/cj_page_router.h +++ b/frameworks/bridge/cj_frontend/frontend/cj_page_router.h @@ -41,6 +41,10 @@ public: { return loadingPage_; } + void FlushReload() override + { + LOGE("not support in old pipeline"); + } protected: void StartPush(const RouterPageInfo& target, const std::string& params, RouterMode mode) override; diff --git a/frameworks/bridge/cj_frontend/frontend/cj_page_router_abstract.h b/frameworks/bridge/cj_frontend/frontend/cj_page_router_abstract.h index ed2e5bca981f..643dd6d785a9 100644 --- a/frameworks/bridge/cj_frontend/frontend/cj_page_router_abstract.h +++ b/frameworks/bridge/cj_frontend/frontend/cj_page_router_abstract.h @@ -61,7 +61,7 @@ public: virtual std::string GetCurrentPageUrl() = 0; virtual void EnableAlertBeforeBackPage(const std::string& message, std::function callback) = 0; virtual bool AllowPopLastPage() = 0; - + virtual RefPtr GetCurrentPageNode() { return nullptr; } virtual bool PopWithExitCheck(); void RunPage(const std::string& url, const std::string& params); void Push(const RouterPageInfo& target, const std::string& params, RouterMode = RouterMode::STANDARD); @@ -69,12 +69,22 @@ public: void Replace(const RouterPageInfo& target, const std::string& params, RouterMode = RouterMode::STANDARD); void BackWithTarget(const RouterPageInfo& target, const std::string& params); void Clear(); - + virtual void FlushReload() = 0; void SetManifestParser(const RefPtr& manifestParser) { manifestParser_ = manifestParser; } + std::list GetNativeViews() + { + return viewStack_; + } + + void AddView(int64_t viewId) + { + viewStack_.emplace_back(viewId); + } + protected: explicit CJPageRouterAbstract(WeakPtr frontend): frontend_(std::move(frontend)) {} virtual void StartPush(const RouterPageInfo& target, const std::string& params, @@ -115,6 +125,7 @@ protected: bool inRouterOpt_ = false; RouterPageInfo ngBackUri_ = { "" }; std::string backParam_; + std::list viewStack_; private: int32_t nextPageId_ = 0; diff --git a/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.cpp b/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.cpp index ab9943524337..fa2086e5af25 100644 --- a/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.cpp +++ b/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.cpp @@ -109,6 +109,7 @@ bool LoadNativeViewNG(NativeView* view) view->FireOnTransition(); NG::ViewStackProcessor::GetInstance()->SetPageNode(nullptr); }); + pageRouterManager->AddView(view->GetID()); LOGI("OHOSAceFrameworkNGLoadCJView end."); return true; } @@ -266,15 +267,18 @@ void CJPageRouterNG::StartClean() bool CJPageRouterNG::StartPop() { ProcessGuard guard(this); - if (pageRouterStack_.size() <= 1) { + if (pageRouterStack_.size() <= 1 || viewStack_.size() <= 1) { // the last page. return false; } auto topNode = pageRouterStack_.back(); + auto topView = viewStack_.back(); pageRouterStack_.pop_back(); + viewStack_.pop_back(); if (!OnPopPage(true, true)) { LOGE("fail to pop page."); pageRouterStack_.emplace_back(topNode); + viewStack_.emplace_back(topView); return false; } return true; @@ -546,7 +550,7 @@ void CJPageRouterNG::MovePageToFront(int32_t index, const RefPtr& pag void CJPageRouterNG::PopPage(const std::string& params, bool needShowNext, bool needTransition) { - if (pageRouterStack_.empty()) { + if (pageRouterStack_.empty() || viewStack_.empty()) { LOGE("page router stack size is illegal."); return; } @@ -555,11 +559,14 @@ void CJPageRouterNG::PopPage(const std::string& params, bool needShowNext, bool return; } auto topNode = pageRouterStack_.back(); + auto topView = viewStack_.back(); pageRouterStack_.pop_back(); + viewStack_.pop_back(); if (params.empty()) { if (!OnPopPage(needShowNext, needTransition)) { LOGE("fail to pop page."); pageRouterStack_.emplace_back(topNode); + viewStack_.emplace_back(topView); } return; } @@ -579,6 +586,7 @@ void CJPageRouterNG::PopPage(const std::string& params, bool needShowNext, bool LOGE("fail to pop page"); // restore stack and pageParam. pageRouterStack_.emplace_back(topNode); + viewStack_.emplace_back(topView); pageInfo->ReplacePageParams(temp); } @@ -696,4 +704,11 @@ bool CJPageRouterNG::OnCleanPageStack() return false; } +void CJPageRouterNG::FlushReload() +{ + for (const auto& viewId : viewStack_) { + auto view = FFI::FFIData::GetData(viewId); + view->FlushReload(); + } +} } // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.h b/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.h index f46431dc4629..c41b706a16da 100644 --- a/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.h +++ b/frameworks/bridge/cj_frontend/frontend/cj_page_router_ng.h @@ -36,12 +36,14 @@ public: bool PopWithExitCheck() override; + void FlushReload() override; + // router operation int32_t GetStackSize() const override; void GetState(int32_t& index, std::string& name, std::string& path) override; std::string GetParams() const override; - RefPtr GetCurrentPageNode() const + RefPtr GetCurrentPageNode() override { if (pageRouterStack_.empty()) { LOGE("fail to get current page node due to page is null"); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_alert_dialog_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_alert_dialog_ffi.h index 066741349927..b70507ba7009 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_alert_dialog_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_alert_dialog_ffi.h @@ -18,19 +18,10 @@ #include +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" #include "bridge/cj_frontend/interfaces/cj_ffi/cj_macro.h" extern "C" { - struct NativeLength { - double value; - int32_t unitType; - }; - - struct NativeOffset { - NativeLength dx; - NativeLength dy; - }; - struct NativeRectangle { double x; int32_t xUnit; diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h index 8d971274a63d..9e80040fbf8c 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h @@ -26,11 +26,34 @@ extern "C" { +struct NativeFontInfo { + const char* path = ""; + const char* postScriptName = ""; + const char* fullName = "" ; + const char* family = ""; + const char* subfamily = ""; + uint32_t weight = 0; + uint32_t width = 0; + bool italic = false; + bool monoSpace = false; + bool symbolic = false; +}; + +struct NativeOptionFontInfo { + bool hasValue; + NativeFontInfo* info; +}; + struct NativeLength { double value; int32_t unitType; }; +struct NativeOffset { + NativeLength dx; + NativeLength dy; +}; + struct NativeOptionLength { bool hasValue; NativeLength value; diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_customdialog_controller_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_customdialog_controller_ffi.h index 662680ae5dc7..49616cf4a911 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_customdialog_controller_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_customdialog_controller_ffi.h @@ -20,6 +20,7 @@ #include #include "bridge/cj_frontend/cppview/native_view.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" #include "bridge/cj_frontend/interfaces/cj_ffi/cj_macro.h" #include "bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h" #include "core/components/dialog/dialog_component.h" @@ -28,11 +29,6 @@ #include "cj_animate_param_ffi.h" extern "C" { -struct NativeOffset { - NativeLength dx; - NativeLength dy; -}; - struct NativeCustomDialogControllerOptions { void(*cancel)(); bool autoCancel; diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_flex_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_flex_ffi.cpp index e8d62042dc0c..79692b1d2534 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_flex_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_flex_ffi.cpp @@ -86,7 +86,7 @@ void FlexCreateFlexComponent(CJFlexParams params) FlexModel::GetInstance()->SetMainAxisAlign(static_cast(justifyVal)); } if (params.alignItems >= 0 && params.alignItems <= CROSS_ALIGN_MAX_VALUE) { - FlexModel::GetInstance()->SetCrossAxisAlign(static_cast(params.alignItems + 1)); + FlexModel::GetInstance()->SetCrossAxisAlign(static_cast(params.alignItems)); } } void FlexCreateWrapComponent(CJFlexParams params) diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.cpp index 95a0f3415fe0..64df596593a5 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.cpp @@ -29,14 +29,14 @@ using namespace OHOS::Ace::Framework; extern "C" { void FfiOHOSAceFrameworkForEachCreateFU( - char* viewId, int64_t parentViewID, int64_t dataSize, void (*callbackView)(int64_t), char* (*callbackKey)(int64_t)) + char* viewId, int64_t parentViewID, int64_t dataSize, ViewCallBack callbackView, IdCallBack callbackKey) { std::function ffiViewCallback = CJLambda::Create(callbackView); std::function ffiKeyCallback = [callback = CJLambda::Create(callbackKey)]( int64_t info) -> std::string { - char* ffiStr = callback(info); - std::string res = std::string(ffiStr); - free(ffiStr); + auto ffiStr = callback(info); + std::string res = ffiStr.value; + ffiStr.free(ffiStr.value); return res; }; auto* model = ForEachModel::GetInstance(); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.h index 61dde0148565..f969f29329c1 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_foreach_ffi.h @@ -30,8 +30,11 @@ struct VectorToCFFIArrayString { void (*free)(VectorToCFFIArrayString*); }; +typedef void (*ViewCallBack)(int64_t); +typedef ExternalString (*IdCallBack)(int64_t); + CJ_EXPORT void FfiOHOSAceFrameworkForEachCreateFU( - char* viewId, int64_t parentViewID, int64_t dataSize, void (*callbackView)(int64_t), char* (*callbackKey)(int64_t)); + char* viewId, int64_t parentViewID, int64_t dataSize, ViewCallBack callbackView, IdCallBack callbackKey); CJ_EXPORT void FfiOHOSAceFrameworkForEachCreate(); CJ_EXPORT void FfiOHOSAceFrameworkForEachPop(); CJ_EXPORT VectorToCFFIArrayString FfiOHOSAceFrameworkViewGetIdArray(int64_t elmtId); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.cpp index e29e190bfe93..1554b83c2c60 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.cpp @@ -96,6 +96,11 @@ void FfiOHOSAceFrameworkImageSetAlt(const char* url) ImageModel::GetInstance()->SetAlt(ImageSourceInfo { url, bundleName, moduleName }); } +CJ_EXPORT void FfiOHOSAceFrameworkImageSetBorderRadius() +{ + ImageModel::GetInstance()->SetBackBorder(); +} + void FfiOHOSAceFrameworkImageSetObjectFit(int32_t objectFit) { if (!OHOS::Ace::Framework::Utils::CheckParamsValid(objectFit, IMAGE_FITS.size())) { diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.h index 106555a332bf..4740cee2a313 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_image_ffi.h @@ -31,6 +31,7 @@ CJ_EXPORT void FfiOHOSAceFrameworkImageSetRenderMode(int32_t renderMode); CJ_EXPORT void FfiOHOSAceFrameworkImageSetSourceSize( double width, int32_t widthUnit, double height, int32_t heightUnit); CJ_EXPORT void FfiOHOSAceFrameworkImageSetSyncLoad(bool syncLoad); +CJ_EXPORT void FfiOHOSAceFrameworkImageSetBorderRadius(); CJ_EXPORT void FfiOHOSAceFrameworkImageSetImageFill(uint32_t color); CJ_EXPORT void FfiOHOSAceFrameworkImageSetAutoResize(bool autoResize); CJ_EXPORT void FfiOHOSAceFrameworkImageSetMatchTextDirection(bool isMatchTextDirection); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.cpp index e7712a8949e8..0874375b2ac9 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.cpp @@ -196,6 +196,13 @@ void FfiOHOSAceFrameworkListSetSticky(int32_t style) ListModel::GetInstance()->SetSticky(STICKY_STYLE[style]); } +void FfiOHOSAceFrameworkListSetNestedScroll(int32_t scrollForward, int32_t scrollBackward) +{ + NestedScrollOptions localNestedScrollOptions = {.forward = NestedScrollMode(scrollForward), + .backward = NestedScrollMode(scrollBackward)}; + ListModel::GetInstance()->SetNestedScroll(localNestedScrollOptions); +} + void FfiOHOSAceFrameworkListSetCachedCount(int32_t cachedCount) { int32_t value = cachedCount < 0 ? 1 : cachedCount; diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.h index 322145adf7fa..8f77d291a07a 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_list_ffi.h @@ -52,6 +52,7 @@ CJ_EXPORT void FfiOHOSAceFrameworkListSetLanesByLengthConstrain( double min, int32_t minUnit, double max, int32_t maxUnit); CJ_EXPORT void FfiOHOSAceFrameworkListSetAlignListItem(int32_t align); CJ_EXPORT void FfiOHOSAceFrameworkListSetSticky(int32_t style); +CJ_EXPORT void FfiOHOSAceFrameworkListSetNestedScroll(int32_t scrollForward, int32_t scrollBackward); CJ_EXPORT void FfiOHOSAceFrameworkListSetOnScrollFrameBegin(double (*callback)(double offset, int32_t state)); CJ_EXPORT void FfiOHOSAceFrameworkListSetItemDeleteCallback(bool (*callback)(int32_t value)); CJ_EXPORT void FfiOHOSAceFrameworkListSetScrollIndexCallback(void (*callback)(int32_t firstIndex, int32_t lastIndex)); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.cpp index 0c7df4064107..2512e473a51c 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.cpp @@ -98,7 +98,14 @@ void NativeRichEditorController::ParseRichEditorTextSpanResult( nativeTextResult.offsetInSpanStart = spanObject.offsetInSpan[0]; nativeTextResult.offsetInSpanEnd = spanObject.offsetInSpan[1]; nativeTextResult.spanPosition = spanPosition; - nativeTextResult.value = spanObject.valueString.c_str(); + auto len = spanObject.valueString.size() + 1; + char* cString = static_cast(malloc(sizeof(char) * len)); + if (cString == nullptr) { + LOGE("ParseRichEditorTextSpanResult error, malloc cString failed"); + return; + } + std::char_traits::copy(cString, spanObject.valueString.c_str(), len); + nativeTextResult.value = cString; } void NativeRichEditorController::ParseRichEditorImageSpanResult( @@ -397,9 +404,17 @@ void NativeRichEditorController::UpdateSpanStyleImage( richEditorController->UpdateSpanStyle(start, end, textStyle, imageStyle); } -static void NativeRichEditorSpanResultListFree(NativeRichEditorSpanResult* src) +static void NativeRichEditorSpanResultListFree(int64_t size, NativeRichEditorSpanResult* src) { - delete src; + if (!src) { + return; + } + for (int64_t i = 0; i < size; i++) { + if (src[i].textResult.value) { + delete src[i].textResult.value; + } + } + delete[] src; } NativeRichEditorSpanResultList NativeRichEditorController::GetSpans(int32_t start, int32_t end) @@ -413,7 +428,9 @@ NativeRichEditorSpanResultList NativeRichEditorController::GetSpans(int32_t star SelectionInfo selectionInfo = richEditorController->GetSpansInfo(start, end); const std::list& spanObjectList = selectionInfo.GetSelection().resultObjects; - + if (spanObjectList.size() == 0) { + return result; + } auto spans = new NativeRichEditorSpanResult[spanObjectList.size()]; size_t idx = 0; for (const ResultObject& spanObject : spanObjectList) { @@ -454,7 +471,9 @@ void NativeRichEditorController::UpdateParagraphStyle( { style.leadingMargin = std::make_optional(); Dimension resWidth(params.margin, static_cast(params.marginUnit)); - style.leadingMargin->size = NG::LeadingMarginSize(resWidth, Dimension(0.0, DimensionUnit::PX)); + auto widthCalc = CalcDimension(resWidth.ConvertToPx()); + auto heightCalc = CalcDimension(0.0); + style.leadingMargin->size = NG::LeadingMarginSize(widthCalc, heightCalc); break; } case MarginType::MARGIN_PLACEHOLDER: @@ -468,7 +487,9 @@ void NativeRichEditorController::UpdateParagraphStyle( #endif Dimension width(placeholder.width, static_cast(placeholder.widthUnit)); Dimension height(placeholder.height, static_cast(placeholder.heightUnit)); - style.leadingMargin->size = NG::LeadingMarginSize(width, height); + auto widthCalc = CalcDimension(width.ConvertToPx()); + auto heightCalc = CalcDimension(height.ConvertToPx()); + style.leadingMargin->size = NG::LeadingMarginSize(widthCalc, heightCalc); break; } default: diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.h index cdbd84751ed4..2821d50c2d78 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_richeditor_controller_ffi.h @@ -136,7 +136,7 @@ struct NativeRichEditorSpanResult { struct NativeRichEditorSpanResultList { NativeRichEditorSpanResult* array; int64_t size; - void (*free)(NativeRichEditorSpanResult*); + void (*free)(int64_t, NativeRichEditorSpanResult*); }; struct NativeRichEditorSelection { diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.cpp index 5908b8c969ff..f557da308718 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.cpp @@ -203,6 +203,13 @@ void FfiOHOSAceFrameworkScrollScrollBarWidth(double width, int32_t unit) ScrollModel::GetInstance()->SetScrollBarWidth(value); } +void FfiOHOSAceFrameworkScrollNestedScroll(int32_t scrollForward, int32_t scrollBackward) +{ + NestedScrollOptions localNestedScrollOptions = {.forward = NestedScrollMode(scrollForward), + .backward = NestedScrollMode(scrollBackward)}; + ScrollModel::GetInstance()->SetNestedScroll(localNestedScrollOptions); +} + void FfiOHOSAceFrameworkScrollOnScroll(void (*callback)(CJOffset scrollInfo)) { ScrollModel::GetInstance()->SetOnScroll( diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.h index 2902864b23a7..b4a65b4b7fc8 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_scroll_ffi.h @@ -70,6 +70,7 @@ CJ_EXPORT void FfiOHOSAceFrameworkScrollScrollable(int32_t scrollDirection); CJ_EXPORT void FfiOHOSAceFrameworkScrollScrollBar(int32_t barState); CJ_EXPORT void FfiOHOSAceFrameworkScrollScrollBarColor(uint32_t color); CJ_EXPORT void FfiOHOSAceFrameworkScrollScrollBarWidth(double width, int32_t unit); +CJ_EXPORT void FfiOHOSAceFrameworkScrollNestedScroll(int32_t scrollForward, int32_t scrollBackward); CJ_EXPORT void FfiOHOSAceFrameworkScrollOnScroll(void (*callback)(CJOffset offset)); CJ_EXPORT void FfiOHOSAceFrameworkScrollOnScrollEdge(void (*callback)(int32_t edge)); CJ_EXPORT void FfiOHOSAceFrameworkScrollOnScrollEnd(void (*callback)()); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.cpp index 04e8615f1039..a556419cb24e 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.cpp @@ -112,6 +112,18 @@ void FfiOHOSAceFrameworkTextFieldSetPaddings(CJEdge params) FfiOHOSAceFrameworkViewAbstractSetPaddings(params); } +void FfiOHOSAceFrameworkTextFieldSetMargin(double value, int32_t unit) +{ + FfiOHOSAceFrameworkViewAbstractSetMargin(value, unit); + TextFieldModel::GetInstance()->SetMargin(); +} + +void FfiOHOSAceFrameworkTextFieldSetMargins(CJEdge params) +{ + FfiOHOSAceFrameworkViewAbstractSetMargins(params); + TextFieldModel::GetInstance()->SetMargin(); +} + void FfiOHOSAceFrameworkTextFieldSetPlaceholderColor(uint32_t value) { TextFieldModel::GetInstance()->SetPlaceholderColor(Color(value)); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.h index 2726850b86bc..5fbe00daa47f 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_textfield_ffi.h @@ -32,6 +32,8 @@ CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetBorderRadius(double value, uint32_ CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetBackgroundColor(uint32_t color); CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetPadding(double value, int32_t unit); CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetPaddings(CJEdge params); +CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetMargin(double value, int32_t unit); +CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetMargins(CJEdge params); CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetType(int32_t value); CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetPlaceholderColor(uint32_t value); CJ_EXPORT void FfiOHOSAceFrameworkTextFieldSetPlaceholderFont( diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.cpp index b2b6d7dd6bd9..73909e10b40b 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.cpp @@ -93,4 +93,9 @@ void FfiOHOSAceFrameworkToggleOnChange(void (*callback)(bool isOn)) }; ToggleModel::GetInstance()->OnChange(std::move(onChange)); } + +void FfiOHOSAceFrameworkTogglePop() +{ + ToggleModel::GetInstance()->Pop(); +} } diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.h index afc44e9c4ec1..b799bbc19c0f 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_toggle_ffi.h @@ -32,6 +32,7 @@ CJ_EXPORT void FfiOHOSAceFrameworkTogglePadding(double left, int32_t leftUnit, d CJ_EXPORT void FfiOHOSAceFrameworkToggleSelectedColor(uint32_t color); CJ_EXPORT void FfiOHOSAceFrameworkToggleSwitchPointColor(uint32_t color); CJ_EXPORT void FfiOHOSAceFrameworkToggleOnChange(void (*callback)(bool isOn)); +CJ_EXPORT void FfiOHOSAceFrameworkTogglePop(); } #endif // OHOS_ACE_FRAMEWORK_CJ_TOGGLE_FFI_H diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp index 972d290775d0..00613aeb2f77 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.cpp @@ -1425,39 +1425,25 @@ void FfiOHOSAceFrameworkViewAbstractExpandSafeArea(uint32_t types, uint32_t edge ViewAbstractModel::GetInstance()->UpdateSafeAreaExpandOpts(opts); } -void FfiOHOSAceFrameworkViewAbstractbindSheetParam2(bool isShow, void (*builder)()) -{ - auto buildFunc = CJLambda::Create(builder); - NG::SheetStyle sheetStyle; - DoubleBindCallback callback = nullptr; - std::function onAppearCallback; - std::function onDisappearCallback; - std::function onWillAppearCallback; - std::function onWillDisappearCallback; - std::function shouldDismissFunc; - std::function onWillDismissCallback; - std::function onHeightDidChangeCallback; - std::function onDetentsDidChangeCallback; - std::function onWidthDidChangeCallback; - std::function onTypeDidChangeCallback; - std::function titleBuilderFunction; - std::function sheetSpringBackFunc; - ViewAbstractModel::GetInstance()->BindSheet(isShow, std::move(callback), std::move(buildFunc), - std::move(titleBuilderFunction), sheetStyle, std::move(onAppearCallback), std::move(onDisappearCallback), - std::move(shouldDismissFunc), std::move(onWillDismissCallback), std::move(onWillAppearCallback), - std::move(onWillDisappearCallback), std::move(onHeightDidChangeCallback), std::move(onDetentsDidChangeCallback), - std::move(onWidthDidChangeCallback), std::move(onTypeDidChangeCallback), std::move(sheetSpringBackFunc)); -} - void ParseSheetCallback(CJSheetOptions options, std::function& onAppear, - std::function& onDisappear, std::function& shouldDismiss) + std::function& onDisappear, std::function& shouldDismiss, std::function& onWillAppear, + std::function& onWillDisappear) { - onAppear = options.onAppear.hasValue ? CJLambda::Create(options.onAppear.value) - : ([]() -> void {}); - onDisappear = options.onDisappear.hasValue ? CJLambda::Create(options.onDisappear.value) - : ([]() -> void {}); - shouldDismiss = options.shouldDismiss.hasValue ? CJLambda::Create(options.shouldDismiss.value) - : ([]() -> void {}); + if (options.onAppear.hasValue) { + onAppear = CJLambda::Create(options.onAppear.value); + } + if (options.onDisappear.hasValue) { + onDisappear = CJLambda::Create(options.onDisappear.value); + } + if (options.shouldDismiss.hasValue) { + shouldDismiss = CJLambda::Create(options.shouldDismiss.value); + } + if (options.onWillAppear.hasValue) { + onWillAppear = CJLambda::Create(options.onWillAppear.value); + } + if (options.onWillDisappear.hasValue) { + onWillDisappear = CJLambda::Create(options.onWillDisappear.value); + } } void ParseSheetDetentHeight(const int args, NG::SheetHeight& detent) @@ -1552,13 +1538,14 @@ void ParseSheetTitle(CJSheetOptions option, NG::SheetStyle& sheetStyle, std::fun titleBuilderFunction = option.title.hasValue ? CJLambda::Create(option.title.value) : ([]() -> void {}); } -void FfiOHOSAceFrameworkViewAbstractbindSheetParam3(bool isShow, void (*builder)(), CJSheetOptions option) +void FfiOHOSAceFrameworkViewAbstractbindSheetParam(bool isShow, void (*builder)(), CJSheetOptions option) { auto buildFunc = CJLambda::Create(builder); NG::SheetStyle sheetStyle; DoubleBindCallback callback = nullptr; sheetStyle.sheetMode = NG::SheetMode::LARGE; sheetStyle.showDragBar = true; + sheetStyle.showInPage = false; std::function onAppearCallback; std::function onDisappearCallback; std::function onWillAppearCallback; @@ -1571,14 +1558,16 @@ void FfiOHOSAceFrameworkViewAbstractbindSheetParam3(bool isShow, void (*builder) std::function onTypeDidChangeCallback; std::function titleBuilderFunction; std::function sheetSpringBackFunc; - ParseSheetCallback(option, onAppearCallback, onDisappearCallback, shouldDismissFunc); + ParseSheetCallback(option, onAppearCallback, onWillDisappearCallback, shouldDismissFunc, + onWillAppearCallback, onWillDisappearCallback); ParseSheetStyle(option, sheetStyle); ParseSheetTitle(option, sheetStyle, titleBuilderFunction); ViewAbstractModel::GetInstance()->BindSheet(isShow, std::move(callback), std::move(buildFunc), std::move(titleBuilderFunction), sheetStyle, std::move(onAppearCallback), std::move(onDisappearCallback), std::move(shouldDismissFunc), std::move(onWillDismissCallback), std::move(onWillAppearCallback), - std::move(onWillDisappearCallback), std::move(onHeightDidChangeCallback), std::move(onDetentsDidChangeCallback), - std::move(onWidthDidChangeCallback), std::move(onTypeDidChangeCallback), std::move(sheetSpringBackFunc)); + std::move(onWillDisappearCallback), std::move(onHeightDidChangeCallback), + std::move(onDetentsDidChangeCallback), std::move(onWidthDidChangeCallback), + std::move(onTypeDidChangeCallback), std::move(sheetSpringBackFunc)); return; } diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h index 55638de91a1e..2d24943c9901 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h @@ -238,8 +238,7 @@ CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetScaleSingle(float scale); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetScaleX(float scaleVal); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetScaleY(float scaleVal); CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractSetOpacity(double opacity); -CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractbindSheetParam3(bool isShow, void (*builder)(), CJSheetOptions option); -CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractbindSheetParam2(bool isShow, void (*builder)()); +CJ_EXPORT void FfiOHOSAceFrameworkViewAbstractbindSheetParam(bool isShow, void (*builder)(), CJSheetOptions option); struct CJSetRotate { float dx; diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.cpp index 9bc0d03fc08c..2e61fd66cd89 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.cpp @@ -13,10 +13,9 @@ * limitations under the License. */ -#include "at_manager_impl.h" -#include "application_context.h" #include "cj_web_ffi.h" +#include "application_context.h" #include "cj_lambda.h" #include "webview_controller_impl.h" @@ -28,9 +27,9 @@ #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h" #include "core/common/container.h" #include "core/common/container_scope.h" +#include "core/components/web/web_event.h" #include "core/components_ng/pattern/web/web_model_ng.h" #include "core/pipeline/pipeline_base.h" -#include "core/components/web/web_event.h" using namespace OHOS::Ace; using namespace OHOS::FFI; @@ -46,6 +45,8 @@ struct FfiWebEvent { namespace OHOS::Ace::Framework { bool g_cjWebDebuggingAccess = false; +constexpr int32_t PARENT_FIRST_VALUE = 2; +RequestResultCallback g_requestResultcb = nullptr; class CJWebWindowNewHandler : public Referenced { public: @@ -111,8 +112,7 @@ public: return; } controller_map_.insert( - std::pair(handler_->GetId(), { parentNWebId, controller }) - ); + std::pair(handler_->GetId(), { parentNWebId, controller })); } } @@ -196,11 +196,11 @@ char* MallocCString(const std::string& origin) return std::char_traits::copy(res, origin.c_str(), len); } -void RequestPermissionsFromUserWeb(CJWebPermissionRequest &request) +void RequestPermissionsFromUserWeb(CJWebPermissionRequest& request) { auto abilityContext = AbilityRuntime::Context::GetApplicationContext(); std::string permission = "ohos.permission.READ_PASTEBOARD"; - char *cPermission = MallocCString(permission); + char* cPermission = MallocCString(permission); auto callBack = [&request](RetDataCPermissionRequestResult infoRef) -> void { if (infoRef.code == 0) { @@ -210,16 +210,21 @@ void RequestPermissionsFromUserWeb(CJWebPermissionRequest &request) } }; - OHOS::CJSystemapi::AtManagerImpl::RequestPermissionsFromUser( - abilityContext.get(), - CArrString{.head = &cPermission, .size = 1}, - callBack); + std::function func = callBack; + g_requestResultcb(abilityContext.get(), CArrString { .head = &cPermission, .size = 1 }, &func); free(cPermission); } -} +} // namespace OHOS::Ace::Framework std::unordered_map CJWebWindowNewHandler::controller_map_; extern "C" { +void FfiOHOSAceFrameworkWebSetCallback(RequestResultCallback cb) +{ + if (g_requestResultcb == nullptr) { + g_requestResultcb = cb; + } +} + void FfiOHOSAceFrameworkWebCreate(const char* src, int64_t controllerId, int32_t type, bool mode) { std::string webSrc = src; @@ -235,17 +240,12 @@ void FfiOHOSAceFrameworkWebCreate(const char* src, int64_t controllerId, int32_t auto controller = FFIData::GetData(controllerId); if (controller) { - auto setIdCallback = [controller](int32_t webId) { - controller->SetWebId(webId); - }; + auto setIdCallback = [controller](int32_t webId) { controller->SetWebId(webId); }; std::function setHapPathCallback = nullptr; - setHapPathCallback = [controller](const std::string& hapPath) { - controller->InnerSetHapPath(hapPath); - }; + setHapPathCallback = [controller](const std::string& hapPath) { controller->InnerSetHapPath(hapPath); }; std::function&)> requestPermissionsFromUserCallback = nullptr; - requestPermissionsFromUserCallback = [controller]( - const std::shared_ptr& info) { + requestPermissionsFromUserCallback = [controller](const std::shared_ptr& info) { auto* eventInfo = TypeInfoHelper::DynamicCast(info.get()); auto permissionObj = OHOS::Ace::Framework::CJWebPermissionRequest(); permissionObj.SetEvent(*eventInfo); @@ -254,9 +254,8 @@ void FfiOHOSAceFrameworkWebCreate(const char* src, int64_t controllerId, int32_t int32_t parentNWebId = -1; bool isPopup = CJWebWindowNewHandler::ExistController(controller, parentNWebId); - WebModel::GetInstance()->Create( - dstSrc.value(), std::move(setIdCallback), - std::move(setHapPathCallback), parentNWebId, isPopup, renderMode, mode); + WebModel::GetInstance()->Create(dstSrc.value(), std::move(setIdCallback), std::move(setHapPathCallback), + parentNWebId, isPopup, renderMode, mode); WebModel::GetInstance()->SetPermissionClipboard(std::move(requestPermissionsFromUserCallback)); if (!controller->customeSchemeCmdLine_.empty()) { WebModel::GetInstance()->SetCustomScheme(controller->customeSchemeCmdLine_); @@ -350,6 +349,40 @@ void FfiOHOSAceFrameworkWebGeolocationAccessEnabled(bool isGeolocationAccessEnab WebModel::GetInstance()->SetGeolocationAccessEnabled(isGeolocationAccessEnabled); } +void FfiOHOSAceFrameworkWebVerticalScrollBarAccessEnabled(bool isVerticalScrollBarAccess) +{ + WebModel::GetInstance()->SetVerticalScrollBarAccessEnabled(isVerticalScrollBarAccess); +} + +NestedScrollMode GetNestedScrollModeValue(int32_t value) +{ + auto ret = NestedScrollMode::SELF_ONLY; + switch (value) { + case 0: + ret = NestedScrollMode::SELF_ONLY; + break; + case 1: + ret = NestedScrollMode::SELF_FIRST; + break; + case PARENT_FIRST_VALUE: + ret = NestedScrollMode::PARENT_FIRST; + break; + default: + ret = NestedScrollMode::PARALLEL; + break; + } + return ret; +} + +void FfiOHOSAceFrameworkNestedScroll(int32_t nestedScrollNum, int32_t scrollBackwardNum) +{ + NestedScrollOptions nestedOpt = { + .forward = GetNestedScrollModeValue(nestedScrollNum), + .backward = GetNestedScrollModeValue(scrollBackwardNum), + }; + WebModel::GetInstance()->SetNestedScroll(nestedOpt); +} + void FfiOHOSAceFrameworkWebUserAgent(const std::string& userAgent) { WebModel::GetInstance()->SetUserAgent(userAgent); @@ -392,6 +425,68 @@ void FfiOHOSAceFrameworkWebOnPageStart(void (*callback)(const char* url)) WebModel::GetInstance()->SetOnPageStart(std::move(onStart)); } +bool WebRequestHeadersToMapToCFFIArray(const RefPtr& webRequest, MapToCFFIArray& res) +{ + std::map header = webRequest->GetHeaders(); + auto key = (const char**)malloc(sizeof(const char*) * header.size()); + auto value = (const char**)malloc(sizeof(const char*) * header.size()); + if (key == NULL || value == NULL) { + if (key != NULL) { + free(key); + } + if (value != NULL) { + free(value); + } + LOGE("FfiOHOSAceFrameworkGetHeaders fail, malloc fail"); + return false; + } + size_t i = 0; + res.size = header.size(); + res.key = key; + res.value = value; + for (auto it = header.begin(); it != header.end(); ++it, ++i) { + res.key[i] = it->first.c_str(); + res.value[i] = it->second.c_str(); + } + return true; +} + +void MapToCFFIArrayToFreeMemory(MapToCFFIArray& mapToCFFIArray) +{ + for (size_t i = 0; i < mapToCFFIArray.size; ++i) { + free(&mapToCFFIArray.key[i]); + free(&mapToCFFIArray.value[i]); + } + free(mapToCFFIArray.key); + free(mapToCFFIArray.value); +} + +void FfiOHOSAceFrameworkWebOnLoadIntercept(bool (*callback)(FfiWebResourceRequest event)) +{ + auto instanceId = Container::CurrentId(); + auto onLoadIntercept = [func = CJLambda::Create(callback), instanceId](const BaseEventInfo* info) { + ContainerScope scope(instanceId); + FfiWebResourceRequest cjWebResourceRequest {}; + auto* eventInfo = TypeInfoHelper::DynamicCast(info); + auto request = eventInfo->GetRequest(); + MapToCFFIArray mapToCFFIArray; + auto wirteSuccess = WebRequestHeadersToMapToCFFIArray(request, mapToCFFIArray); + if (!wirteSuccess) { + return false; + } + cjWebResourceRequest.url = request->GetUrl().c_str(); + cjWebResourceRequest.isMainFrame = request->IsMainFrame(); + cjWebResourceRequest.isRedirect = request->IsRedirect(); + cjWebResourceRequest.hasGesture = request->HasGesture(); + cjWebResourceRequest.method = request->GetMethod().c_str(); + cjWebResourceRequest.mapToCFFIArray = &mapToCFFIArray; + auto res = func(cjWebResourceRequest); + MapToCFFIArrayToFreeMemory(mapToCFFIArray); + return res; + }; + WebModel::GetInstance()->SetOnLoadIntercept(std::move(onLoadIntercept)); +} + void FfiOHOSAceFrameworkWebOnPageFinish(void (*callback)(const char* url)) { auto instanceId = Container::CurrentId(); @@ -412,10 +507,8 @@ CJ_EXPORT void FfiOHOSAceFrameworkWebJavaScriptProxy( auto& funcs = *reinterpret_cast*>(funcList); std::vector> cFuncs; for (int64_t i = 0; i < static_cast(funcs.size()); i++) { - auto cFunc = reinterpret_cast(funcs[i]); - auto wrapper = [lambda = CJLambda::Create(cFunc)](const char* str) -> char* { - return lambda(str); - }; + auto cFunc = reinterpret_cast(funcs[i]); + auto wrapper = [lambda = CJLambda::Create(cFunc)](const char* str) -> char* { return lambda(str); }; cFuncs.push_back(wrapper); } std::string cName = std::string(name); diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.h index a67ec878fc24..7832640a2e07 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.h +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/cj_web_ffi.h @@ -16,16 +16,46 @@ #ifndef OHOS_ACE_FRAMEWORK_CJ_WEB_H #define OHOS_ACE_FRAMEWORK_CJ_WEB_H #include +#include #include -#include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" -#include "core/components/web/web_component.h" -#include "bridge/cj_frontend/interfaces/cj_ffi/cj_container_base_ffi.h" +#include "webview_controller_impl.h" + #include "bridge/cj_frontend/interfaces/cj_ffi/cj_collection_ffi.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_container_base_ffi.h" +#include "core/components/web/web_component.h" struct FfiWebEvent; extern "C" { +struct CPermissionRequestResult { + CArrString permissions; + CArrI32 authResults; +}; + +struct RetDataCPermissionRequestResult { + int32_t code; + CPermissionRequestResult data; +}; + +struct MapToCFFIArray { + size_t size; + const char** key; + const char** value; +}; + +struct FfiWebResourceRequest { + const char* url; + bool isMainFrame; + bool isRedirect; + bool hasGesture; + const char* method; + MapToCFFIArray* mapToCFFIArray; +}; + +typedef void (*RequestResultCallback)(void*, CArrString, void*); + CJ_EXPORT void FfiOHOSAceFrameworkWebHandleCancel(void* result); CJ_EXPORT void FfiOHOSAceFrameworkWebHandleConfirm(void* result); CJ_EXPORT void FfiOHOSAceFrameworkWebHandlePromptConfirm(void* result, const char* message); @@ -39,13 +69,16 @@ CJ_EXPORT void FfiOHOSAceFrameworkWebOnlineImageAccessEnabled(bool isImageAccess CJ_EXPORT void FfiOHOSAceFrameworkWebMixedMode(int32_t mixedModeNum); CJ_EXPORT void FfiOHOSAceFrameworkWebZoomAccessEnabled(bool isZoomAccessEnabled); CJ_EXPORT void FfiOHOSAceFrameworkWebGeolocationAccessEnabled(bool isGeolocationAccessEnabled); +CJ_EXPORT void FfiOHOSAceFrameworkWebVerticalScrollBarAccessEnabled(bool isVerticalScrollBarAccess); +CJ_EXPORT void FfiOHOSAceFrameworkNestedScroll(int32_t nestedScrollNum, int32_t scrollBackwardNum); CJ_EXPORT void FfiOHOSAceFrameworkWebUserAgent(const std::string& userAgent); CJ_EXPORT void FfiOHOSAceFrameworkWebOnAlert(bool (*callback)(FfiWebEvent event)); CJ_EXPORT void FfiOHOSAceFrameworkWebOnPageStart(void (*callback)(const char* url)); CJ_EXPORT void FfiOHOSAceFrameworkWebOnPageFinish(void (*callback)(const char* url)); +CJ_EXPORT void FfiOHOSAceFrameworkWebOnLoadIntercept(bool (*callback)(FfiWebResourceRequest event)); CJ_EXPORT void FfiOHOSAceFrameworkWebJavaScriptProxy( VectorInt64Handle funcList, const char* name, VectorStringHandle methodList, int64_t controllerId); +CJ_EXPORT void FfiOHOSAceFrameworkWebSetCallback(RequestResultCallback cb); }; - #endif // OHOS_ACE_FRAMEWORK_CJ_WEB_H diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.cpp new file mode 100644 index 000000000000..c16a0b56410d --- /dev/null +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "cj_font_ffi.h" + +#include "bridge/cj_frontend/interfaces/cj_ffi/utils.h" + +using namespace OHOS::Ace; +using namespace OHOS::Ace::Framework; + +extern "C" { +void FfiFontManagerRegisterFont(const char* familyName, const char* familySrc) +{ + auto frontend = AceType::DynamicCast(Utils::GetCurrentFrontend()); + if (!frontend) { + LOGE("Can not get frontend."); + return; + } + frontend->RegisterFont(familyName, familySrc); +} + +VectorStringHandle FfiFontManagerGetSystemFontList() +{ + auto frontend = AceType::DynamicCast(Utils::GetCurrentFrontend()); + if (!frontend) { + LOGE("Can not get frontend."); + return nullptr; + } + return frontend->GetSystemFontList(); +} + +NativeOptionFontInfo FfiFontManagerGetFontByName(const char* fontName) +{ + auto frontend = AceType::DynamicCast(Utils::GetCurrentFrontend()); + if (!frontend) { + LOGE("Can not get frontend."); + return NativeOptionFontInfo { .hasValue = false, .info = nullptr }; + } + return frontend->GetSystemFont(fontName); +} +} \ No newline at end of file diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.h b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.h new file mode 100644 index 000000000000..1f1274daab19 --- /dev/null +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/font/cj_font_ffi.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef OHOS_ACE_FRAMEWORK_CJ_FONT_MANAGER +#define OHOS_ACE_FRAMEWORK_CJ_FONT_MANAGER + +#include "bridge/cj_frontend/frontend/cj_frontend_abstract.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_collection_ffi.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_common_ffi.h" +#include "bridge/cj_frontend/interfaces/cj_ffi/cj_macro.h" + +extern "C" { +CJ_EXPORT void FfiFontManagerRegisterFont(const char* familyName, const char* familySrc); +CJ_EXPORT VectorStringHandle FfiFontManagerGetSystemFontList(); +CJ_EXPORT NativeOptionFontInfo FfiFontManagerGetFontByName(const char* fontName); +} + +#endif // OHOS_ACE_FRAMEWORK_CJ_FONT_MANAGER \ No newline at end of file diff --git a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/mock/cj_web_mock.cpp b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/mock/cj_web_mock.cpp index 6ad1a5ca4a93..f8111845aab2 100644 --- a/frameworks/bridge/cj_frontend/interfaces/cj_ffi/mock/cj_web_mock.cpp +++ b/frameworks/bridge/cj_frontend/interfaces/cj_ffi/mock/cj_web_mock.cpp @@ -28,9 +28,19 @@ CJ_EXPORT int FfiOHOSAceFrameworkWebOnlineImageAccessEnabled = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebMixedMode = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebZoomAccessEnabled = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebGeolocationAccessEnabled = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebVerticalScrollBarAccessEnabled = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebUserAgent = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebOnAlert = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebOnPageStart = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebOnPageFinish = 0; CJ_EXPORT int FfiOHOSAceFrameworkWebJavaScriptProxy = 0; -} \ No newline at end of file +CJ_EXPORT int FfiOHOSAceFrameworkNestedScroll = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebOnLoadIntercept = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebGetHeaders = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebGetUrl = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebIsRedirect = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebIsMainFrame = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebHasGesture = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebGetMethod = 0; +CJ_EXPORT int FfiOHOSAceFrameworkWebSetCallback = 0; +} diff --git a/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h b/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h index abf243e46a35..7b086309d52b 100644 --- a/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h +++ b/frameworks/core/components_ng/pattern/canvas/canvas_rendering_context_2d_model_ng.h @@ -22,7 +22,7 @@ namespace OHOS::Ace::NG { -class ACE_EXPORT CanvasRenderingContext2DModelNG : public OHOS::Ace::CanvasRenderingContext2DModel { +class ACE_FORCE_EXPORT CanvasRenderingContext2DModelNG : public OHOS::Ace::CanvasRenderingContext2DModel { DECLARE_ACE_TYPE(CanvasRenderingContext2DModelNG, CanvasRenderingContext2DModel) public: diff --git a/frameworks/core/components_ng/pattern/custom/custom_node.h b/frameworks/core/components_ng/pattern/custom/custom_node.h index 6706c4c8046e..c6bde3c4f12d 100644 --- a/frameworks/core/components_ng/pattern/custom/custom_node.h +++ b/frameworks/core/components_ng/pattern/custom/custom_node.h @@ -70,7 +70,7 @@ public: { completeReloadFunc_ = std::move(func); } - void FlushReload(); + ACE_FORCE_EXPORT void FlushReload(); void ToJsonValue(std::unique_ptr& json, const InspectorFilter& filter) const override { diff --git a/frameworks/core/components_ng/pattern/custom_paint/canvas_model.h b/frameworks/core/components_ng/pattern/custom_paint/canvas_model.h index 7aac1630aa38..ef3ccce5c4dc 100644 --- a/frameworks/core/components_ng/pattern/custom_paint/canvas_model.h +++ b/frameworks/core/components_ng/pattern/custom_paint/canvas_model.h @@ -23,7 +23,7 @@ namespace OHOS::Ace { class CanvasModel { public: - static CanvasModel* GetInstance(); + ACE_FORCE_EXPORT static CanvasModel* GetInstance(); static CanvasModel* GetInstanceNG(); virtual ~CanvasModel() = default; diff --git a/frameworks/core/components_ng/pattern/stage/page_pattern.cpp b/frameworks/core/components_ng/pattern/stage/page_pattern.cpp index ecb3f35e1a66..9bb7b97401ed 100644 --- a/frameworks/core/components_ng/pattern/stage/page_pattern.cpp +++ b/frameworks/core/components_ng/pattern/stage/page_pattern.cpp @@ -187,8 +187,8 @@ void PagePattern::OnAttachToMainTree() auto delegate = EngineHelper::GetCurrentDelegate(); if (delegate) { index = delegate->GetStackSize(); + GetPageInfo()->SetPageIndex(index); } - GetPageInfo()->SetPageIndex(index); state_ = RouterPageState::ABOUT_TO_APPEAR; UIObserverHandler::GetInstance().NotifyRouterPageStateChange(GetPageInfo(), state_); }