Move drag event to InputDispatcher (1/n)
This CL adds the ability to send a DRAG event through the
InputChannel, and adds the appropriate processing logic to
InputPublisher and InputConsumer.
Bug: 158242495
Test: atest libinput_tests InputPublisherAndConsumerTest
Change-Id: I7aead341a9851facf654024c476bd6d7eaae4590
diff --git a/include/input/Input.h b/include/input/Input.h
index aa42db8..f9fe6b9 100644
--- a/include/input/Input.h
+++ b/include/input/Input.h
@@ -792,6 +792,30 @@
bool mPointerCaptureEnabled;
};
+/*
+ * Drag events.
+ */
+class DragEvent : public InputEvent {
+public:
+ virtual ~DragEvent() {}
+
+ virtual int32_t getType() const override { return AINPUT_EVENT_TYPE_DRAG; }
+
+ inline bool isExiting() const { return mIsExiting; }
+
+ inline float getX() const { return mX; }
+
+ inline float getY() const { return mY; }
+
+ void initialize(int32_t id, float x, float y, bool isExiting);
+
+ void initialize(const DragEvent& from);
+
+protected:
+ bool mIsExiting;
+ float mX, mY;
+};
+
/**
* Base class for verified events.
* Do not create a VerifiedInputEvent explicitly.
@@ -855,6 +879,7 @@
virtual MotionEvent* createMotionEvent() = 0;
virtual FocusEvent* createFocusEvent() = 0;
virtual CaptureEvent* createCaptureEvent() = 0;
+ virtual DragEvent* createDragEvent() = 0;
};
/*
@@ -870,12 +895,14 @@
virtual MotionEvent* createMotionEvent() override { return &mMotionEvent; }
virtual FocusEvent* createFocusEvent() override { return &mFocusEvent; }
virtual CaptureEvent* createCaptureEvent() override { return &mCaptureEvent; }
+ virtual DragEvent* createDragEvent() override { return &mDragEvent; }
private:
KeyEvent mKeyEvent;
MotionEvent mMotionEvent;
FocusEvent mFocusEvent;
CaptureEvent mCaptureEvent;
+ DragEvent mDragEvent;
};
/*
@@ -890,6 +917,7 @@
virtual MotionEvent* createMotionEvent() override;
virtual FocusEvent* createFocusEvent() override;
virtual CaptureEvent* createCaptureEvent() override;
+ virtual DragEvent* createDragEvent() override;
void recycle(InputEvent* event);
@@ -900,6 +928,7 @@
std::queue<std::unique_ptr<MotionEvent>> mMotionEventPool;
std::queue<std::unique_ptr<FocusEvent>> mFocusEventPool;
std::queue<std::unique_ptr<CaptureEvent>> mCaptureEventPool;
+ std::queue<std::unique_ptr<DragEvent>> mDragEventPool;
};
} // namespace android