diff --git a/frameworks/bridge/declarative_frontend/engine/functions/js_gesture_function.cpp b/frameworks/bridge/declarative_frontend/engine/functions/js_gesture_function.cpp index 4e6b827827cbdc0cbac71809b1deb7bfd7144c70..b1621a64525d516e3e3fcbd606751776efe8f95d 100644 --- a/frameworks/bridge/declarative_frontend/engine/functions/js_gesture_function.cpp +++ b/frameworks/bridge/declarative_frontend/engine/functions/js_gesture_function.cpp @@ -138,6 +138,7 @@ JSRef JsGestureFunction::CreateFingerInfo(const FingerInfo& fingerInfo const OHOS::Ace::Offset& globalLocation = fingerInfo.globalLocation_; const OHOS::Ace::Offset& localLocation = fingerInfo.localLocation_; const OHOS::Ace::Offset& screenLocation = fingerInfo.screenLocation_; + const OHOS::Ace::Offset& globalDisplayLocation = fingerInfo.globalDisplayLocation_; fingerInfoObj->SetProperty("id", fingerInfo.fingerId_); fingerInfoObj->SetProperty("hand", fingerInfo.operatingHand_); fingerInfoObj->SetProperty("globalX", PipelineBase::Px2VpWithCurrentDensity(globalLocation.GetX())); @@ -146,6 +147,8 @@ JSRef JsGestureFunction::CreateFingerInfo(const FingerInfo& fingerInfo fingerInfoObj->SetProperty("localY", PipelineBase::Px2VpWithCurrentDensity(localLocation.GetY())); fingerInfoObj->SetProperty("displayX", PipelineBase::Px2VpWithCurrentDensity(screenLocation.GetX())); fingerInfoObj->SetProperty("displayY", PipelineBase::Px2VpWithCurrentDensity(screenLocation.GetY())); + fingerInfoObj->SetProperty("globalDisplayX", PipelineBase::Px2VpWithCurrentDensity(globalDisplayLocation.GetX())); + fingerInfoObj->SetProperty("globalDisplayY", PipelineBase::Px2VpWithCurrentDensity(globalDisplayLocation.GetY())); return fingerInfoObj; } diff --git a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.cpp b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.cpp index ad8c55770be61e3f53531c5c3d56082b52851709..a51cde78c69fc25c7ad631dff935aab5858a268d 100644 --- a/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.cpp +++ b/frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.cpp @@ -7378,7 +7378,9 @@ Local CommonBridge::CreateTapGestureInfo(EcmaVM* vm, GestureEv const OHOS::Ace::Offset& localLocation = fingerInfo.localLocation_; const OHOS::Ace::Offset& globalLocation = fingerInfo.globalLocation_; const OHOS::Ace::Offset& screenLocation = fingerInfo.screenLocation_; - const char* keys[] = { "x", "y", "windowX", "windowY", "displayX", "displayY"}; + const OHOS::Ace::Offset& globalDisplayLocation = fingerInfo.globalDisplayLocation_; + const char* keys[] = { "x", "y", "windowX", "windowY", "displayX", "displayY", + "globalDisplayX", "globalDisplayY"}; Local values[] = { panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(localLocation.GetX())), panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(localLocation.GetY())), @@ -7386,6 +7388,8 @@ Local CommonBridge::CreateTapGestureInfo(EcmaVM* vm, GestureEv panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(globalLocation.GetY())), panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(screenLocation.GetX())), panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(screenLocation.GetY())), + panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(globalDisplayLocation.GetX())), + panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(globalDisplayLocation.GetY())), }; return panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values); } @@ -7469,8 +7473,10 @@ Local CommonBridge::CreateFingerInfo(EcmaVM* vm, const FingerI const OHOS::Ace::Offset& globalLocation = fingerInfo.globalLocation_; const OHOS::Ace::Offset& localLocation = fingerInfo.localLocation_; const OHOS::Ace::Offset& screenLocation = fingerInfo.screenLocation_; + const OHOS::Ace::Offset& globalDisplayLocation = fingerInfo.globalDisplayLocation_; double density = PipelineBase::GetCurrentDensity(); - const char* keys[] = { "id", "globalX", "globalY", "localX", "localY", "displayX", "displayY", "hand" }; + const char* keys[] = { "id", "globalX", "globalY", "localX", "localY", "displayX", "displayY", + "globalDisplayX", "globalDisplayY", "hand" }; Local values[] = { panda::NumberRef::New(vm, fingerInfo.fingerId_), panda::NumberRef::New(vm, globalLocation.GetX() / density), panda::NumberRef::New(vm, globalLocation.GetY() / density), @@ -7478,6 +7484,8 @@ Local CommonBridge::CreateFingerInfo(EcmaVM* vm, const FingerI panda::NumberRef::New(vm, localLocation.GetY() / density), panda::NumberRef::New(vm, screenLocation.GetX() / density), panda::NumberRef::New(vm, screenLocation.GetY() / density), + panda::NumberRef::New(vm, globalDisplayLocation.GetX() / density), + panda::NumberRef::New(vm, globalDisplayLocation.GetY() / density), panda::NumberRef::New(vm, fingerInfo.operatingHand_) }; return panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values); } @@ -9048,8 +9056,10 @@ Local CommonBridge::CreateTapGestureLocationInfo( const OHOS::Ace::Offset& localLocation = fingerInfo.localLocation_; const OHOS::Ace::Offset& globalLocation = fingerInfo.globalLocation_; const OHOS::Ace::Offset& screenLocation = fingerInfo.screenLocation_; + const OHOS::Ace::Offset& globalDisplayLocation = fingerInfo.globalDisplayLocation_; double density = PipelineBase::GetCurrentDensity(); - const char* keys[] = { "x", "y", "windowX", "windowY", "displayX", "displayY"}; + const char* keys[] = { "x", "y", "windowX", "windowY", "displayX", "displayY", + "globalDisplayX", "globalDisplayY"}; density = density != 0 ? density : 1; Local values[] = { panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(localLocation.GetX())), @@ -9058,6 +9068,8 @@ Local CommonBridge::CreateTapGestureLocationInfo( panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(globalLocation.GetY())), panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(screenLocation.GetX())), panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(screenLocation.GetY())), + panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(globalDisplayLocation.GetX())), + panda::NumberRef::New(vm, PipelineBase::Px2VpWithCurrentDensity(globalDisplayLocation.GetY())), }; return panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values); } diff --git a/frameworks/core/components_ng/gestures/recognizers/multi_fingers_recognizer.cpp b/frameworks/core/components_ng/gestures/recognizers/multi_fingers_recognizer.cpp index 56b5ea4178ca0785a7ca05ef55013ba1e556a32b..3afc8c615eea8fe4a605555827fce8d8c868df45 100644 --- a/frameworks/core/components_ng/gestures/recognizers/multi_fingers_recognizer.cpp +++ b/frameworks/core/components_ng/gestures/recognizers/multi_fingers_recognizer.cpp @@ -73,7 +73,7 @@ void MultiFingersRecognizer::UpdateFingerListInfo() localPoint, GetAttachedNode(), false, isPostEventResult_, point.second.postEventNodeId); FingerInfo fingerInfo = { point.second.GetOriginalReCovertId(), point.second.operatingHand, point.second.GetOffset(), Offset(localPoint.GetX(), localPoint.GetY()), - point.second.GetScreenOffset(), point.second.sourceType, point.second.sourceTool }; + point.second.GetScreenOffset(), point.second.GetGlobalDisplayOffset(), point.second.sourceType, point.second.sourceTool }; fingerList_.emplace_back(fingerInfo); if (maxTimeStamp <= point.second.GetTimeStamp().time_since_epoch().count() && point.second.pointers.size() >= touchPoints_.size()) { diff --git a/frameworks/core/gestures/gesture_info.h b/frameworks/core/gestures/gesture_info.h index 57529981eb10c68d59b9f2eb4bc422aec65a35c9..982c51dc7caa4eb32445b2e6c553127b857c137b 100644 --- a/frameworks/core/gestures/gesture_info.h +++ b/frameworks/core/gestures/gesture_info.h @@ -274,6 +274,7 @@ struct FingerInfo { //screen position at which the touch point contacts the screen. Offset screenLocation_; + Offset globalDisplayLocation_; SourceType sourceType_ = SourceType::NONE; SourceTool sourceTool_ = SourceTool::UNKNOWN; }; diff --git a/frameworks/core/gestures/multi_fingers_recognizer.cpp b/frameworks/core/gestures/multi_fingers_recognizer.cpp index 61b04afd8e522e73e3b646ed45851d988ad8cb0c..51bcbc35c6a1d1fcc3d7cb3668190c720b00159f 100644 --- a/frameworks/core/gestures/multi_fingers_recognizer.cpp +++ b/frameworks/core/gestures/multi_fingers_recognizer.cpp @@ -78,7 +78,7 @@ void MultiFingersRecognizer::SetFingerList(const std::map t for (auto& point : touchPoints) { Offset localLocation = point.second.GetOffset() - coordinateOffset; FingerInfo fingerInfo = { point.first, point.second.operatingHand, point.second.GetOffset(), - localLocation, {} }; + localLocation, {}, point.second.getGlobalDisplayOffset() }; fingerList.emplace_back(fingerInfo); } }