mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2025-02-17 09:13:19 +00:00
[NDK] fix node from GestureEvent
Signed-off-by:lisitaolisitao3@huawei.com Signed-off-by: lisitao <lisitao3@huawei.com> Change-Id: I16b50bd5d8d4da69818e50f227631837f9248091
This commit is contained in:
parent
da11411d34
commit
42a959cd4a
@ -2494,11 +2494,18 @@ struct ArkUITabsControllerModifier {
|
||||
|
||||
struct ArkUIGesture;
|
||||
|
||||
struct ArkUIGestureEvent {
|
||||
ArkUIAPIEventGestureAsyncEvent eventData;
|
||||
void* attachNode;
|
||||
};
|
||||
|
||||
struct ArkUIGestureInterruptInfo {
|
||||
bool isSystemGesture;
|
||||
ArkUI_Int32 systemRecognizerType;
|
||||
ArkUIAPIEventGestureAsyncEvent* event = nullptr;
|
||||
void* userData = nullptr;
|
||||
void* inputEvent = nullptr;
|
||||
void* gestureEvent = nullptr;
|
||||
};
|
||||
|
||||
struct ArkUIGestureModifier {
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include "core/components_ng/base/view_abstract.h"
|
||||
#include "core/components_ng/base/view_abstract_model_ng.h"
|
||||
#include "core/interfaces/arkoala/arkoala_api.h"
|
||||
#include "interfaces/native/event/ui_input_event_impl.h"
|
||||
#include "interfaces/native/ui_input_event.h"
|
||||
|
||||
namespace OHOS::Ace::NG {
|
||||
namespace {
|
||||
@ -400,19 +402,22 @@ void setGestureInterrupterToNode(
|
||||
ArkUINodeHandle node, ArkUI_Int32 (*interrupter)(ArkUIGestureInterruptInfo* interrupterInfo))
|
||||
{
|
||||
auto* frameNode = reinterpret_cast<FrameNode*>(node);
|
||||
auto onGestureJudgeBegin = [interrupter](
|
||||
const RefPtr<NG::GestureInfo>& gestureInfo,
|
||||
const std::shared_ptr<BaseGestureEvent>& info)-> GestureJudgeResult {
|
||||
ArkUIAPIEventGestureAsyncEvent* gestureEvent = new ArkUIAPIEventGestureAsyncEvent();
|
||||
auto onGestureJudgeBegin = [interrupter](const RefPtr<NG::GestureInfo>& gestureInfo,
|
||||
const std::shared_ptr<BaseGestureEvent>& info) -> GestureJudgeResult {
|
||||
ArkUIAPIEventGestureAsyncEvent gestureEvent;
|
||||
ArkUITouchEvent rawInputEvent;
|
||||
GetBaseGestureEvent(gestureEvent, rawInputEvent, info);
|
||||
GetBaseGestureEvent(&gestureEvent, rawInputEvent, info);
|
||||
ArkUIGestureInterruptInfo interruptInfo;
|
||||
interruptInfo.isSystemGesture = gestureInfo->IsSystemGesture();
|
||||
interruptInfo.systemRecognizerType = static_cast<ArkUI_Int32>(gestureInfo->GetType());
|
||||
interruptInfo.event = gestureEvent;
|
||||
interruptInfo.event = &gestureEvent;
|
||||
interruptInfo.userData = gestureInfo->GetUserData();
|
||||
ArkUI_UIInputEvent inputEvent { ARKUI_UIINPUTEVENT_TYPE_TOUCH, C_TOUCH_EVENT_ID,
|
||||
&rawInputEvent };
|
||||
ArkUIGestureEvent arkUIGestureEvent { gestureEvent, nullptr };
|
||||
interruptInfo.inputEvent = &inputEvent;
|
||||
interruptInfo.gestureEvent = &arkUIGestureEvent;
|
||||
auto result = interrupter(&interruptInfo);
|
||||
delete gestureEvent;
|
||||
return static_cast<GestureJudgeResult>(result);
|
||||
};
|
||||
ViewAbstract::SetOnGestureJudgeBegin(frameNode, std::move(onGestureJudgeBegin));
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "node_model.h"
|
||||
#include "gesture_impl.h"
|
||||
|
||||
#include "base/utils/utils.h"
|
||||
#include "core/gestures/gesture_event.h"
|
||||
#include "frameworks/core/interfaces/arkoala/arkoala_api.h"
|
||||
#include "interfaces/native/event/ui_input_event_impl.h"
|
||||
@ -160,10 +161,16 @@ ArkUI_GestureRecognizer* OH_ArkUI_GestureInterruptInfo_GetRecognizer(const ArkUI
|
||||
|
||||
ArkUI_GestureEvent* OH_ArkUI_GestureInterruptInfo_GetGestureEvent(const ArkUI_GestureInterruptInfo* event)
|
||||
{
|
||||
ArkUI_GestureEvent* gestureEvent = reinterpret_cast<ArkUI_GestureEvent *>(event->interruptData.event);
|
||||
ArkUI_UIInputEvent* uiEvent = new ArkUI_UIInputEvent{
|
||||
ARKUI_UIINPUTEVENT_TYPE_TOUCH, C_TOUCH_EVENT_ID, gestureEvent->eventData.rawPointerEvent };
|
||||
CHECK_NULL_RETURN(event, nullptr);
|
||||
ArkUI_GestureEvent* gestureEvent = reinterpret_cast<ArkUI_GestureEvent*>(event->interruptData.gestureEvent);
|
||||
CHECK_NULL_RETURN(gestureEvent, nullptr);
|
||||
|
||||
ArkUI_UIInputEvent* uiEvent = reinterpret_cast<ArkUI_UIInputEvent*>(event->interruptData.inputEvent);
|
||||
gestureEvent->eventData.rawPointerEvent = uiEvent;
|
||||
|
||||
auto* gestureRecognizer = reinterpret_cast<ArkUI_GestureRecognizer*>(event->interruptData.userData);
|
||||
CHECK_NULL_RETURN(gestureRecognizer, nullptr);
|
||||
gestureEvent->attachNode = gestureRecognizer->attachNode;
|
||||
return gestureEvent;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user