diff --git a/frameworks/bridge/declarative_frontend/view_stack_processor.cpp b/frameworks/bridge/declarative_frontend/view_stack_processor.cpp index b26fece6..f4bf736e 100644 --- a/frameworks/bridge/declarative_frontend/view_stack_processor.cpp +++ b/frameworks/bridge/declarative_frontend/view_stack_processor.cpp @@ -658,6 +658,11 @@ RefPtr ViewStackProcessor::WrapComponents() coverageComponent->AppendChild(menuComponent); } } + + auto focusableComponent = AceType::DynamicCast(components[idx - 1]); + if (focusableComponent) { + Component::MergeRSNode(components[idx], focusableComponent); + } } auto component = components.front(); diff --git a/frameworks/core/components/box/rosen_render_box.cpp b/frameworks/core/components/box/rosen_render_box.cpp index d4e8e95e..e42c49ec 100644 --- a/frameworks/core/components/box/rosen_render_box.cpp +++ b/frameworks/core/components/box/rosen_render_box.cpp @@ -906,8 +906,18 @@ void RosenRenderBox::SetBackgroundPosition(const BackgroundImagePosition& positi LOGE("set background position to rsNode failed, rsNode is null"); return; } - rsNode->SetBgImagePositionX(position.GetSizeValueX()); - rsNode->SetBgImagePositionY(position.GetSizeValueY()); + if (position.GetSizeTypeX() == BackgroundImagePositionType::PX) { + rsNode->SetBgImagePositionX(position.GetSizeValueX()); + } else { + rsNode->SetBgImagePositionX(position.GetSizeValueX() * + (paintSize_.Width() - rsNode->GetStagingProperties().GetBgImageWidth()) / PERCENT_TRANSLATE); + } + if (position.GetSizeTypeX() == BackgroundImagePositionType::PX) { + rsNode->SetBgImagePositionX(position.GetSizeValueX()); + } else { + rsNode->SetBgImagePositionY(position.GetSizeValueY() * + (paintSize_.Height() - rsNode->GetStagingProperties().GetBgImageHeight()) / PERCENT_TRANSLATE); + } } void RosenRenderBox::SetShadow(const Shadow& shadow)