!44211 修复menu按压拖动的时候,分割线异常挑单5.0.0release

Merge pull request !44211 from FredTT/cherry-pick-1727061435
This commit is contained in:
openharmony_ci 2024-09-24 14:32:30 +00:00 committed by Gitee
commit 103644e9f1
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 18 additions and 12 deletions

View File

@ -681,7 +681,19 @@ void MenuItemPattern::OnTouch(const TouchEventInfo& info)
{
// change menu item paint props on press
auto touchType = info.GetTouches().front().GetTouchType();
auto pipeline = PipelineBase::GetCurrentContext();
if (touchType == TouchType::DOWN) {
// change background color, update press status
NotifyPressStatus(true);
} else if (touchType == TouchType::UP) {
NotifyPressStatus(false);
}
}
void MenuItemPattern::NotifyPressStatus(bool isPress)
{
auto host = GetHost();
CHECK_NULL_VOID(host);
auto pipeline = host->GetContext();
CHECK_NULL_VOID(pipeline);
auto theme = pipeline->GetTheme<SelectTheme>();
CHECK_NULL_VOID(theme);
@ -691,8 +703,6 @@ void MenuItemPattern::OnTouch(const TouchEventInfo& info)
CHECK_NULL_VOID(menu);
auto menuPattern = menu->GetPattern<MenuPattern>();
CHECK_NULL_VOID(menuPattern);
auto host = GetHost();
CHECK_NULL_VOID(host);
auto parent = AceType::DynamicCast<UINode>(host->GetParent());
auto menuWrapper = GetMenuWrapper();
auto menuWrapperPattern = menuWrapper ? menuWrapper->GetPattern<MenuWrapperPattern>() : nullptr;
@ -702,7 +712,7 @@ void MenuItemPattern::OnTouch(const TouchEventInfo& info)
&& menuWrapperPattern && menuWrapperPattern->HasStackSubMenu() && !IsSubMenu());
if (!canChangeColor) return;
if (touchType == TouchType::DOWN) {
if (isPress) {
// change background color, update press status
SetBgBlendColor(GetSubBuilder() ? theme->GetHoverColor() : theme->GetClickedColor());
if (menuWrapperPattern) {
@ -710,12 +720,10 @@ void MenuItemPattern::OnTouch(const TouchEventInfo& info)
}
props->UpdatePress(true);
menuPattern->OnItemPressed(parent, index_, true);
} else if (touchType == TouchType::UP) {
} else {
SetBgBlendColor(isHovered_ ? theme->GetHoverColor() : Color::TRANSPARENT);
props->UpdatePress(false);
menuPattern->OnItemPressed(parent, index_, false);
} else {
return;
}
PlayBgColorAnimation(false);
host->MarkDirtyNode(PROPERTY_UPDATE_RENDER);

View File

@ -224,6 +224,7 @@ public:
}
RefPtr<FrameNode> FindTouchedEmbeddedMenuItem(const OffsetF& position);
void OnHover(bool isHover);
void NotifyPressStatus(bool isPress);
protected:
void RegisterOnKeyEvent();

View File

@ -153,9 +153,7 @@ void MenuWrapperPattern::ChangeCurMenuItemBgColor()
if (curMenuItemPattern->IsDisabled() || curMenuItemPattern->IsStackSubmenuHeader()) {
return;
}
curMenuItemPattern->SetBgBlendColor(
curMenuItemPattern->GetSubBuilder() ? theme->GetHoverColor() : theme->GetClickedColor());
curMenuItemPattern->PlayBgColorAnimation(false);
curMenuItemPattern->NotifyPressStatus(true);
}
void MenuWrapperPattern::ClearLastMenuItem()
@ -163,8 +161,7 @@ void MenuWrapperPattern::ClearLastMenuItem()
if (lastTouchItem_) {
auto lastMenuItemPattern = lastTouchItem_->GetPattern<MenuItemPattern>();
CHECK_NULL_VOID(lastMenuItemPattern);
lastMenuItemPattern->SetBgBlendColor(Color::TRANSPARENT);
lastMenuItemPattern->PlayBgColorAnimation(false);
lastMenuItemPattern->NotifyPressStatus(false);
lastTouchItem_ = nullptr;
}
}