1 #ifndef DALI_INTERNAL_DRAG_AND_DROP_ECORE_WL2_H
2 #define DALI_INTERNAL_DRAG_AND_DROP_ECORE_WL2_H
5 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/internal/drag-and-drop/common/drag-and-drop-impl.h>
23 #include <dali/internal/system/linux/dali-ecore.h>
36 Dali::DragAndDrop::DragAndDropFunction callback;
41 struct DropWindowTarget
44 Dali::DragAndDrop::DragAndDropFunction callback;
50 * DragAndDrop Implementation
52 class DragAndDropEcoreWl : public Dali::Internal::Adaptor::DragAndDrop,
53 public Dali::ConnectionTracker
64 ~DragAndDropEcoreWl() override;
67 * @copydoc Dali::DragAndDrop::StartDragAndDrop()
69 bool StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const Dali::DragAndDrop::DragData& data, Dali::DragAndDrop::SourceFunction callback) override;
72 * @copydoc Dali::DragAndDrop::AddListener()
74 bool AddListener(Dali::Actor target, Dali::DragAndDrop::DragAndDropFunction callback) override;
77 * @copydoc Dali::DragAndDrop::AddListener()
79 bool AddListener(Dali::Window target, Dali::DragAndDrop::DragAndDropFunction callback) override;
82 * @copydoc Dali::DragAndDrop::RemoveListener()
84 bool RemoveListener(Dali::Actor target) override;
87 * @copydoc Dali::DragAndDrop::RemoveListener()
89 bool RemoveListener(Dali::Window target) override;
92 * @copydoc Dali::DragAndDrop::SendData()
94 void SendData(void* event) override;
97 * @copydoc Dali::DragAndDrop::ReceiveData()
99 void ReceiveData(void* event) override;
102 * @copydoc Dali::DragAndDrop::CalculateDragEvent()
104 bool CalculateDragEvent(void* event) override;
107 * @copydoc Dali::DragAndDrop::CalculateViewRegion()
109 bool CalculateViewRegion(void* event) override;
112 * @brief Call drag source events.
114 void CallSourceEvent(Dali::DragAndDrop::SourceEventType type);
117 * @brief Reset drop targets.
119 void ResetDropTargets();
123 * @brief Callback function to check whether listening target is scene on.
124 * Note that This signal will be called only if AddListener target is not scene on.
126 void DropTargetSceneOn(Dali::Actor target);
129 * @brief Recalculate cursor position by orientation.
131 * @param[in] x The x value of given position
132 * @param[in] y The y value of given position
133 * @param[in] window The window instance
134 * @return The recalculated position by orientation
136 Vector2 RecalculatePositionByOrientation(int x, int y, Dali::Window window);
139 DragAndDropEcoreWl(const DragAndDropEcoreWl&) = delete;
140 DragAndDropEcoreWl& operator=(DragAndDropEcoreWl&) = delete;
141 DragAndDropEcoreWl(DragAndDropEcoreWl&&) = delete;
142 DragAndDropEcoreWl& operator=(DragAndDropEcoreWl&&) = delete;
145 Dali::Window mDragWindow;
146 uint32_t mSerial{0u};
147 Ecore_Event_Handler* mSendHandler{nullptr};
148 Ecore_Event_Handler* mSourceEndHandler{nullptr};
149 Ecore_Event_Handler* mSourceDropHandler{nullptr};
150 Ecore_Event_Handler* mReceiveHandler{nullptr};
151 Ecore_Event_Handler* mMotionHandler{nullptr};
152 Ecore_Event_Handler* mDropHandler{nullptr};
153 Ecore_Event_Handler* mEnterHandler{nullptr};
154 Ecore_Event_Handler* mLeaveHandler{nullptr};
156 int mWindowTargetIndex{0};
157 std::string mMimeType;
160 Dali::Vector2 mPosition;
161 Dali::Vector2 mWindowPosition;
162 Dali::DragAndDrop::SourceFunction mSourceCallback{nullptr};
163 std::vector<DropTarget> mDropTargets;
164 std::vector<DropWindowTarget> mDropWindowTargets;
165 }; // class DragAndDropEcoreWl
167 } // namespace Adaptor
169 } // namespace Internal
173 #endif // DALI_INTERNAL_DRAG_AND_DROP_ECORE_WL2_H