From 2302b39f84c0a1e41851c1969a1235f915cefd91 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Fri, 26 May 2023 15:51:18 +0800 Subject: [PATCH 1/7] initial commit Signed-off-by: Zhang Peng Change-Id: Iea49dd3244d0dacbcb13a427d6fe54573e388e5d --- adapter/ohos/build/config.gni | 5 ++ adapter/preview/build/preview_common.gni | 5 ++ .../bridge/declarative_frontend/BUILD.gn | 7 +++ .../engine/jsi/jsi_view_register_impl.cpp | 7 +++ .../jsview/js_effect_view.cpp | 61 +++++++++++++++++++ .../jsview/js_effect_view.h | 28 +++++++++ .../jsview/models/effect_view_model_impl.cpp | 26 ++++++++ .../jsview/models/effect_view_model_impl.h | 29 +++++++++ frameworks/core/BUILD.gn | 9 +++ .../pattern/effect_view/BUILD.gn | 24 ++++++++ .../effect_view_layout_algorithm.cpp | 38 ++++++++++++ .../effect_view_layout_algorithm.h | 40 ++++++++++++ .../pattern/effect_view/effect_view_model.h | 40 ++++++++++++ .../effect_view/effect_view_model_ng.cpp | 39 ++++++++++++ .../effect_view/effect_view_model_ng.h | 27 ++++++++ .../effect_view/effect_view_pattern.cpp | 33 ++++++++++ .../pattern/effect_view/effect_view_pattern.h | 57 +++++++++++++++++ .../remote_window/remote_window_model_ng.cpp | 2 +- .../remote_window/remote_window_pattern.cpp | 2 +- .../inspector/inspector_constants.cpp | 3 + .../inspector/inspector_constants.h | 3 + 21 files changed, 483 insertions(+), 2 deletions(-) create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_effect_view.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.h create mode 100644 frameworks/core/components_ng/pattern/effect_view/BUILD.gn create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_model.h create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.h create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp create mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h diff --git a/adapter/ohos/build/config.gni b/adapter/ohos/build/config.gni index f2e766653be..d91d56fbf2e 100644 --- a/adapter/ohos/build/config.gni +++ b/adapter/ohos/build/config.gni @@ -55,6 +55,7 @@ rich_components_support = true advance_components_support = false form_components_support = true remote_window_support = true +effect_view_support = true plugin_components_support = true xcomponent_components_support = true pixel_map_support = true @@ -130,6 +131,10 @@ if (remote_window_support) { defines += [ "REMOTE_WINDOW_SUPPORTED" ] } +if (effect_view_support) { + defines += [ "EFFECT_VIEW_SUPPORTED" ] +} + if (xcomponent_components_support) { defines += [ "XCOMPONENT_SUPPORTED" ] } diff --git a/adapter/preview/build/preview_common.gni b/adapter/preview/build/preview_common.gni index 78b420d1267..a6119c3b3b8 100644 --- a/adapter/preview/build/preview_common.gni +++ b/adapter/preview/build/preview_common.gni @@ -14,6 +14,7 @@ xcomponent_components_support = false form_components_support = false remote_window_support = false +effect_view_support = true use_curl_download = true accessibility_support = true rich_components_support = true @@ -81,6 +82,10 @@ if (defined(remote_window_support) && remote_window_support) { defines += [ "REMOTE_WINDOW_SUPPORTED" ] } +if (defined(effect_view_support) && effect_view_support) { + defines += [ "EFFECT_VIEW_SUPPORTED" ] +} + if (defined(image_components_support) && image_components_support) { defines += [ "IMAGE_SUPPORTED" ] } diff --git a/frameworks/bridge/declarative_frontend/BUILD.gn b/frameworks/bridge/declarative_frontend/BUILD.gn index c4951e29150..477b4d608a8 100644 --- a/frameworks/bridge/declarative_frontend/BUILD.gn +++ b/frameworks/bridge/declarative_frontend/BUILD.gn @@ -462,6 +462,13 @@ template("declarative_js_engine") { ] } + if (defined(config.effect_view_support) && config.effect_view_support) { + sources += [ + "jsview/js_effect_view.cpp", + "jsview/models/effect_view_model_impl.cpp", + ] + } + if (defined(config.plugin_components_support) && config.plugin_components_support) { sources += [ diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register_impl.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register_impl.cpp index b236017288a..f582181380c 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register_impl.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/jsi_view_register_impl.cpp @@ -158,6 +158,10 @@ #include "bridge/declarative_frontend/jsview/js_remote_window.h" #endif +#ifdef EFFECT_VIEW_SUPPORTED +#include "bridge/declarative_frontend/jsview/js_effect_view.h" +#endif + #ifndef WEARABLE_PRODUCT #include "bridge/declarative_frontend/jsview/js_piece.h" #include "bridge/declarative_frontend/jsview/js_rating.h" @@ -552,6 +556,9 @@ static const std::unordered_map> #ifdef REMOTE_WINDOW_SUPPORTED { "RemoteWindow", JSRemoteWindow::JSBind }, #endif +#ifdef EFFECT_VIEW_SUPPORTED + { "EffectView", JSEffectView::JSBind }, +#endif #ifndef WEARABLE_PRODUCT { "Camera", JSCamera::JSBind }, { "Piece", JSPiece::JSBind }, diff --git a/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp b/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp new file mode 100644 index 00000000000..8fb942044cf --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023 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 "frameworks/bridge/declarative_frontend/jsview/js_effect_view.h" + +#include "bridge/declarative_frontend/jsview/models/effect_view_model_impl.h" +#include "core/components_ng/pattern/effect_view/effect_view_model_ng.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_utils.h" + +namespace OHOS::Ace { +std::unique_ptr EffectViewModel::instance_ = nullptr; +std::mutex EffectViewModel::mutex_; + +EffectViewModel* EffectViewModel::GetInstance() +{ + if (!instance_) { + std::lock_guard lock(mutex_); + if (!instance_) { +#ifdef NG_BUILD + instance_.reset(new NG::EffectViewModelNG()); +#else + if (Container::IsCurrentUseNewPipeline()) { + instance_.reset(new NG::EffectViewModelNG()); + } else { + // empty implentation + instance_.reset(new Framework::EffectViewModelImpl()); + } + } +#endif + } + return instance_.get(); +} +} // namespace OHOS::Ace + +namespace OHOS::Ace::Framework { +void JSEffectView::Create() +{ + EffectViewModel::GetInstance()->Create(); +} + +void JSEffectView::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("EffectView"); + MethodOptions opt = MethodOptions::NONE; + JSClass::StaticMethod("create", &JSEffectView::Create, opt); + + JSClass::InheritAndBind(globalObj); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_effect_view.h b/frameworks/bridge/declarative_frontend/jsview/js_effect_view.h new file mode 100644 index 00000000000..a7151b9eb26 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_effect_view.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 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 FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_EFFECT_VIEW_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_EFFECT_VIEW_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { +class JSEffectView : public JSViewAbstract { +public: + static void JSBind(BindingTarget globalObj); + static void Create(); +}; +} // namespace OHOS::Ace::Framework +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_EFFECT_VIEW_H diff --git a/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp new file mode 100644 index 00000000000..4add7e4c923 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 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 "bridge/declarative_frontend/jsview/models/effect_view_model_impl.h" + +#include "bridge/declarative_frontend/view_stack_processor.h" +#include "core/components/effect_view/effect_view_component.h" + +namespace OHOS::Ace::Framework { +void EffectViewModelImpl::Create() +{ + // empty implementation +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.h new file mode 100644 index 00000000000..2d51e84159b --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023 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 FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_MODELS_EFFECT_VIEW_MODEL_IMPL_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_MODELS_EFFECT_VIEW_MODEL_IMPL_H + +#include + +#include "core/components_ng/pattern/effect_view/effect_view_model.h" + +namespace OHOS::Ace::Framework { +class EffectViewModelImpl : public EffectViewModel { +public: + void Create() override; +}; +} // namespace OHOS::Ace::Framework +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_MODELS_EFFECT_VIEW_MODEL_IMPL_H \ No newline at end of file diff --git a/frameworks/core/BUILD.gn b/frameworks/core/BUILD.gn index 70e7490b09d..1b5a740b9e9 100644 --- a/frameworks/core/BUILD.gn +++ b/frameworks/core/BUILD.gn @@ -501,6 +501,15 @@ template("ace_core_source_set") { } } + if (defined(config.effect_view_support) && config.effect_view_support) { + if (!use_mingw_win && !use_mac && !use_linux) { + deps += [ + "$ace_root/frameworks/core/components/effect_view:ace_core_components_effect_view$platform", + "$ace_root/frameworks/core/components_ng/pattern/effect_view:ace_core_components_effect_view_pattern_ng_$platform", + ] + } + } + if (defined(config.build_container_scope_lib) && config.build_container_scope_lib) { sources -= [ "common/container_scope.cpp" ] diff --git a/frameworks/core/components_ng/pattern/effect_view/BUILD.gn b/frameworks/core/components_ng/pattern/effect_view/BUILD.gn new file mode 100644 index 00000000000..4c4df9d05c8 --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2023 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. + +import("//foundation/arkui/ace_engine/ace_config.gni") +import( + "//foundation/arkui/ace_engine/frameworks/core/components_ng/components.gni") + +build_component_ng("effect_view_pattern_ng") { + sources = [ + "effect_view_layout_algorithm.cpp", + "effect_view_model_ng.cpp", + "effect_view_pattern.cpp", + ] +} diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp new file mode 100644 index 00000000000..f312a88e7bb --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023 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 "core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h" + +namespace OHOS::Ace::NG { + +std::optional EffectViewLayoutAlgorithm::MeasureContent( + const LayoutConstraintF& contentConstraint, LayoutWrapper* /*layoutWrapper*/) +{ + OptionalSizeF contentSize; + do { + // Use idea size first if it is valid. + contentSize.UpdateSizeWithCheck(contentConstraint.selfIdealSize); + if (contentSize.IsValid()) { + break; + } + contentSize.UpdateIllegalSizeWithCheck(contentConstraint.parentIdealSize); + // use max is parent ideal size is invalid. + contentSize.UpdateIllegalSizeWithCheck(contentConstraint.maxSize); + } while (false); + + return contentSize.ConvertToSizeT(); +} + +} // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h new file mode 100644 index 00000000000..9c946f1f12d --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H + +#include "core/components_ng/layout/box_layout_algorithm.h" +#include "core/components_ng/layout/layout_wrapper.h" + +namespace OHOS::Ace::NG { + +class ACE_EXPORT EffectViewLayoutAlgorithm : public BoxLayoutAlgorithm { + DECLARE_ACE_TYPE(EffectViewLayoutAlgorithm, BoxLayoutAlgorithm); + +public: + EffectViewLayoutAlgorithm() = default; + + ~EffectViewLayoutAlgorithm() override = default; + + std::optional MeasureContent( + const LayoutConstraintF& contentConstraint, LayoutWrapper* layoutWrapper) override; + +private: + ACE_DISALLOW_COPY_AND_MOVE(EffectViewLayoutAlgorithm); +}; +} // namespace OHOS::Ace::NG + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_model.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_model.h new file mode 100644 index 00000000000..92c08a18077 --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_model.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_MODEL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_MODEL_H + +#include +#include + +#include "base/geometry/dimension.h" +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/components_ng/pattern/effect_view/effect_view_pattern.h" + +namespace OHOS::Ace { +class EffectViewModel { +public: + static EffectViewModel* GetInstance(); + virtual ~EffectViewModel() = default; + + virtual void Create(); + +private: + static std::unique_ptr instance_; + static std::mutex mutex_; +}; +} // namespace OHOS::Ace +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_MODEL_H \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp new file mode 100644 index 00000000000..12eb64d32e5 --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023 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 "core/components_ng/pattern/effect_view/effect_view_model_ng.h" + +#include "core/components/common/layout/constants.h" +#include "core/components_ng/base/frame_node.h" +#include "core/components_ng/base/view_stack_processor.h" +#include "core/components_ng/pattern/effect_view/effect_view_pattern.h" +#include "core/components_ng/render/adapter/rosen_render_context.h" +#include "core/components_v2/inspector/inspector_constants.h" + +namespace OHOS::Ace::NG { +void EffectViewModelNG::Create() +{ + auto* stack = ViewStackProcessor::GetInstance(); + auto nodeId = stack->ClaimNodeId(); + auto frameNode = FrameNode::GetOrCreateFrameNode( + V2::EFFECT_VIEW_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); + stack->Push(frameNode); +#ifdef ENABLE_ROSEN_BACKEND + auto context = AceType::DynamicCast(frameNode->GetRenderContext()); + CHECK_NULL_VOID(context); + context->SetRSNode(rsNode); +#endif +} +} // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.h new file mode 100644 index 00000000000..2eec81b92f1 --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_MODEL_NG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_MODEL_NG_H + +#include "core/components_ng/pattern/effect_view/effect_view_model.h" + +namespace OHOS::Ace::NG { +class ACE_EXPORT EffectViewModelNG : public OHOS::Ace::EffectViewModel { +public: + void Create() override; +}; +} // namespace OHOS::Ace::NG +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_MODEL_NG_H \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp new file mode 100644 index 00000000000..57d08af1067 --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023 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 "core/components_ng/pattern/effect_view/effect_view_pattern.h" + +#include "base/geometry/rect.h" +#include "base/utils/utils.h" +#include "core/pipeline_ng/pipeline_context.h" +#include "core/pipeline_ng/ui_task_scheduler.h" + +namespace OHOS::Ace::NG { + +void EffectViewPattern::OnAttachToFrameNode() +{ + auto host = GetHost(); + CHECK_NULL_VOID(host); + host->GetLayoutProperty()->UpdateMeasureType(MeasureType::MATCH_PARENT); + host->GetLayoutProperty()->UpdateAlignment(Alignment::TOP_LEFT); +} + +} // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h new file mode 100644 index 00000000000..3e939a494a6 --- /dev/null +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_PATTERN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_PATTERN_H + +#include + +#include "base/memory/referenced.h" +#include "core/components_ng/pattern/pattern.h" +#include "core/components_ng/property/property.h" + +namespace OHOS::Ace::NG { + +class ACE_EXPORT EffectViewPattern : public Pattern { + DECLARE_ACE_TYPE(EffectViewPattern, Pattern); + +public: + EffectViewPattern() = default; + ~EffectViewPattern() override = default; + + bool IsMeasureBoundary() const override + { + return true; + } + + bool IsAtomicNode() const override + { + return true; + } + + bool UseExternalRSNode() const override + { + return true; + } + +private: + void OnAttachToFrameNode() override; + + ACE_DISALLOW_COPY_AND_MOVE(EffectViewPattern); +}; + +} // namespace OHOS::Ace::NG + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_PATTERN_H diff --git a/frameworks/core/components_ng/pattern/remote_window/remote_window_model_ng.cpp b/frameworks/core/components_ng/pattern/remote_window/remote_window_model_ng.cpp index e1348c0d2d7..cffb5e7e267 100644 --- a/frameworks/core/components_ng/pattern/remote_window/remote_window_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/remote_window/remote_window_model_ng.cpp @@ -28,7 +28,7 @@ void RemoteWindowModelNG::Create(const std::shared_ptr& rsN auto* stack = ViewStackProcessor::GetInstance(); auto nodeId = stack->ClaimNodeId(); auto frameNode = FrameNode::GetOrCreateFrameNode( - V2::REMOTE_WINDOW_ETS_TAG, nodeId, [rsNode]() { return AceType::MakeRefPtr(); }); + V2::REMOTE_WINDOW_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); stack->Push(frameNode); #ifdef ENABLE_ROSEN_BACKEND auto context = AceType::DynamicCast(frameNode->GetRenderContext()); diff --git a/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp b/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp index 190767683de..3b2a06e8990 100644 --- a/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp +++ b/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2023 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 diff --git a/frameworks/core/components_v2/inspector/inspector_constants.cpp b/frameworks/core/components_v2/inspector/inspector_constants.cpp index 11daa0d6b17..f3b2e86b7ba 100644 --- a/frameworks/core/components_v2/inspector/inspector_constants.cpp +++ b/frameworks/core/components_v2/inspector/inspector_constants.cpp @@ -483,6 +483,9 @@ const char POPUP_ETS_TAG[] = "Popup"; // remote window const char REMOTE_WINDOW_ETS_TAG[] = "RemoteWindow"; +// effect view +const char EFFECT_VIEW_ETS_TAG[] = "EffectView"; + // Model const char MODEL_COMPONENT_TAG[] = "ModelComponent"; const char MODEL_ETS_TAG[] = "Model"; diff --git a/frameworks/core/components_v2/inspector/inspector_constants.h b/frameworks/core/components_v2/inspector/inspector_constants.h index 5b0d46093e0..52e1f781091 100644 --- a/frameworks/core/components_v2/inspector/inspector_constants.h +++ b/frameworks/core/components_v2/inspector/inspector_constants.h @@ -494,6 +494,9 @@ ACE_EXPORT extern const char POPUP_ETS_TAG[]; // remote window ACE_EXPORT extern const char REMOTE_WINDOW_ETS_TAG[]; +// effect view +ACE_EXPORT extern const char EFFECT_VIEW_ETS_TAG[]; + // button ACE_EXPORT extern const char MODEL_COMPONENT_TAG[]; ACE_EXPORT extern const char MODEL_ETS_TAG[]; -- Gitee From 38615c185e2793c9a93494319becfb2aad2549b0 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Fri, 26 May 2023 16:38:02 +0800 Subject: [PATCH 2/7] wip Signed-off-by: Zhang Peng Change-Id: Ie5da75a23ada0cb0e4644781c74cc06c66c8fe7c --- .../jsview/models/effect_view_model_impl.cpp | 1 - frameworks/core/BUILD.gn | 1 - .../pattern/effect_view/effect_view_model_ng.cpp | 8 ++++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp b/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp index 4add7e4c923..2133b6a438f 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/models/effect_view_model_impl.cpp @@ -16,7 +16,6 @@ #include "bridge/declarative_frontend/jsview/models/effect_view_model_impl.h" #include "bridge/declarative_frontend/view_stack_processor.h" -#include "core/components/effect_view/effect_view_component.h" namespace OHOS::Ace::Framework { void EffectViewModelImpl::Create() diff --git a/frameworks/core/BUILD.gn b/frameworks/core/BUILD.gn index 1b5a740b9e9..e30485b849a 100644 --- a/frameworks/core/BUILD.gn +++ b/frameworks/core/BUILD.gn @@ -504,7 +504,6 @@ template("ace_core_source_set") { if (defined(config.effect_view_support) && config.effect_view_support) { if (!use_mingw_win && !use_mac && !use_linux) { deps += [ - "$ace_root/frameworks/core/components/effect_view:ace_core_components_effect_view$platform", "$ace_root/frameworks/core/components_ng/pattern/effect_view:ace_core_components_effect_view_pattern_ng_$platform", ] } diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp index 12eb64d32e5..0f06ed18d99 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp @@ -19,7 +19,7 @@ #include "core/components_ng/base/frame_node.h" #include "core/components_ng/base/view_stack_processor.h" #include "core/components_ng/pattern/effect_view/effect_view_pattern.h" -#include "core/components_ng/render/adapter/rosen_render_context.h" +// #include "core/components_ng/render/adapter/rosen_render_context.h" #include "core/components_v2/inspector/inspector_constants.h" namespace OHOS::Ace::NG { @@ -31,9 +31,9 @@ void EffectViewModelNG::Create() V2::EFFECT_VIEW_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); stack->Push(frameNode); #ifdef ENABLE_ROSEN_BACKEND - auto context = AceType::DynamicCast(frameNode->GetRenderContext()); - CHECK_NULL_VOID(context); - context->SetRSNode(rsNode); + // auto context = AceType::DynamicCast(frameNode->GetRenderContext()); + // CHECK_NULL_VOID(context); + // context->SetRSNode(rsNode); #endif } } // namespace OHOS::Ace::NG -- Gitee From d02ce0504a115f31f1d7590ff2d08ca2075e2616 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Fri, 26 May 2023 19:28:00 +0800 Subject: [PATCH 3/7] implement Effect View Signed-off-by: Zhang Peng Change-Id: I9aeb40e941c371c3b7ece21655b21a2936f93083 --- .../core/components_ng/base/frame_node.cpp | 4 +- .../pattern/effect_view/effect_view_pattern.h | 4 +- .../pattern/form/form_pattern.cpp | 4 +- .../core/components_ng/pattern/pattern.h | 7 +--- .../remote_window/remote_window_pattern.h | 4 +- .../pattern/video/video_pattern.cpp | 3 +- .../components_ng/pattern/web/web_pattern.h | 4 +- .../window_scene/screen/screen_pattren.h | 4 +- .../pattern/xcomponent/xcomponent_pattern.cpp | 3 +- .../render/adapter/flutter_render_context.cpp | 2 +- .../render/adapter/flutter_render_context.h | 2 +- .../render/adapter/rosen_render_context.cpp | 39 ++++++++++++++----- .../render/adapter/rosen_render_context.h | 2 +- .../components_ng/render/render_context.h | 7 +++- .../test/mock/pattern/mock_pattern.h | 3 +- 15 files changed, 57 insertions(+), 35 deletions(-) diff --git a/frameworks/core/components_ng/base/frame_node.cpp b/frameworks/core/components_ng/base/frame_node.cpp index ff03566c787..692f291d703 100644 --- a/frameworks/core/components_ng/base/frame_node.cpp +++ b/frameworks/core/components_ng/base/frame_node.cpp @@ -51,7 +51,7 @@ namespace OHOS::Ace::NG { FrameNode::FrameNode(const std::string& tag, int32_t nodeId, const RefPtr& pattern, bool isRoot) : UINode(tag, nodeId, isRoot), pattern_(pattern) { - renderContext_->InitContext(IsRootNode(), pattern_->GetSurfaceNodeName(), pattern_->UseExternalRSNode()); + renderContext_->InitContext(IsRootNode(), pattern_->GetContextParam()); paintProperty_ = pattern->CreatePaintProperty(); layoutProperty_ = pattern->CreateLayoutProperty(); eventHub_ = pattern->CreateEventHub(); @@ -419,7 +419,7 @@ void FrameNode::SwapDirtyLayoutWrapperOnMainThread(const RefPtr& if (geometryTransition != nullptr && geometryTransition->IsRunning()) { geometryTransition->DidLayout(dirty); } else if (frameSizeChange || frameOffsetChange || HasPositionProp() || - (pattern_->GetSurfaceNodeName().has_value() && contentSizeChange)) { + (pattern_->GetContextParam().has_value() && contentSizeChange)) { if (pattern_->NeedOverridePaintRect()) { renderContext_->SyncGeometryProperties(pattern_->GetOverridePaintRect().value_or(RectF())); } else { diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h index 3e939a494a6..ac84a6ff3b4 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h @@ -41,9 +41,9 @@ public: return true; } - bool UseExternalRSNode() const override + std::optional GetContextParam() const override { - return true; + return RenderContext::ContextParam { RenderContext::ContextType::EFFECT}; } private: diff --git a/frameworks/core/components_ng/pattern/form/form_pattern.cpp b/frameworks/core/components_ng/pattern/form/form_pattern.cpp index 143c536fbf8..d0b7003e0f2 100644 --- a/frameworks/core/components_ng/pattern/form/form_pattern.cpp +++ b/frameworks/core/components_ng/pattern/form/form_pattern.cpp @@ -69,7 +69,9 @@ void FormPattern::OnAttachToFrameNode() host->GetRenderContext()->SetClipToBounds(true); // Init the render context for RSSurfaceNode from FRS. externalRenderContext_ = RenderContext::Create(); - externalRenderContext_->InitContext(false, "Form_" + std::to_string(host->GetId()) + "_Remote_Surface", true); + // for external RSNode, name is meaningless. + static RenderContext::ContextParam param = { RenderContext::ContextType::EXTERNAL, std::nullopt }; + externalRenderContext_->InitContext(false, param); InitFormManagerDelegate(); auto eventHub = host->GetEventHub(); CHECK_NULL_VOID(eventHub); diff --git a/frameworks/core/components_ng/pattern/pattern.h b/frameworks/core/components_ng/pattern/pattern.h index 2772f0b232c..0bd3baf22ed 100644 --- a/frameworks/core/components_ng/pattern/pattern.h +++ b/frameworks/core/components_ng/pattern/pattern.h @@ -59,16 +59,11 @@ public: return false; } - virtual std::optional GetSurfaceNodeName() const + virtual std::optional GetContextParam() const { return std::nullopt; } - virtual bool UseExternalRSNode() const - { - return false; - } - void DetachFromFrameNode(FrameNode* frameNode) { OnDetachFromFrameNode(frameNode); diff --git a/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.h b/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.h index 4b66ed689f9..a36b03b49c1 100644 --- a/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.h +++ b/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.h @@ -41,9 +41,9 @@ public: return true; } - bool UseExternalRSNode() const override + std::optional GetContextParam() const override { - return true; + return RenderContext::ContextParam { RenderContext::ContextType::EXTERNAL }; } private: diff --git a/frameworks/core/components_ng/pattern/video/video_pattern.cpp b/frameworks/core/components_ng/pattern/video/video_pattern.cpp index 6c18c9fcd70..c5da126dc21 100644 --- a/frameworks/core/components_ng/pattern/video/video_pattern.cpp +++ b/frameworks/core/components_ng/pattern/video/video_pattern.cpp @@ -643,7 +643,8 @@ void VideoPattern::OnAttachToFrameNode() CHECK_NULL_VOID(host); auto renderContext = host->GetRenderContext(); CHECK_NULL_VOID(renderContext); - renderContextForMediaPlayer_->InitContext(false, "MediaPlayerSurface"); + static RenderContext::ContextParam param = { RenderContext::ContextType::SURFACE, "MediaPlayerSurface" }; + renderContextForMediaPlayer_->InitContext(false, param); renderContext->UpdateBackgroundColor(Color::BLACK); renderContextForMediaPlayer_->UpdateBackgroundColor(Color::BLACK); renderContext->SetClipToBounds(true); diff --git a/frameworks/core/components_ng/pattern/web/web_pattern.h b/frameworks/core/components_ng/pattern/web/web_pattern.h index 29ebf387dff..71c690ced0c 100644 --- a/frameworks/core/components_ng/pattern/web/web_pattern.h +++ b/frameworks/core/components_ng/pattern/web/web_pattern.h @@ -83,9 +83,9 @@ public: VK_HIDE }; - std::optional GetSurfaceNodeName() const override + std::optional GetContextParam() const override { - return "RosenWeb"; + return RenderContext::ContextParam { RenderContext::ContextType::SURFACE, "RosenWeb" }; } bool IsAtomicNode() const override diff --git a/frameworks/core/components_ng/pattern/window_scene/screen/screen_pattren.h b/frameworks/core/components_ng/pattern/window_scene/screen/screen_pattren.h index 7de7f23ae76..758d5da3b11 100644 --- a/frameworks/core/components_ng/pattern/window_scene/screen/screen_pattren.h +++ b/frameworks/core/components_ng/pattern/window_scene/screen/screen_pattren.h @@ -28,9 +28,9 @@ public: ScreenPattern(const sptr& screenSession) : screenSession_(screenSession) {} ~ScreenPattern() override = default; - bool UseExternalRSNode() const override + std::optional GetContextParam() const override { - return true; + return RenderContext::ContextParam { RenderContext::ContextType::EXTERNAL }; } protected: diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp index 6bb8ddd2269..33f46a7cbb7 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp @@ -128,7 +128,8 @@ void XComponentPattern::OnAttachToFrameNode() renderContext->SetClipToBounds(true); renderSurface_ = RenderSurface::Create(); renderContextForSurface_ = RenderContext::Create(); - renderContextForSurface_->InitContext(false, id_ + "Surface"); + static RenderContext::ContextParam param = { RenderContext::ContextType::SURFACE, id_ + "Surface" }; + renderContextForSurface_->InitContext(false, param); renderContextForSurface_->UpdateBackgroundColor(Color::BLACK); scopeId_ = Container::CurrentId(); if (!SystemProperties::GetExtSurfaceEnabled()) { diff --git a/frameworks/core/components_ng/render/adapter/flutter_render_context.cpp b/frameworks/core/components_ng/render/adapter/flutter_render_context.cpp index ae4d2f4ce36..fc0cbb90627 100644 --- a/frameworks/core/components_ng/render/adapter/flutter_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/flutter_render_context.cpp @@ -59,7 +59,7 @@ void FlutterRenderContext::StopRecordingIfNeeded() } } -void FlutterRenderContext::InitContext(bool isRoot, const std::optional& surfaceName, bool useExternalNode) +void FlutterRenderContext::InitContext(bool isRoot, const std::optional& param) { LOGD("InitContext root:%d", isRoot); flutterNode_ = std::make_shared(isRoot); diff --git a/frameworks/core/components_ng/render/adapter/flutter_render_context.h b/frameworks/core/components_ng/render/adapter/flutter_render_context.h index 7ea6d4a85d0..549c4e0164c 100644 --- a/frameworks/core/components_ng/render/adapter/flutter_render_context.h +++ b/frameworks/core/components_ng/render/adapter/flutter_render_context.h @@ -32,7 +32,7 @@ public: FlutterRenderContext() = default; ~FlutterRenderContext() override; - void InitContext(bool isRoot, const std::optional& surfaceName, bool useExternalNode) override; + void InitContext(bool isRoot, const std::optional& param) override; void SyncGeometryProperties(GeometryNode* geometryNode) override; diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 365e0a21254..aecfec3e94e 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -180,21 +180,40 @@ void RosenRenderContext::SetTransitionPivot(const SizeF& frameSize, bool transit SetPivot(xPivot, yPivot); } -void RosenRenderContext::InitContext(bool isRoot, const std::optional& surfaceName, bool useExternalNode) +void RosenRenderContext::InitContext(bool isRoot, const std::optional& param) { - // skip if useExternalNode is true or node already created - CHECK_NULL_VOID_NOLOG(!useExternalNode); + // skip if node already created CHECK_NULL_VOID_NOLOG(!rsNode_); - // create proper RSNode base on input - if (surfaceName.has_value()) { - struct Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = surfaceName.value() }; - rsNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, false); - } else if (isRoot) { - LOGI("create RSRootNode"); + if (isRoot) { rsNode_ = Rosen::RSRootNode::Create(); - } else { + return; + } else if (!param.has_value()) { rsNode_ = Rosen::RSCanvasNode::Create(); + return; + } + + // create proper RSNode base on input + switch (param->type) { + case ContextType::CANVAS: + rsNode_ = Rosen::RSCanvasNode::Create(); + break; + case ContextType::ROOT: + rsNode_ = Rosen::RSRootNode::Create(); + break; + case ContextType::SURFACE: { + Rosen::RSSurfaceNodeConfig surfaceNodeConfig = { .SurfaceNodeName = param->surfaceName.value_or("") }; + rsNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, false); + break; + } + case ContextType::EFFECT: + // create effect view + break; + case ContextType::EXTERNAL: + break; + default: + LOGE("invalid context type"); + break; } } diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.h b/frameworks/core/components_ng/render/adapter/rosen_render_context.h index 6f9eb6dc7b8..88df5bc696d 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -53,7 +53,7 @@ public: RosenRenderContext() = default; ~RosenRenderContext() override; - void InitContext(bool isRoot, const std::optional& surfaceName, bool useExternalNode) override; + void InitContext(bool isRoot, const std::optional& param) override; void SyncGeometryProperties(GeometryNode* geometryNode) override; diff --git a/frameworks/core/components_ng/render/render_context.h b/frameworks/core/components_ng/render/render_context.h index 864dfa47250..c2f7f495100 100644 --- a/frameworks/core/components_ng/render/render_context.h +++ b/frameworks/core/components_ng/render/render_context.h @@ -99,7 +99,12 @@ public: virtual void OnModifyDone() {} - virtual void InitContext(bool isRoot, const std::optional& surfaceName, bool useExternalNode = false) + enum class ContextType : int8_t { CANVAS, ROOT, SURFACE, EFFECT, EXTERNAL }; + struct ContextParam { + ContextType type; + std::optional surfaceName; + }; + virtual void InitContext(bool isRoot, const std::optional& param) {} virtual void StartRecording() {} diff --git a/frameworks/core/components_ng/test/mock/pattern/mock_pattern.h b/frameworks/core/components_ng/test/mock/pattern/mock_pattern.h index 061e488f987..3bf5c25c05b 100644 --- a/frameworks/core/components_ng/test/mock/pattern/mock_pattern.h +++ b/frameworks/core/components_ng/test/mock/pattern/mock_pattern.h @@ -29,8 +29,7 @@ public: ~MockPattern() override = default; MOCK_CONST_METHOD0(IsAtomicNode, bool()); - MOCK_CONST_METHOD0(GetSurfaceNodeName, std::optional()); - MOCK_CONST_METHOD0(UseExternalRSNode, bool()); + MOCK_CONST_METHOD0(GetContextParam, std::optional()); MOCK_CONST_METHOD0(GetOverridePaintRect, std::optional()); MOCK_METHOD0(CreateAccessibilityProperty, RefPtr()); MOCK_METHOD0(CreatePaintProperty, RefPtr()); -- Gitee From 50f75b22f58484900f4c60dda6bd8e7786498583 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Sat, 27 May 2023 09:26:09 +0800 Subject: [PATCH 4/7] fix compile errors Signed-off-by: Zhang Peng Change-Id: I2d01835902fb6f9596f9665a6d139ed95172c1fe --- adapter/preview/build/preview_common.gni | 2 +- frameworks/core/BUILD.gn | 4 +--- .../effect_view/effect_view_layout_algorithm.cpp | 4 +--- .../pattern/effect_view/effect_view_layout_algorithm.h | 2 -- .../pattern/effect_view/effect_view_model_ng.cpp | 6 ------ .../pattern/effect_view/effect_view_pattern.cpp | 2 -- .../pattern/effect_view/effect_view_pattern.h | 10 +--------- .../pattern/remote_window/remote_window_pattern.cpp | 2 +- .../render/adapter/rosen_render_context.cpp | 2 +- .../core/pipeline/pipeline_context_test_ng.cpp | 3 +-- 10 files changed, 7 insertions(+), 30 deletions(-) diff --git a/adapter/preview/build/preview_common.gni b/adapter/preview/build/preview_common.gni index a6119c3b3b8..5bc61964a87 100644 --- a/adapter/preview/build/preview_common.gni +++ b/adapter/preview/build/preview_common.gni @@ -14,7 +14,7 @@ xcomponent_components_support = false form_components_support = false remote_window_support = false -effect_view_support = true +effect_view_support = false use_curl_download = true accessibility_support = true rich_components_support = true diff --git a/frameworks/core/BUILD.gn b/frameworks/core/BUILD.gn index e30485b849a..c089ae5e093 100644 --- a/frameworks/core/BUILD.gn +++ b/frameworks/core/BUILD.gn @@ -503,9 +503,7 @@ template("ace_core_source_set") { if (defined(config.effect_view_support) && config.effect_view_support) { if (!use_mingw_win && !use_mac && !use_linux) { - deps += [ - "$ace_root/frameworks/core/components_ng/pattern/effect_view:ace_core_components_effect_view_pattern_ng_$platform", - ] + deps += [ "$ace_root/frameworks/core/components_ng/pattern/effect_view:ace_core_components_effect_view_pattern_ng_$platform" ] } } diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp index f312a88e7bb..e0fd6008344 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp @@ -16,9 +16,8 @@ #include "core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h" namespace OHOS::Ace::NG { - std::optional EffectViewLayoutAlgorithm::MeasureContent( - const LayoutConstraintF& contentConstraint, LayoutWrapper* /*layoutWrapper*/) + const LayoutConstraintF& contentConstraint, LayoutWrapper* /* layoutWrapper */) { OptionalSizeF contentSize; do { @@ -34,5 +33,4 @@ std::optional EffectViewLayoutAlgorithm::MeasureContent( return contentSize.ConvertToSizeT(); } - } // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h index 9c946f1f12d..8fe111c9b19 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h @@ -20,7 +20,6 @@ #include "core/components_ng/layout/layout_wrapper.h" namespace OHOS::Ace::NG { - class ACE_EXPORT EffectViewLayoutAlgorithm : public BoxLayoutAlgorithm { DECLARE_ACE_TYPE(EffectViewLayoutAlgorithm, BoxLayoutAlgorithm); @@ -36,5 +35,4 @@ private: ACE_DISALLOW_COPY_AND_MOVE(EffectViewLayoutAlgorithm); }; } // namespace OHOS::Ace::NG - #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp index 0f06ed18d99..1328742d384 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_model_ng.cpp @@ -19,7 +19,6 @@ #include "core/components_ng/base/frame_node.h" #include "core/components_ng/base/view_stack_processor.h" #include "core/components_ng/pattern/effect_view/effect_view_pattern.h" -// #include "core/components_ng/render/adapter/rosen_render_context.h" #include "core/components_v2/inspector/inspector_constants.h" namespace OHOS::Ace::NG { @@ -30,10 +29,5 @@ void EffectViewModelNG::Create() auto frameNode = FrameNode::GetOrCreateFrameNode( V2::EFFECT_VIEW_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr(); }); stack->Push(frameNode); -#ifdef ENABLE_ROSEN_BACKEND - // auto context = AceType::DynamicCast(frameNode->GetRenderContext()); - // CHECK_NULL_VOID(context); - // context->SetRSNode(rsNode); -#endif } } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp index 57d08af1067..bab9c603f75 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp @@ -21,7 +21,6 @@ #include "core/pipeline_ng/ui_task_scheduler.h" namespace OHOS::Ace::NG { - void EffectViewPattern::OnAttachToFrameNode() { auto host = GetHost(); @@ -29,5 +28,4 @@ void EffectViewPattern::OnAttachToFrameNode() host->GetLayoutProperty()->UpdateMeasureType(MeasureType::MATCH_PARENT); host->GetLayoutProperty()->UpdateAlignment(Alignment::TOP_LEFT); } - } // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h index ac84a6ff3b4..5450b9c571f 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h @@ -23,7 +23,6 @@ #include "core/components_ng/property/property.h" namespace OHOS::Ace::NG { - class ACE_EXPORT EffectViewPattern : public Pattern { DECLARE_ACE_TYPE(EffectViewPattern, Pattern); @@ -31,14 +30,9 @@ public: EffectViewPattern() = default; ~EffectViewPattern() override = default; - bool IsMeasureBoundary() const override - { - return true; - } - bool IsAtomicNode() const override { - return true; + return false; } std::optional GetContextParam() const override @@ -51,7 +45,5 @@ private: ACE_DISALLOW_COPY_AND_MOVE(EffectViewPattern); }; - } // namespace OHOS::Ace::NG - #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_EFFECT_VIEW_PATTERN_H diff --git a/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp b/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp index 3b2a06e8990..190767683de 100644 --- a/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp +++ b/frameworks/core/components_ng/pattern/remote_window/remote_window_pattern.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2022 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 diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index aecfec3e94e..36456bdbbee 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -205,7 +205,7 @@ void RosenRenderContext::InitContext(bool isRoot, const std::optionalsurfaceName.value_or("") }; rsNode_ = Rosen::RSSurfaceNode::Create(surfaceNodeConfig, false); break; - } + } case ContextType::EFFECT: // create effect view break; diff --git a/test/unittest/core/pipeline/pipeline_context_test_ng.cpp b/test/unittest/core/pipeline/pipeline_context_test_ng.cpp index 1cf1f417536..c55180b525d 100644 --- a/test/unittest/core/pipeline/pipeline_context_test_ng.cpp +++ b/test/unittest/core/pipeline/pipeline_context_test_ng.cpp @@ -1525,8 +1525,7 @@ HWTEST_F(PipelineContextTestNg, PipelineContextTestNg030, TestSize.Level1) EXPECT_CALL(*mockPattern_, ProvideRestoreInfo()) .Times(AnyNumber()) .WillRepeatedly(testing::Return("Default restore info")); - EXPECT_CALL(*mockPattern_, GetSurfaceNodeName()).Times(AnyNumber()).WillRepeatedly(testing::Return(std::nullopt)); - EXPECT_CALL(*mockPattern_, UseExternalRSNode()).Times(AnyNumber()).WillRepeatedly(testing::Return(false)); + EXPECT_CALL(*mockPattern_, GetContextParam()).Times(AnyNumber()).WillRepeatedly(testing::Return(std::nullopt)); EXPECT_CALL(*mockPattern_, CreatePaintProperty()) .Times(AnyNumber()) .WillRepeatedly(testing::Return(AceType::MakeRefPtr())); -- Gitee From c4e909aa68eb16451a885fb2634abf497134714e Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Sat, 27 May 2023 10:39:06 +0800 Subject: [PATCH 5/7] add useEffect options Signed-off-by: Zhang Peng Change-Id: I359c0df891f8dce9e525a0b3f43cc30a574093ec --- .../declarative_frontend/jsview/js_view_abstract.cpp | 8 ++++++++ .../declarative_frontend/jsview/js_view_abstract.h | 1 + .../jsview/models/view_abstract_model_impl.h | 2 ++ frameworks/core/components_ng/base/view_abstract.cpp | 9 +++++++++ frameworks/core/components_ng/base/view_abstract.h | 3 +++ frameworks/core/components_ng/base/view_abstract_model.h | 1 + .../core/components_ng/base/view_abstract_model_ng.h | 5 +++++ .../render/adapter/rosen_render_context.cpp | 6 ++++++ .../components_ng/render/adapter/rosen_render_context.h | 1 + frameworks/core/components_ng/render/render_context.h | 4 ++++ 10 files changed, 40 insertions(+) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp index 5fdeb97a765..1a4884cd5c4 100755 --- a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp @@ -2901,6 +2901,13 @@ void JSViewAbstract::JsColorBlend(const JSCallbackInfo& info) info.SetReturnValue(info.This()); } +void JSViewAbstract::JsUseEffect(const JSCallbackInfo& info) +{ + if (info[0]->IsBoolean()) { + ViewAbstractModel::GetInstance()->SetUseEffect(info[0]->ToBoolean()); + } +} + void JSViewAbstract::JsBackdropBlur(const JSCallbackInfo& info) { if (info.Length() < 1) { @@ -5035,6 +5042,7 @@ void JSViewAbstract::JSBind(BindingTarget globalObj) JSClass::StaticMethod("overlay", &JSViewAbstract::JsOverlay); JSClass::StaticMethod("blur", &JSViewAbstract::JsBlur); + JSClass::StaticMethod("useEffect", &JSViewAbstract::JsUseEffect); JSClass::StaticMethod("colorBlend", &JSViewAbstract::JsColorBlend); JSClass::StaticMethod("backdropBlur", &JSViewAbstract::JsBackdropBlur); JSClass::StaticMethod("windowBlur", &JSViewAbstract::JsWindowBlur); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h index cd2a2f7cead..b13ddee061f 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h @@ -113,6 +113,7 @@ public: static void ParseBorderImageDimension( const JSRef& args, BorderImage::BorderImageOption& borderImageDimension); static void ParseBorderImageLinearGradient(const JSRef& args, uint8_t& bitset); + static void JsUseEffect(const JSCallbackInfo& info); static void JsBlur(const JSCallbackInfo& info); static void JsColorBlend(const JSCallbackInfo& info); static void JsBackdropBlur(const JSCallbackInfo& info); diff --git a/frameworks/bridge/declarative_frontend/jsview/models/view_abstract_model_impl.h b/frameworks/bridge/declarative_frontend/jsview/models/view_abstract_model_impl.h index ad8fa75894b..797082c7545 100644 --- a/frameworks/bridge/declarative_frontend/jsview/models/view_abstract_model_impl.h +++ b/frameworks/bridge/declarative_frontend/jsview/models/view_abstract_model_impl.h @@ -125,6 +125,8 @@ public: void SetSepia(const Dimension& value) override; void SetInvert(const Dimension& value) override; void SetHueRotate(float value) override; + void SetUseEffect(bool) override {} + void SetClickEffectLevel(const ClickEffectLevel& level, float scaleValue) override {} void SetOnClick(GestureEventFunc&& tapEventFunc, ClickEventFunc&& clickEventFunc) override; void SetOnTouch(TouchEventFunc&& touchEventFunc) override; diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index df2920bc976..07d3abe85e7 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -1411,6 +1411,15 @@ void ViewAbstract::SetSharedTransition( } } +void ViewAbstract::SetUseEffect(bool useEffect) +{ + if (!ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess()) { + LOGD("current state is not processed, return"); + return; + } + ACE_UPDATE_RENDER_CONTEXT(UseEffect, useEffect); +} + void ViewAbstract::SetForegroundColor(const Color& color) { if (!ViewStackProcessor::GetInstance()->IsCurrentVisualStateProcess()) { diff --git a/frameworks/core/components_ng/base/view_abstract.h b/frameworks/core/components_ng/base/view_abstract.h index fa1c6575fd5..5d31db8bd52 100644 --- a/frameworks/core/components_ng/base/view_abstract.h +++ b/frameworks/core/components_ng/base/view_abstract.h @@ -251,6 +251,9 @@ public: static void Pop(); + // useEffect + static void SetUseEffect(bool useEffect); + // foregroundColor static void SetForegroundColor(const Color& color); static void SetForegroundColorStrategy(const ForegroundColorStrategy& strategy); diff --git a/frameworks/core/components_ng/base/view_abstract_model.h b/frameworks/core/components_ng/base/view_abstract_model.h index 1764043e12b..9f4b1875dbb 100644 --- a/frameworks/core/components_ng/base/view_abstract_model.h +++ b/frameworks/core/components_ng/base/view_abstract_model.h @@ -170,6 +170,7 @@ public: virtual void SetInvert(const Dimension& value) = 0; virtual void SetHueRotate(float value) = 0; virtual void SetClickEffectLevel(const ClickEffectLevel& level, float scaleValue) = 0; + virtual void SetUseEffect(bool useEffect) = 0; // event virtual void SetOnClick(GestureEventFunc&& tapEventFunc, ClickEventFunc&& clickEventFunc) = 0; diff --git a/frameworks/core/components_ng/base/view_abstract_model_ng.h b/frameworks/core/components_ng/base/view_abstract_model_ng.h index f8ed4690fe7..90a09edf7f8 100644 --- a/frameworks/core/components_ng/base/view_abstract_model_ng.h +++ b/frameworks/core/components_ng/base/view_abstract_model_ng.h @@ -593,6 +593,11 @@ public: ViewAbstract::SetHueRotate(value); } + void SetUseEffect(bool useEffect) override + { + ViewAbstract::SetUseEffect(useEffect); + } + void SetClickEffectLevel(const ClickEffectLevel& level, float scaleValue) override { ViewAbstract::SetClickEffectLevel(level, scaleValue); diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 36456bdbbee..2daeb84ca0b 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -888,6 +888,12 @@ void RosenRenderContext::OnAccessibilityFocusUpdate(bool isAccessibilityFocus) : AccessibilityEventType::ACCESSIBILITY_FOCUS_CLEARED); } +void RosenRenderContext::OnUseEffectUpdate(bool useEffect) +{ + CHECK_NULL_VOID(rsNode_); + // rsNode_->SetUseEffect(useEffect); +} + void RosenRenderContext::OnFreezeUpdate(bool isFreezed) { CHECK_NULL_VOID(rsNode_); diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.h b/frameworks/core/components_ng/render/adapter/rosen_render_context.h index 88df5bc696d..13550d917ab 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -282,6 +282,7 @@ private: void OnOverlayTextUpdate(const OverlayOptions& overlay) override; void OnMotionPathUpdate(const MotionPathOption& motionPath) override; + void OnUseEffectUpdate(bool useEffect) override; void OnFreezeUpdate(bool isFreezed) override; void ReCreateRsNodeTree(const std::list>& children); diff --git a/frameworks/core/components_ng/render/render_context.h b/frameworks/core/components_ng/render/render_context.h index c2f7f495100..317f678e987 100644 --- a/frameworks/core/components_ng/render/render_context.h +++ b/frameworks/core/components_ng/render/render_context.h @@ -395,6 +395,9 @@ public: // accessibility ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(AccessibilityFocus, bool); + // useEffect + ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(UseEffect, bool); + // freeze ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(Freeze, bool); @@ -457,6 +460,7 @@ protected: virtual void OnOverlayTextUpdate(const OverlayOptions& overlay) {} virtual void OnMotionPathUpdate(const MotionPathOption& motionPath) {} + virtual void OnUseEffectUpdate(bool useEffect) {} virtual void OnFreezeUpdate(bool isFreezed) {} virtual void OnObscuredUpdate(const std::vector& reasons) {} -- Gitee From fc59d7c85474b5cdf1ff9076036b149b3389914c Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Mon, 29 May 2023 19:42:38 +0800 Subject: [PATCH 6/7] adapt to rs_effect_node and use_effect Signed-off-by: Zhang Peng Change-Id: I7112e5ff8667b4b39ee8071da14fb3ae551f963a --- .../components_ng/render/adapter/rosen_render_context.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index 2daeb84ca0b..1221d9c5cfc 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -21,6 +21,7 @@ #include "render_service_client/core/pipeline/rs_node_map.h" #include "render_service_client/core/transaction/rs_interfaces.h" #include "render_service_client/core/ui/rs_canvas_node.h" +#include "render_service_client/core/ui/rs_effect_node.h" #include "render_service_client/core/ui/rs_root_node.h" #include "render_service_client/core/ui/rs_surface_node.h" @@ -207,7 +208,7 @@ void RosenRenderContext::InitContext(bool isRoot, const std::optionalSetUseEffect(useEffect); + rsNode_->SetUseEffect(useEffect); } void RosenRenderContext::OnFreezeUpdate(bool isFreezed) -- Gitee From 3c3b8d2dffd28dbd413e7b1ff2a59ab3e7ef7686 Mon Sep 17 00:00:00 2001 From: Zhang Peng Date: Wed, 31 May 2023 20:35:15 +0800 Subject: [PATCH 7/7] fix format_check Signed-off-by: Zhang Peng Change-Id: I524bc545a1a3b525cfb8115c5f347ee9ebfbf717 --- .../jsview/js_effect_view.cpp | 2 +- frameworks/core/BUILD.gn | 6 --- .../core/components_ng/pattern/BUILD.gn | 1 + .../pattern/effect_view/BUILD.gn | 24 ------------ .../effect_view_layout_algorithm.cpp | 36 ------------------ .../effect_view_layout_algorithm.h | 38 ------------------- .../effect_view/effect_view_pattern.cpp | 31 --------------- .../pattern/effect_view/effect_view_pattern.h | 2 - .../window_scene/scene/system_window_scene.h | 4 +- 9 files changed, 4 insertions(+), 140 deletions(-) delete mode 100644 frameworks/core/components_ng/pattern/effect_view/BUILD.gn delete mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp delete mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h delete mode 100644 frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp diff --git a/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp b/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp index 8fb942044cf..5a444028752 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_effect_view.cpp @@ -34,7 +34,7 @@ EffectViewModel* EffectViewModel::GetInstance() if (Container::IsCurrentUseNewPipeline()) { instance_.reset(new NG::EffectViewModelNG()); } else { - // empty implentation + // empty implementation instance_.reset(new Framework::EffectViewModelImpl()); } } diff --git a/frameworks/core/BUILD.gn b/frameworks/core/BUILD.gn index c089ae5e093..70e7490b09d 100644 --- a/frameworks/core/BUILD.gn +++ b/frameworks/core/BUILD.gn @@ -501,12 +501,6 @@ template("ace_core_source_set") { } } - if (defined(config.effect_view_support) && config.effect_view_support) { - if (!use_mingw_win && !use_mac && !use_linux) { - deps += [ "$ace_root/frameworks/core/components_ng/pattern/effect_view:ace_core_components_effect_view_pattern_ng_$platform" ] - } - } - if (defined(config.build_container_scope_lib) && config.build_container_scope_lib) { sources -= [ "common/container_scope.cpp" ] diff --git a/frameworks/core/components_ng/pattern/BUILD.gn b/frameworks/core/components_ng/pattern/BUILD.gn index 4e0d2fdbd07..bf007288bef 100644 --- a/frameworks/core/components_ng/pattern/BUILD.gn +++ b/frameworks/core/components_ng/pattern/BUILD.gn @@ -93,6 +93,7 @@ build_component_ng("pattern_ng") { "divider/divider_model_ng.cpp", "divider/divider_modifier.cpp", "divider/divider_pattern.cpp", + "effect_view/effect_view_model_ng.cpp", "flex/flex_layout_algorithm.cpp", "flex/flex_model_ng.cpp", "flex/wrap_layout_algorithm.cpp", diff --git a/frameworks/core/components_ng/pattern/effect_view/BUILD.gn b/frameworks/core/components_ng/pattern/effect_view/BUILD.gn deleted file mode 100644 index 4c4df9d05c8..00000000000 --- a/frameworks/core/components_ng/pattern/effect_view/BUILD.gn +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (c) 2023 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. - -import("//foundation/arkui/ace_engine/ace_config.gni") -import( - "//foundation/arkui/ace_engine/frameworks/core/components_ng/components.gni") - -build_component_ng("effect_view_pattern_ng") { - sources = [ - "effect_view_layout_algorithm.cpp", - "effect_view_model_ng.cpp", - "effect_view_pattern.cpp", - ] -} diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp deleted file mode 100644 index e0fd6008344..00000000000 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2023 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 "core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h" - -namespace OHOS::Ace::NG { -std::optional EffectViewLayoutAlgorithm::MeasureContent( - const LayoutConstraintF& contentConstraint, LayoutWrapper* /* layoutWrapper */) -{ - OptionalSizeF contentSize; - do { - // Use idea size first if it is valid. - contentSize.UpdateSizeWithCheck(contentConstraint.selfIdealSize); - if (contentSize.IsValid()) { - break; - } - contentSize.UpdateIllegalSizeWithCheck(contentConstraint.parentIdealSize); - // use max is parent ideal size is invalid. - contentSize.UpdateIllegalSizeWithCheck(contentConstraint.maxSize); - } while (false); - - return contentSize.ConvertToSizeT(); -} -} // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h deleted file mode 100644 index 8fe111c9b19..00000000000 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_layout_algorithm.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2023 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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H -#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H - -#include "core/components_ng/layout/box_layout_algorithm.h" -#include "core/components_ng/layout/layout_wrapper.h" - -namespace OHOS::Ace::NG { -class ACE_EXPORT EffectViewLayoutAlgorithm : public BoxLayoutAlgorithm { - DECLARE_ACE_TYPE(EffectViewLayoutAlgorithm, BoxLayoutAlgorithm); - -public: - EffectViewLayoutAlgorithm() = default; - - ~EffectViewLayoutAlgorithm() override = default; - - std::optional MeasureContent( - const LayoutConstraintF& contentConstraint, LayoutWrapper* layoutWrapper) override; - -private: - ACE_DISALLOW_COPY_AND_MOVE(EffectViewLayoutAlgorithm); -}; -} // namespace OHOS::Ace::NG -#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_EFFECT_VIEW_LAYOUT_ALGORITHM_H diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp deleted file mode 100644 index bab9c603f75..00000000000 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2023 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 "core/components_ng/pattern/effect_view/effect_view_pattern.h" - -#include "base/geometry/rect.h" -#include "base/utils/utils.h" -#include "core/pipeline_ng/pipeline_context.h" -#include "core/pipeline_ng/ui_task_scheduler.h" - -namespace OHOS::Ace::NG { -void EffectViewPattern::OnAttachToFrameNode() -{ - auto host = GetHost(); - CHECK_NULL_VOID(host); - host->GetLayoutProperty()->UpdateMeasureType(MeasureType::MATCH_PARENT); - host->GetLayoutProperty()->UpdateAlignment(Alignment::TOP_LEFT); -} -} // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h index 5450b9c571f..3d5cf16d04f 100644 --- a/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h +++ b/frameworks/core/components_ng/pattern/effect_view/effect_view_pattern.h @@ -41,8 +41,6 @@ public: } private: - void OnAttachToFrameNode() override; - ACE_DISALLOW_COPY_AND_MOVE(EffectViewPattern); }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/window_scene/scene/system_window_scene.h b/frameworks/core/components_ng/pattern/window_scene/scene/system_window_scene.h index 0df67c277c7..c22af20a9c2 100644 --- a/frameworks/core/components_ng/pattern/window_scene/scene/system_window_scene.h +++ b/frameworks/core/components_ng/pattern/window_scene/scene/system_window_scene.h @@ -28,9 +28,9 @@ public: explicit SystemWindowScene(const sptr& session) : session_(session) {} ~SystemWindowScene() override = default; - bool UseExternalRSNode() const override + std::optional GetContextParam() const override { - return true; + return RenderContext::ContextParam { RenderContext::ContextType::EXTERNAL }; } protected: -- Gitee