diff --git a/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts b/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts index 0931c26eda5440b79dfcd55d115f9ec0586e455a..9b6aa780d52c59d561c197d0f43bc62ef7ad174a 100644 --- a/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts +++ b/frameworks/bridge/declarative_frontend/ark_component/export/arkComponent.d.ts @@ -1723,6 +1723,7 @@ declare class ArkXComponentComponent implements CommonMethod void): this; enableSecure(value: boolean): this; hdrBrightness(value: number): this; + enableTransparentLayer(value: boolean): this; } declare class ArkBadgeComponent extends ArkComponent implements BadgeAttribute { constructor(nativePtr: KNode, classType?: ModifierType); diff --git a/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts b/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts index 1411cc706561b544f781d71560a8dcfa31b45b13..149a5be3b025e3521b86b717d98a27cc0931d2f9 100644 --- a/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts +++ b/frameworks/bridge/declarative_frontend/ark_component/src/ArkXComponent.ts @@ -480,6 +480,14 @@ class ArkXComponentComponent extends ArkComponent implements XComponentAttribute modifierWithKey(this._modifiersWithKeys, XComponentEnableSecureModifier.identity, XComponentEnableSecureModifier, value); return this; } + hdrBrightness(value: number): this { + modifierWithKey(this._modifiersWithKeys, XComponentHdrBrightnessModifier.identity, XComponentHdrBrightnessModifier, value); + return this; + } + enableTransparentLayer(value: boolean): this { + modifierWithKey(this._modifiersWithKeys, XComponentEnableTransparentLayerModifier.identity, XComponentEnableTransparentLayerModifier, value); + return this; + } } // @ts-ignore @@ -883,6 +891,42 @@ class XComponentEnableSecureModifier extends ModifierWithKey { } } +class XComponentHdrBrightnessModifier extends ModifierWithKey { + constructor(value: number) { + super(value); + } + static identity: Symbol = Symbol('xComponentHdrBrightness'); + applyPeer(node: KNode, reset: boolean): void { + if (reset) { + getUINativeModule().xComponent.resetHdrBrightness(node); + } else { + getUINativeModule().xComponent.setHdrBrightness(node, this.value); + } + } + + checkObjectDiff(): boolean { + return !isBaseOrResourceEqual(this.stageValue, this.value); + } +} + +class XComponentEnableTransparentLayerModifier extends ModifierWithKey { + constructor(value: boolean) { + super(value); + } + static identity: Symbol = Symbol('xComponentEnableTransparentLayer'); + applyPeer(node: KNode, reset: boolean): void { + if (reset) { + getUINativeModule().xComponent.resetEnableTransparentLayer(node); + } else { + getUINativeModule().xComponent.setEnableTransparentLayer(node, this.value); + } + } + + checkObjectDiff(): boolean { + return !isBaseOrResourceEqual(this.stageValue, this.value); + } +} + class XComponentRenderFitModifier extends ModifierWithKey { constructor(value: number) { super(value); diff --git a/frameworks/bridge/declarative_frontend/engine/arkComponent.js b/frameworks/bridge/declarative_frontend/engine/arkComponent.js index 9fb46c2e9846a3890fd3ddf2ff62232c940c0df7..5cf8b15e9dbcb339ed5c03a94f6f2ceca378a309 100755 --- a/frameworks/bridge/declarative_frontend/engine/arkComponent.js +++ b/frameworks/bridge/declarative_frontend/engine/arkComponent.js @@ -26530,6 +26530,10 @@ class ArkXComponentComponent extends ArkComponent { modifierWithKey(this._modifiersWithKeys, XComponentHdrBrightnessModifier.identity, XComponentHdrBrightnessModifier, value); return this; } + enableTransparentLayer(value) { + modifierWithKey(this._modifiersWithKeys, XComponentEnableTransparentLayerModifier.identity, XComponentEnableTransparentLayerModifier, value); + return this; + } } // @ts-ignore if (globalThis.XComponent !== undefined) { @@ -26954,10 +26958,27 @@ class XComponentHdrBrightnessModifier extends ModifierWithKey { } } checkObjectDiff() { - return !this.value.isEqual(this.stageValue); + return !isBaseOrResourceEqual(this.stageValue, this.value); } } XComponentHdrBrightnessModifier.identity = Symbol('xComponentHdrBrightness'); +class XComponentEnableTransparentLayerModifier extends ModifierWithKey { + constructor(value) { + super(value); + } + applyPeer(node, reset) { + if (reset) { + getUINativeModule().xComponent.resetEnableTransparentLayer(node); + } + else { + getUINativeModule().xComponent.setEnableTransparentLayer(node, this.value); + } + } + checkObjectDiff() { + return !isBaseOrResourceEqual(this.stageValue, this.value); + } +} +XComponentEnableTransparentLayerModifier.identity = Symbol('xComponentEnableTransparentLayer'); class XComponentRenderFitModifier extends ModifierWithKey { constructor(value) { super(value); diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp index 7289aaf738208374ddb93e1ab88b37c926a69911..62aa464fb6a7f59e3238c1171716f1e1004928a3 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_api_impl_bridge.cpp @@ -5440,6 +5440,10 @@ void ArkUINativeModule::RegisterXComponentAttributes(Local obj panda::FunctionRef::New(const_cast(vm), XComponentBridge::SetHdrBrightness)); xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "resetHdrBrightness"), panda::FunctionRef::New(const_cast(vm), XComponentBridge::ResetHdrBrightness)); + xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "setEnableTransparentLayer"), + panda::FunctionRef::New(const_cast(vm), XComponentBridge::SetEnableTransparentLayer)); + xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "resetEnableTransparentLayer"), + panda::FunctionRef::New(const_cast(vm), XComponentBridge::ResetEnableTransparentLayer)); xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "setRenderFit"), panda::FunctionRef::New(const_cast(vm), XComponentBridge::SetRenderFit)); xComponent->Set(vm, panda::StringRef::NewFromUtf8(vm, "resetRenderFit"), diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp index cf58cc929da19c080706001ac9872cf47cad359f..cd78312c4913b79adf43c87ef46ac0dae3092826 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.cpp @@ -747,6 +747,35 @@ ArkUINativeModuleValue XComponentBridge::ResetHdrBrightness(ArkUIRuntimeCallInfo return panda::JSValueRef::Undefined(vm); } +ArkUINativeModuleValue XComponentBridge::SetEnableTransparentLayer(ArkUIRuntimeCallInfo *runtimeCallInfo) +{ + EcmaVM *vm = runtimeCallInfo->GetVM(); + CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm)); + Local firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST); + Local secondArg = runtimeCallInfo->GetCallArgRef(ARG_ID); + CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm)); + auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value()); + if (secondArg->IsBoolean()) { + bool enableTransparentLayer = secondArg->ToBoolean(vm)->Value(); + GetArkUINodeModifiers()->getXComponentModifier()->setXComponentEnableTransparentLayer( + nativeNode, enableTransparentLayer); + } else { + GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableTransparentLayer(nativeNode); + } + return panda::JSValueRef::Undefined(vm); +} + +ArkUINativeModuleValue XComponentBridge::ResetEnableTransparentLayer(ArkUIRuntimeCallInfo *runtimeCallInfo) +{ + EcmaVM *vm = runtimeCallInfo->GetVM(); + CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm)); + Local firstArg = runtimeCallInfo->GetCallArgRef(ARG_FIRST); + CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm)); + auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value()); + GetArkUINodeModifiers()->getXComponentModifier()->resetXComponentEnableTransparentLayer(nativeNode); + return panda::JSValueRef::Undefined(vm); +} + ArkUINativeModuleValue XComponentBridge::SetRenderFit(ArkUIRuntimeCallInfo* runtimeCallInfo) { EcmaVM *vm = runtimeCallInfo->GetVM(); diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h index 86cf9a13e7f324fef19bb7a34f7c2b1441dd1d91..16e5ce407682109778ec2b8b43901f644024662d 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_xcomponent_bridge.h @@ -78,6 +78,8 @@ public: static ArkUINativeModuleValue ResetEnableSecure(ArkUIRuntimeCallInfo* runtimeCallInfo); static ArkUINativeModuleValue SetHdrBrightness(ArkUIRuntimeCallInfo* runtimeCallInfo); static ArkUINativeModuleValue ResetHdrBrightness(ArkUIRuntimeCallInfo* runtimeCallInfo); + static ArkUINativeModuleValue SetEnableTransparentLayer(ArkUIRuntimeCallInfo* runtimeCallInfo); + static ArkUINativeModuleValue ResetEnableTransparentLayer(ArkUIRuntimeCallInfo* runtimeCallInfo); static ArkUINativeModuleValue SetRenderFit(ArkUIRuntimeCallInfo* runtimeCallInfo); static ArkUINativeModuleValue ResetRenderFit(ArkUIRuntimeCallInfo* runtimeCallInfo); diff --git a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp index 53caff519acd376172a3e34f1a2591855c5140e4..cf988dfa6e166355e86608b16dc71f69dbb539b7 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.cpp @@ -197,6 +197,7 @@ void JSXComponent::JSBind(BindingTarget globalObj) JSClass::StaticMethod("enableSecure", &JSXComponent::JsEnableSecure); JSClass::StaticMethod("hdrBrightness", &JSXComponent::JsHdrBrightness); JSClass::StaticMethod("blendMode", &JSXComponent::JsBlendMode); + JSClass::StaticMethod("enableTransparentLayer", &JSXComponent::JsEnableTransparentLayer); JSClass::InheritAndBind(globalObj); } @@ -748,4 +749,17 @@ void JSXComponent::JsBlendMode(const JSCallbackInfo& args) JSViewAbstract::JsBlendMode(args); } + +void JSXComponent::JsEnableTransparentLayer(const JSCallbackInfo& args) +{ + auto type = XComponentModel::GetInstance()->GetType(); + if (type != XComponentType::SURFACE || args.Length() != 1) { + return; + } + // set isTransparentLayer on SurfaceNode when type is SURFACE + if (args[0]->IsBoolean()) { + bool isTransparentLayer = args[0]->ToBoolean(); + XComponentModel::GetInstance()->EnableTransparentLayer(isTransparentLayer); + } +} } // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h index 13539f0e2b9befa7f7a3c30bdf1059bd1116e995..6adc555d49bf4f4cbd9a3b34d2d13b10128e6aba 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_xcomponent.h @@ -184,6 +184,7 @@ public: static void JsEnableSecure(const JSCallbackInfo& args); static void JsHdrBrightness(const JSCallbackInfo& args); static void JsBlendMode(const JSCallbackInfo& args); + static void JsEnableTransparentLayer(const JSCallbackInfo& args); // For xcomponent node static void* Create(const XComponentParams& params); diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h index 1768d34ff340faecf63fb018851a55e95bb65127..b59685b9bf2a0b666954a6cb27ab38eddbb52e6c 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model.h @@ -82,6 +82,7 @@ public: virtual void SetRenderFit(RenderFit renderFit) {} virtual void EnableSecure(bool isSecure) {} virtual void HdrBrightness(float hdrBrightness) {} + virtual void EnableTransparentLayer(bool isTransparentLayer) {} }; } // namespace OHOS::Ace #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_XCOMPONENT_XCOMPONENT_MODEL_H diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp index baf1f50fdee2433261be8110fc2e71a335175249..41964af0cb93d1bba1dbc89b09b2f5f6ba287f04 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.cpp @@ -285,6 +285,15 @@ void XComponentModelNG::HdrBrightness(float hdrBrightness) xcPattern->HdrBrightness(hdrBrightness); } +void XComponentModelNG::EnableTransparentLayer(bool isTransparentLayer) +{ + auto frameNode = AceType::Claim(ViewStackProcessor::GetInstance()->GetMainFrameNode()); + CHECK_NULL_VOID(frameNode); + auto xcPattern = AceType::DynamicCast(frameNode->GetPattern()); + CHECK_NULL_VOID(xcPattern); + xcPattern->EnableTransparentLayer(isTransparentLayer); +} + bool XComponentModelNG::IsTexture(FrameNode *frameNode) { auto layoutProperty = frameNode->GetLayoutProperty(); @@ -511,6 +520,14 @@ void XComponentModelNG::HdrBrightness(FrameNode* frameNode, float hdrBrightness) xcPattern->HdrBrightness(hdrBrightness); } +void XComponentModelNG::EnableTransparentLayer(FrameNode* frameNode, bool enable) +{ + CHECK_NULL_VOID(frameNode); + auto xcPattern = AceType::DynamicCast(frameNode->GetPattern()); + CHECK_NULL_VOID(xcPattern); + xcPattern->EnableTransparentLayer(enable); +} + void XComponentModelNG::SetRenderFit(FrameNode* frameNode, RenderFit renderFit) { CHECK_NULL_VOID(frameNode); diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h index a924fa3bb854422f4ef218996311db257c54ed5f..d3d2e138280106bece50b69ca3f4ba38862486bc 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_model_ng.h @@ -59,6 +59,7 @@ public: void SetRenderFit(RenderFit renderFit) override; void EnableSecure(bool isSecure) override; void HdrBrightness(float hdrBrightness) override; + void EnableTransparentLayer(bool isTransparentLayer) override; static bool IsTexture(FrameNode* frameNode); static XComponentType GetType(FrameNode* frameNode); @@ -84,6 +85,7 @@ public: static void EnableAnalyzer(FrameNode* frameNode, bool enable); static void EnableSecure(FrameNode* frameNode, bool enable); static void HdrBrightness(FrameNode* frameNode, float hdrBrightness); + static void EnableTransparentLayer(FrameNode* frameNode, bool enable); static void SetRenderFit(FrameNode* frameNode, RenderFit renderFit); private: diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp index f1977f97fdd4eb0ef1db304f2ee872de1c22241c..24eba94e42f3c060146e0e296f09a4f74f9f013b 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.cpp @@ -567,6 +567,7 @@ void XComponentPattern::ToJsonValue(std::unique_ptr& json, const Insp json->PutExtAttr("enableAnalyzer", isEnableAnalyzer_ ? "true" : "false", filter); json->PutExtAttr("enableSecure", isEnableSecure_ ? "true" : "false", filter); json->PutExtAttr("hdrBrightness", std::to_string(hdrBrightness_).c_str(), filter); + json->PutExtAttr("enableTransparentLayer", isTransparentLayer_ ? "true" : "false", filter); } void XComponentPattern::SetRotation(uint32_t rotation) @@ -637,6 +638,10 @@ void XComponentPattern::DumpInfo() void XComponentPattern::DumpAdvanceInfo() { + DumpLog::GetInstance().AddDesc(std::string("enableSecure: ").append(isEnableSecure_ ? "true" : "false")); + DumpLog::GetInstance().AddDesc(std::string("hdrBrightness: ").append(std::to_string(hdrBrightness_).c_str())); + DumpLog::GetInstance().AddDesc( + std::string("enableTransparentLayer: ").append(isTransparentLayer_ ? "true" : "false")); if (renderSurface_) { renderSurface_->DumpInfo(); } @@ -2068,4 +2073,14 @@ void XComponentPattern::HdrBrightness(float hdrBrightness) renderContextForSurface_->SetHDRBrightness(std::clamp(hdrBrightness, 0.0f, 1.0f)); hdrBrightness_ = std::clamp(hdrBrightness, 0.0f, 1.0f); } + +void XComponentPattern::EnableTransparentLayer(bool isTransparentLayer) +{ + if (type_ != XComponentType::SURFACE) { + return; + } + CHECK_NULL_VOID(renderContextForSurface_); + renderContextForSurface_->SetTransparentLayer(isTransparentLayer); + isTransparentLayer_ = isTransparentLayer; +} } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h index a4d9d01b00b087f437937aab69c0ff2f9c874e8f..424de7af232fa9896252ba54d30f4a1b4eca0c8d 100644 --- a/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h +++ b/frameworks/core/components_ng/pattern/xcomponent/xcomponent_pattern.h @@ -325,6 +325,7 @@ public: void OnSurfaceCallbackModeChange(SurfaceCallbackMode mode); void EnableSecure(bool isSecure); void HdrBrightness(float hdrBrightness); + void EnableTransparentLayer(bool isTransparentLayer); private: void OnAttachToFrameNode() override; @@ -463,6 +464,7 @@ private: bool hasLoadNativeDone_ = false; bool isEnableSecure_ = false; float hdrBrightness_ = 1.0f; + bool isTransparentLayer_ = false; SurfaceCallbackMode surfaceCallbackMode_ = SurfaceCallbackMode::DEFAULT; std::function surfaceCallbackModeChangeEvent_; }; 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 dba344bd37db5b3ddff646e72a6e5c3b58656841..54755d16966216072c1b36e4bb87b709a62af170 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -4930,6 +4930,14 @@ void RosenRenderContext::SetHDRBrightness(float hdrBrightness) rsSurfaceNode->SetHDRBrightness(hdrBrightness); } +void RosenRenderContext::SetTransparentLayer(bool isTransparentLayer) +{ + CHECK_NULL_VOID(rsNode_); + auto rsSurfaceNode = rsNode_->ReinterpretCastTo(); + CHECK_NULL_VOID(rsSurfaceNode); + rsSurfaceNode->SetHardwareEnableHint(isTransparentLayer); +} + void RosenRenderContext::SetFrameGravity(OHOS::Rosen::Gravity gravity) { 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 f2a3377ccc11e45429d529557d4ad009344b5b3d..8fb985dccd6caa7a9f5e3962680378fd76d59dba 100755 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.h +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.h @@ -275,6 +275,7 @@ public: void SetBounds(float positionX, float positionY, float width, float height) override; void SetSecurityLayer(bool isSecure) override; void SetHDRBrightness(float hdrBrightness) override; + void SetTransparentLayer(bool isTransparentLayer) override; void OnTransformTranslateUpdate(const TranslateOptions& value) override; Vector3F MarshallTranslate(const TranslateOptions& translate); bool DoTextureExport(uint64_t surfaceId) override; diff --git a/frameworks/core/components_ng/render/render_context.h b/frameworks/core/components_ng/render/render_context.h index 64ae7e013be74e1f9aa896dc808ffb5e25e09121..4ce55bc30535918b3fb522ccd0ae71194e2ab296 100644 --- a/frameworks/core/components_ng/render/render_context.h +++ b/frameworks/core/components_ng/render/render_context.h @@ -290,7 +290,8 @@ public: virtual void SetContentRectToFrame(RectF rect) {} virtual void SetSecurityLayer(bool isSecure) {} virtual void SetHDRBrightness(float hdrBrightness) {} - + virtual void SetTransparentLayer(bool isTransparentLayer) {} + virtual void UpdateBackBlurRadius(const Dimension& radius) {} virtual void UpdateBackBlurStyle(const std::optional& bgBlurStyle) {} virtual void UpdateBackgroundEffect(const std::optional& effectOption) {} diff --git a/frameworks/core/interfaces/arkoala/arkoala_api.h b/frameworks/core/interfaces/arkoala/arkoala_api.h index c57b33caa11108939f8b3f8eaa4f8f3139c30a0d..d8eef8048553ac6a34bcaa282c4700131dc47f91 100644 --- a/frameworks/core/interfaces/arkoala/arkoala_api.h +++ b/frameworks/core/interfaces/arkoala/arkoala_api.h @@ -4908,6 +4908,8 @@ struct ArkUIXComponentModifier { void (*resetXComponentEnableSecure)(ArkUINodeHandle node); void (*setXComponentHdrBrightness)(ArkUINodeHandle node, ArkUI_Float32 hdrBrightness); void (*resetXComponentHdrBrightness)(ArkUINodeHandle node); + void (*setXComponentEnableTransparentLayer)(ArkUINodeHandle node, ArkUI_Bool enable); + void (*resetXComponentEnableTransparentLayer)(ArkUINodeHandle node); void (*setXComponentRenderFit)(ArkUINodeHandle node, ArkUI_Int32 renderFit); void (*resetXComponentRenderFit)(ArkUINodeHandle node); }; diff --git a/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp b/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp index 77a964ad12ea717c0c90c6b86a298d990f217eb3..559495e9989704b6e419127267d828191b59b581 100644 --- a/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp +++ b/frameworks/core/interfaces/native/node/node_xcomponent_modifier.cpp @@ -191,6 +191,20 @@ void ResetXComponentHdrBrightness(ArkUINodeHandle node) XComponentModelNG::HdrBrightness(frameNode, 1.0f); } +void SetXComponentEnableTransparentLayer(ArkUINodeHandle node, ArkUI_Bool enable) +{ + auto* frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + XComponentModelNG::EnableTransparentLayer(frameNode, enable); +} + +void ResetXComponentEnableTransparentLayer(ArkUINodeHandle node) +{ + auto* frameNode = reinterpret_cast(node); + CHECK_NULL_VOID(frameNode); + XComponentModelNG::EnableTransparentLayer(frameNode, false); +} + void SetXComponentRenderFit(ArkUINodeHandle node, ArkUI_Int32 renderFitNumber) { auto* frameNode = reinterpret_cast(node); @@ -247,6 +261,8 @@ const ArkUIXComponentModifier* GetXComponentModifier() .resetXComponentEnableSecure = ResetXComponentEnableSecure, .setXComponentHdrBrightness = SetXComponentHdrBrightness, .resetXComponentHdrBrightness = ResetXComponentHdrBrightness, + .setXComponentEnableTransparentLayer = SetXComponentEnableTransparentLayer, + .resetXComponentEnableTransparentLayer = ResetXComponentEnableTransparentLayer, .setXComponentRenderFit = SetXComponentRenderFit, .resetXComponentRenderFit = ResetXComponentRenderFit, }; diff --git a/test/mock/core/render/mock_render_context.h b/test/mock/core/render/mock_render_context.h index 5d12c99fe0db85460860f9777ad175ac50f8b63c..7d9b74103be9bbaeb4f386589ce7e14b5532265d 100644 --- a/test/mock/core/render/mock_render_context.h +++ b/test/mock/core/render/mock_render_context.h @@ -40,6 +40,7 @@ public: MOCK_METHOD1(SetRenderFit, void(RenderFit)); MOCK_METHOD1(SetSecurityLayer, void(bool)); MOCK_METHOD1(SetContentClip, void(const std::variant>&)); + MOCK_METHOD1(SetTransparentLayer, void(bool)); void SetVisible(bool visible) override { diff --git a/test/unittest/core/pattern/xcomponent/xcomponent_testtwo_ng.cpp b/test/unittest/core/pattern/xcomponent/xcomponent_testtwo_ng.cpp index eb93a69b45e3ec9dd9cb31a2ce49b460729ead21..5268891959d94b23700ef37a00dd3385654c65dd 100644 --- a/test/unittest/core/pattern/xcomponent/xcomponent_testtwo_ng.cpp +++ b/test/unittest/core/pattern/xcomponent/xcomponent_testtwo_ng.cpp @@ -557,4 +557,35 @@ HWTEST_F(XComponentTestTwoNg, XComponentTestTwoNg017, TestSize.Level1) SetSecurityLayer(false)).Times(0); pattern->EnableSecure(false); } + +/** + * @tc.name: EnableLayerTransparentTest + * @tc.desc: Test EnableLayerTransparent Func. + * @tc.type: FUNC + */ +HWTEST_F(XComponentTestTwoNg, EnableLayerTransparentTest, TestSize.Level1) +{ + g_testProperty.xcType = XCOMPONENT_SURFACE_TYPE_VALUE; + auto frameNode = CreateXComponentNode(g_testProperty); + ASSERT_TRUE(frameNode); + + auto pattern = frameNode->GetPattern(); + ASSERT_TRUE(pattern); + + EXPECT_CALL(*AceType::DynamicCast(pattern->renderContextForSurface_), + SetTransparentLayer(true)).WillOnce(Return()); + pattern->EnableTransparentLayer(true); + EXPECT_CALL(*AceType::DynamicCast(pattern->renderContextForSurface_), + SetTransparentLayer(false)).WillOnce(Return()); + pattern->EnableTransparentLayer(false); + + pattern->type_ = XCOMPONENT_TEXTURE_TYPE_VALUE; + + EXPECT_CALL(*AceType::DynamicCast(pattern->renderContextForSurface_), + SetTransparentLayer(true)).Times(0); + pattern->EnableTransparentLayer(true); + EXPECT_CALL(*AceType::DynamicCast(pattern->renderContextForSurface_), + SetTransparentLayer(false)).Times(0); + pattern->EnableTransparentLayer(false); +} } // namespace OHOS::Ace::NG