diff --git a/frameworks/core/components_ng/base/view_abstract_model_ng.cpp b/frameworks/core/components_ng/base/view_abstract_model_ng.cpp index 9e766d92fe717571dcb3afe31924ddc0bbe5fd77..19e47165925268d09b068c56cb5f7d93b39aca8c 100644 --- a/frameworks/core/components_ng/base/view_abstract_model_ng.cpp +++ b/frameworks/core/components_ng/base/view_abstract_model_ng.cpp @@ -355,6 +355,10 @@ void ViewAbstractModelNG::BindDragWithContextMenuParams(const NG::MenuParam& men gestureHub->SetPreviewMode(menuParam.previewMode); gestureHub->SetContextMenuShowStatus(menuParam.isShow); gestureHub->SetMenuBindingType(menuParam.menuBindType); + auto menuPreviewScale = menuParam.previewAnimationOptions.scaleTo; + // set menu preview scale to drag. + gestureHub->SetMenuPreviewScale( + LessOrEqual(menuPreviewScale, 0.0) ? DEFALUT_DRAG_PPIXELMAP_SCALE : menuPreviewScale); } else { TAG_LOGW(AceLogTag::ACE_DRAG, "Can not get gestureEventHub!"); } diff --git a/frameworks/core/components_ng/event/gesture_event_hub.cpp b/frameworks/core/components_ng/event/gesture_event_hub.cpp index 3c4c757837d6e346c65fc6da7d2815a6ba3c5847..f40936ccf9d9b1ceb7d350b11c5d0beef982f477 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.cpp +++ b/frameworks/core/components_ng/event/gesture_event_hub.cpp @@ -647,7 +647,9 @@ RefPtr GestureEventHub::GetPreScaledPixelMapIfExist(float targetScale, TAG_LOGW(AceLogTag::ACE_DRAG, "duplicate PixelMap failed!"); preScaledPixelMap = defaultPixelMap; } - preScaledPixelMap->Scale(targetScale, targetScale, AceAntiAliasingOption::HIGH); + if (!NearEqual(targetScale, 1.0f)) { + preScaledPixelMap->Scale(targetScale, targetScale, AceAntiAliasingOption::HIGH); + } #endif return preScaledPixelMap; } @@ -945,10 +947,6 @@ void GestureEventHub::OnDragStart(const GestureEvent& info, const RefPtrSetIsMouseDrag(info.GetInputEventType() == InputEventType::MOUSE_BUTTON); - float defaultPixelMapScale = - info.GetInputEventType() == InputEventType::MOUSE_BUTTON ? 1.0f : DEFALUT_DRAG_PPIXELMAP_SCALE; - auto windowScale = dragDropManager->GetWindowScale(); - float scale = windowScale * defaultPixelMapScale; auto dragNodePipeline = frameNode->GetContextRefPtr(); CHECK_NULL_VOID(dragNodePipeline); auto overlayManager = dragNodePipeline->GetOverlayManager(); @@ -971,6 +969,14 @@ void GestureEventHub::OnDragStart(const GestureEvent& info, const RefPtrSetIsDragWithContextMenu(false); } + float defaultPixelMapScale = + info.GetInputEventType() == InputEventType::MOUSE_BUTTON ? 1.0f : DEFALUT_DRAG_PPIXELMAP_SCALE; + // use menuPreviewScale only for 1.0f menu scale. + if (isMenuShow && NearEqual(menuPreviewScale_, 1.0f)) { + defaultPixelMapScale = menuPreviewScale_; + } + auto windowScale = dragDropManager->GetWindowScale(); + float scale = windowScale * defaultPixelMapScale; auto focusHub = frameNode->GetFocusHub(); bool hasContextMenu = focusHub == nullptr ? false : focusHub->FindContextMenuOnKeyEvent(OnKeyEventType::CONTEXT_MENU); diff --git a/frameworks/core/components_ng/event/gesture_event_hub.h b/frameworks/core/components_ng/event/gesture_event_hub.h index bc5897afea1d50abb55c3690bcb0268d7860a277..662677e68338c974229b3dc630cc5bda810ce797 100644 --- a/frameworks/core/components_ng/event/gesture_event_hub.h +++ b/frameworks/core/components_ng/event/gesture_event_hub.h @@ -708,6 +708,16 @@ public: #endif static bool IsAllowedDrag(const RefPtr& frameNode); + void SetMenuPreviewScale(float menuPreviewScale) + { + menuPreviewScale_ = menuPreviewScale; + } + + float GetMenuPreviewScale() const + { + return menuPreviewScale_; + } + private: void ProcessTouchTestHierarchy(const OffsetF& coordinateOffset, const TouchRestrict& touchRestrict, std::list>& innerRecognizers, TouchTestResult& finalResult, int32_t touchId, @@ -804,6 +814,7 @@ private: bool textDraggable_ = false; bool isTextDraggable_ = false; bool monopolizeEvents_ = false; + float menuPreviewScale_ = DEFALUT_DRAG_PPIXELMAP_SCALE; }; } // namespace OHOS::Ace::NG diff --git a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp index 9ea6c41d7b8188a91d630478d160727a4cad2aae..e131abab3fd211bbbb6130f92fc1abb75267c658 100644 --- a/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp +++ b/frameworks/core/components_ng/manager/drag_drop/drag_drop_manager.cpp @@ -1565,6 +1565,11 @@ bool DragDropManager::GetDragPreviewInfo(const RefPtr& overlayMa if (!isMouseDragged_ && dragPreviewInfo.scale == 1.0f) { dragPreviewInfo.scale = TOUCH_DRAG_PIXELMAP_SCALE; } + auto menuPreviewScale = gestureHub->GetMenuPreviewScale(); + // use menuPreviewScale only for 1.0f menu scale. + if (isDragWithContextMenu_ && NearEqual(menuPreviewScale, 1.0f)) { + dragPreviewInfo.scale = menuPreviewScale; + } dragPreviewInfo.height = imageNode->GetGeometryNode()->GetFrameRect().Height(); dragPreviewInfo.width = static_cast(width); dragPreviewInfo.maxWidth = maxWidth;