From: Eunki Hong Date: Wed, 27 Apr 2022 03:05:46 +0000 (+0000) Subject: Merge "Calculate EncodedImageBuffer's hash in generate time" into devel/master X-Git-Tag: dali_2.1.20~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4e7ae430cd652ecbc7c19706eaebed4b9b725092;hp=c2e888e44e0f5d3d79259e0c5ae6f414066a089f;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git Merge "Calculate EncodedImageBuffer's hash in generate time" into devel/master --- diff --git a/dali/devel-api/adaptor-framework/drag-and-drop.cpp b/dali/devel-api/adaptor-framework/drag-and-drop.cpp index b8eeeb6..707f691 100644 --- a/dali/devel-api/adaptor-framework/drag-and-drop.cpp +++ b/dali/devel-api/adaptor-framework/drag-and-drop.cpp @@ -39,9 +39,9 @@ DragAndDrop DragAndDrop::Get() return Internal::Adaptor::GetDragAndDrop(); } -bool DragAndDrop::StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const DragData& dragData) +bool DragAndDrop::StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const DragData& dragData, Dali::DragAndDrop::SourceFunction callback) { - return GetImplementation(*this).StartDragAndDrop(source, shadow, dragData); + return GetImplementation(*this).StartDragAndDrop(source, shadowWindow, dragData, callback); } bool DragAndDrop::AddListener(Dali::Actor target, DragAndDropFunction callback) diff --git a/dali/devel-api/adaptor-framework/drag-and-drop.h b/dali/devel-api/adaptor-framework/drag-and-drop.h index 1337047..eb2dc89 100644 --- a/dali/devel-api/adaptor-framework/drag-and-drop.h +++ b/dali/devel-api/adaptor-framework/drag-and-drop.h @@ -19,6 +19,7 @@ */ // EXTERNAL INCLUDES +#include #include #include #include @@ -47,6 +48,17 @@ class DALI_ADAPTOR_API DragAndDrop : public BaseHandle { public: /** + * @brief Enumeration for the drag source event type in the source object + */ + enum class SourceEventType + { + START, ///< Drag and drop is started. + CANCEL, ///< Drag and drop is cancelled. + ACCEPT, ///< Drag and drop is accepted. + FINISH ///< Drag and drop is finished. + }; + + /** * @brief Enumeration for the drag event type in the target object */ enum class DragType @@ -143,6 +155,7 @@ public: }; using DragAndDropFunction = std::function; + using SourceFunction = std::function; /** * @brief Create an uninitialized DragAndDrop. @@ -174,11 +187,12 @@ public: * @brief Start the drag operation. * * @param[in] source The drag source object. - * @param[in] shadow The shadow object for drag object. + * @param[in] shadowWindow The shadow window for drag object. * @param[in] dragData The data to send to target object. + * @param[in] callback The drag source event callback. * @return bool true if the drag operation is started successfully. */ - bool StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const DragData& dragData); + bool StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const DragData& dragData, Dali::DragAndDrop::SourceFunction callback); /** * @brief Add the listener for receiving the drag and drop events. diff --git a/dali/devel-api/adaptor-framework/proxy-accessible.h b/dali/devel-api/adaptor-framework/proxy-accessible.h index e60c7e1..33e6b1b 100644 --- a/dali/devel-api/adaptor-framework/proxy-accessible.h +++ b/dali/devel-api/adaptor-framework/proxy-accessible.h @@ -24,6 +24,7 @@ // INTERNAL INCLUDES #include #include +#include namespace Dali::Accessibility { @@ -32,21 +33,25 @@ namespace Dali::Accessibility * * To be used as a proxy object, in those situations where you want to return an address in * a different bridge (embedding for example), but the object itself isn't planned to be used - * otherwise. This object has no parent, no children, an empty name and so on. + * otherwise. This object has a settable parent, no children, an empty name and so on. */ -class DALI_ADAPTOR_API ProxyAccessible : public virtual Accessible +class DALI_ADAPTOR_API ProxyAccessible : public virtual Accessible, public virtual Component { public: - ProxyAccessible() = default; - - ProxyAccessible(Address address) - : mAddress(std::move(address)) + ProxyAccessible() + : mAddress{}, + mParent{nullptr} { } void SetAddress(Address address) { - this->mAddress = std::move(address); + mAddress = std::move(address); + } + + void SetParent(Accessible* parent) + { + mParent = parent; } std::string GetName() const override @@ -61,7 +66,7 @@ public: Accessible* GetParent() override { - return nullptr; + return mParent; } size_t GetChildCount() const override @@ -104,6 +109,11 @@ public: return {}; } + bool IsProxy() const override + { + return true; + } + Address GetAddress() const override { return mAddress; @@ -124,8 +134,51 @@ public: return Dali::Actor{}; } + Rect<> GetExtents(CoordinateType type) const override + { + auto* parent = Component::DownCast(mParent); + + return parent ? parent->GetExtents(type) : Rect<>{}; + } + + ComponentLayer GetLayer() const override + { + return ComponentLayer::WINDOW; + } + + int16_t GetMdiZOrder() const override + { + return false; + } + + bool GrabFocus() override + { + return false; + } + + double GetAlpha() const override + { + return 0.0; + } + + bool GrabHighlight() override + { + return false; + } + + bool ClearHighlight() override + { + return false; + } + + bool IsScrollable() const override + { + return false; + } + private: - Address mAddress; + Address mAddress; + Accessible* mParent; }; } // namespace Dali::Accessibility diff --git a/dali/internal/drag-and-drop/common/drag-and-drop-impl.h b/dali/internal/drag-and-drop/common/drag-and-drop-impl.h index 1f274ea..0a8c679 100644 --- a/dali/internal/drag-and-drop/common/drag-and-drop-impl.h +++ b/dali/internal/drag-and-drop/common/drag-and-drop-impl.h @@ -50,7 +50,7 @@ public: /** * @copydoc Dali::DragAndDrop::StartDragAndDrop() */ - virtual bool StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const Dali::DragAndDrop::DragData& data) = 0; + virtual bool StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const Dali::DragAndDrop::DragData& data, Dali::DragAndDrop::SourceFunction callback) = 0; /** * @copydoc Dali::DragAndDrop::AddListener() diff --git a/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.cpp b/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.cpp index 8c82a56..18abea7 100644 --- a/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.cpp +++ b/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.cpp @@ -61,7 +61,7 @@ DragAndDropGeneric::~DragAndDropGeneric() { } -bool DragAndDropGeneric::StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const Dali::DragAndDrop::DragData& dragData) +bool DragAndDropGeneric::StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const Dali::DragAndDrop::DragData& dragData, Dali::DragAndDrop::SourceFunction callback) { return true; } diff --git a/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.h b/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.h index 5397a01..434f234 100644 --- a/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.h +++ b/dali/internal/drag-and-drop/generic/drag-and-drop-impl-generic.h @@ -49,7 +49,7 @@ public: /** * @copydoc Dali::DragAndDrop::StartDragAndDrop() */ - bool StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const Dali::DragAndDrop::DragData& data) override; + bool StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const Dali::DragAndDrop::DragData& data, Dali::DragAndDrop::SourceFunction callback) override; /** * @copydoc Dali::DragAndDrop::AddListener() diff --git a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp index dd020c0..1f81f63 100644 --- a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp +++ b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp @@ -51,6 +51,29 @@ static Eina_Bool EcoreEventDataSend(void* data, int type, void* event) return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool EcoreEventDataSourceEnd(void* data, int type, void* event) +{ + Ecore_Wl2_Event_Data_Source_End *ev = reinterpret_cast(event); + DragAndDropEcoreWl* dndImpl = reinterpret_cast(data); + if(ev->cancelled) + { + dndImpl->CallSourceEvent(Dali::DragAndDrop::SourceEventType::CANCEL); + } + else + { + dndImpl->CallSourceEvent(Dali::DragAndDrop::SourceEventType::ACCEPT); + } + + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool EcoreEventDataSourceDrop(void* data, int type, void* event) +{ + DragAndDropEcoreWl* dndImpl = reinterpret_cast(data); + dndImpl->CallSourceEvent(Dali::DragAndDrop::SourceEventType::FINISH); + return ECORE_CALLBACK_PASS_ON; +} + static Eina_Bool EcoreEventOfferDataReady(void* data, int type, void* event) { DragAndDropEcoreWl* dndImpl = reinterpret_cast(data); @@ -75,6 +98,16 @@ static Eina_Bool EcoreEventDataDrop(void* data, int type, void* event) return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool EcoreEventDataEnter(void* data, int type, void* event) +{ + Ecore_Wl2_Event_Dnd_Enter* ev = reinterpret_cast(event); + + // Set default offer is reject + ecore_wl2_offer_accept(ev->offer, NULL); + + return ECORE_CALLBACK_PASS_ON; +} + Dali::DragAndDrop GetDragAndDrop() { Dali::DragAndDrop dnd; @@ -104,21 +137,33 @@ Dali::DragAndDrop GetDragAndDrop() DragAndDropEcoreWl::DragAndDropEcoreWl() { - mSendHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND, EcoreEventDataSend, this); - mReceiveHandler = ecore_event_handler_add(ECORE_WL2_EVENT_OFFER_DATA_READY, EcoreEventOfferDataReady, this); - mMotionHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DND_MOTION, EcoreEventDataMotion, this); - mDropHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DND_DROP, EcoreEventDataDrop, this); + // Source Events + mSendHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_SEND, EcoreEventDataSend, this); + mSourceEndHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_END, EcoreEventDataSourceEnd, this); + mSourceDropHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DATA_SOURCE_DROP, EcoreEventDataSourceDrop, this); + + // Target Events + mReceiveHandler = ecore_event_handler_add(ECORE_WL2_EVENT_OFFER_DATA_READY, EcoreEventOfferDataReady, this); + mMotionHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DND_MOTION, EcoreEventDataMotion, this); + mDropHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DND_DROP, EcoreEventDataDrop, this); + mEnterHandler = ecore_event_handler_add(ECORE_WL2_EVENT_DND_ENTER, EcoreEventDataEnter, this); } DragAndDropEcoreWl::~DragAndDropEcoreWl() { + // Source Events ecore_event_handler_del(mSendHandler); + ecore_event_handler_del(mSourceEndHandler); + ecore_event_handler_del(mSourceDropHandler); + + // Target Events ecore_event_handler_del(mReceiveHandler); ecore_event_handler_del(mMotionHandler); ecore_event_handler_del(mDropHandler); + ecore_event_handler_del(mEnterHandler); } -bool DragAndDropEcoreWl::StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const Dali::DragAndDrop::DragData& data) +bool DragAndDropEcoreWl::StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const Dali::DragAndDrop::DragData& data, Dali::DragAndDrop::SourceFunction callback) { // Get Parent Window auto parent = Dali::DevelWindow::Get(source); @@ -127,16 +172,11 @@ bool DragAndDropEcoreWl::StartDragAndDrop(Dali::Actor source, Dali::Actor shadow mMimeType = data.GetMimeType(); mData = data.GetData(); - // Apply Shadow Property - shadow.SetProperty(Dali::Actor::Property::SIZE, Vector2(150, 150)); - shadow.SetProperty(Dali::Actor::Property::OPACITY, 0.9f); + // Set Source Event + mSourceCallback = callback; - // Create Drag Window - mDragWindow = Dali::Window::New(Dali::PositionSize(0, 0, 150, 150), "DragWindow", "class", true); - mDragWindow.SetTransparency(true); - mDragWindow.SetSize(Dali::Window::WindowSize(150, 150)); - mDragWindow.SetBackgroundColor(Color::TRANSPARENT); - mDragWindow.Add(shadow); + // Set Drag Window + mDragWindow = shadowWindow; // Start Drag and Drop Ecore_Wl2_Window* parentWindow = AnyCast(parent.GetNativeHandle()); @@ -158,6 +198,9 @@ bool DragAndDropEcoreWl::StartDragAndDrop(Dali::Actor source, Dali::Actor shadow // Start wayland drag and drop mSerial = ecore_wl2_dnd_drag_start(input, parentWindow, dragWindow); + // Call Start Event + CallSourceEvent(Dali::DragAndDrop::SourceEventType::START); + return true; } @@ -197,6 +240,14 @@ bool DragAndDropEcoreWl::RemoveListener(Dali::Actor target) return true; } +void DragAndDropEcoreWl::CallSourceEvent(Dali::DragAndDrop::SourceEventType type) +{ + if(mSourceCallback) + { + mSourceCallback(type); + } +} + void DragAndDropEcoreWl::SendData(void* event) { Ecore_Wl2_Event_Data_Source_Send* ev = reinterpret_cast(event); @@ -248,6 +299,7 @@ void DragAndDropEcoreWl::ReceiveData(void* event) Dali::DragAndDrop::DragEvent dragEvent(Dali::DragAndDrop::DragType::DROP, mPosition, ev->mimetype, ev->data); mDropTargets[mTargetIndex].callback(dragEvent); mDropTargets[mTargetIndex].inside = false; + ecore_wl2_offer_finish(ev->offer); } mTargetIndex = -1; } @@ -273,6 +325,8 @@ bool DragAndDropEcoreWl::CalculateDragEvent(void* event) dragEvent.SetAction(Dali::DragAndDrop::DragType::ENTER); dragEvent.SetPosition(curPosition); mDropTargets[i].callback(dragEvent); + // Accept Offer + ecore_wl2_offer_mimes_set(ev->offer, ecore_wl2_offer_mimes_get(ev->offer)); } else if(!currentInside && mDropTargets[i].inside) { @@ -281,6 +335,8 @@ bool DragAndDropEcoreWl::CalculateDragEvent(void* event) dragEvent.SetAction(Dali::DragAndDrop::DragType::LEAVE); dragEvent.SetPosition(curPosition); mDropTargets[i].callback(dragEvent); + // Reject Offer + ecore_wl2_offer_accept(ev->offer, NULL); } else if(currentInside && mDropTargets[i].inside) { @@ -315,7 +371,6 @@ bool DragAndDropEcoreWl::CalculateViewRegion(void* event) char* mimetype = (char*)eina_array_data_get(ecore_wl2_offer_mimes_get(ev->offer), 0); if(mimetype) { - ecore_wl2_offer_accept(ev->offer, mimetype); ecore_wl2_offer_receive(ev->offer, mimetype); Ecore_Wl2_Display* display = ecore_wl2_connected_display_get(NULL); Ecore_Wl2_Input* input = ecore_wl2_input_default_input_get(display); diff --git a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h index e039633..4727222 100644 --- a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h +++ b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h @@ -56,7 +56,7 @@ public: /** * @copydoc Dali::DragAndDrop::StartDragAndDrop() */ - bool StartDragAndDrop(Dali::Actor source, Dali::Actor shadow, const Dali::DragAndDrop::DragData& data) override; + bool StartDragAndDrop(Dali::Actor source, Dali::Window shadowWindow, const Dali::DragAndDrop::DragData& data, Dali::DragAndDrop::SourceFunction callback) override; /** * @copydoc Dali::DragAndDrop::AddListener() @@ -88,6 +88,11 @@ public: */ bool CalculateViewRegion(void* event) override; + /** + * @brief Call drag source events. + */ + void CallSourceEvent(Dali::DragAndDrop::SourceEventType type); + private: DragAndDropEcoreWl(const DragAndDropEcoreWl&) = delete; DragAndDropEcoreWl& operator=(DragAndDropEcoreWl&) = delete; @@ -95,17 +100,21 @@ private: DragAndDropEcoreWl& operator=(DragAndDropEcoreWl&&) = delete; private: - Dali::Window mDragWindow; - uint32_t mSerial{0u}; - Ecore_Event_Handler* mSendHandler{nullptr}; - Ecore_Event_Handler* mReceiveHandler{nullptr}; - Ecore_Event_Handler* mMotionHandler{nullptr}; - Ecore_Event_Handler* mDropHandler{nullptr}; - int mTargetIndex{0}; - std::string mMimeType; - std::string mData; - int mDataSize{0}; - Dali::Vector2 mPosition; + Dali::Window mDragWindow; + uint32_t mSerial{0u}; + Ecore_Event_Handler* mSendHandler{nullptr}; + Ecore_Event_Handler* mSourceEndHandler{nullptr}; + Ecore_Event_Handler* mSourceDropHandler{nullptr}; + Ecore_Event_Handler* mReceiveHandler{nullptr}; + Ecore_Event_Handler* mMotionHandler{nullptr}; + Ecore_Event_Handler* mDropHandler{nullptr}; + Ecore_Event_Handler* mEnterHandler{nullptr}; + int mTargetIndex{0}; + std::string mMimeType; + std::string mData; + int mDataSize{0}; + Dali::Vector2 mPosition; + Dali::DragAndDrop::SourceFunction mSourceCallback{nullptr}; std::vector mDropTargets; }; // class DragAndDropEcoreWl diff --git a/dali/internal/graphics/gles/gl-implementation.h b/dali/internal/graphics/gles/gl-implementation.h index e60fb8f..b7551a4 100644 --- a/dali/internal/graphics/gles/gl-implementation.h +++ b/dali/internal/graphics/gles/gl-implementation.h @@ -49,9 +49,11 @@ static constexpr const char* KHR_BLEND_EQUATION_ADVANCED = "GL_ static constexpr const char* DEFAULT_SAMPLER_TYPE = "sampler2D"; static constexpr const char* FRAGMENT_SHADER_ADVANCED_BLEND_EQUATION_PREFIX = + "#ifdef GL_KHR_blend_equation_advanced\n" "#extension GL_KHR_blend_equation_advanced : enable\n" + "#endif\n" - "#if GL_KHR_blend_equation_advanced==1 || __VERSION__>=320\n" + "#if defined(GL_KHR_blend_equation_advanced) || __VERSION__>=320\n" " layout(blend_support_all_equations) out;\n" "#endif\n";