diff --git a/data/texturedDF.frag b/data/texturedDF.frag index d41f072d..36921d3f 100644 --- a/data/texturedDF.frag +++ b/data/texturedDF.frag @@ -12,10 +12,16 @@ uniform int EW_SoftEdge; varying vec2 f_texcoord; varying vec4 f_color; + void main(void) { vec4 color = texture2D(EW_texID, f_texcoord ); float dist = color.r; + #ifndef GL_ES float width = fwidth(dist); + #else + // float width = abs(dFdx(dist)) + abs(dFdy(dist)) + float width = dist; + #endif float alpha = smoothstep(0.5-width, 0.5+width, dist); // Smooth diff --git a/external/egami b/external/egami index 2fe76f92..9ed82e01 160000 --- a/external/egami +++ b/external/egami @@ -1 +1 @@ -Subproject commit 2fe76f92055c61a11e84bafbecc4aa0488e0b16e +Subproject commit 9ed82e01ab2bf9147adcb0a238db764cea162214 diff --git a/external/ege b/external/ege index e23442be..2b31c01f 160000 --- a/external/ege +++ b/external/ege @@ -1 +1 @@ -Subproject commit e23442beb1bec4fef48b9d7bb3aff8119a2909fd +Subproject commit 2b31c01fabad98b6cdfc842e9ff646f37534b9f0 diff --git a/sources/ewol/compositing/Image.cpp b/sources/ewol/compositing/Image.cpp index 51e149be..0569261e 100644 --- a/sources/ewol/compositing/Image.cpp +++ b/sources/ewol/compositing/Image.cpp @@ -265,7 +265,7 @@ void ewol::compositing::Image::setSource(const std::string& _newFile, const vec2 EWOL_ERROR("Can not get Image resource"); } } else { - m_resourceDF = ewol::resource::ImageDF::keep(_newFile, tmpSize); + m_resourceDF = ewol::resource::ImageDF::keep(m_filename, tmpSize); if (NULL == m_resourceDF) { EWOL_ERROR("Can not get Image resource DF"); } @@ -300,7 +300,9 @@ vec2 ewol::compositing::Image::getRealSize(void) { if (m_resource != NULL) { return m_resource->getRealSize(); } - return m_resourceDF->getRealSize(); + if (m_resourceDF != NULL) { + return m_resourceDF->getRealSize(); + } } diff --git a/sources/ewol/context/InputManager.cpp b/sources/ewol/context/InputManager.cpp index 8cbe44b0..16bcd1f8 100644 --- a/sources/ewol/context/InputManager.cpp +++ b/sources/ewol/context/InputManager.cpp @@ -440,6 +440,12 @@ void ewol::context::InputManager::state(enum ewol::key::type _type, << " == >" << eventTable[_pointerID].destinationInputId << " [UP] " << _pos); eventTable[_pointerID].posEvent = _pos; + // send up event after the single event to prevent multiple widget getting elements + localEventInput(_type, + eventTable[_pointerID].curentWidgetEvent, + _pointerID, + ewol::key::statusUp, + _pos); // generate event (single) if( abs(eventTable[_pointerID].downStart.x() - _pos.x()) < localLimit.DpiOffset && abs(eventTable[_pointerID].downStart.y() - _pos.y()) < localLimit.DpiOffset ){ @@ -480,7 +486,7 @@ void ewol::context::InputManager::state(enum ewol::key::type _type, localEventInput(_type, eventTable[_pointerID].curentWidgetEvent, _pointerID, - ewol::key::statusUp, + ewol::key::statusUpAfter, _pos); // specific for tuch event if (_type == ewol::key::typeFinger) { diff --git a/sources/ewol/key/status.cpp b/sources/ewol/key/status.cpp index 3c9e251d..46c37931 100644 --- a/sources/ewol/key/status.cpp +++ b/sources/ewol/key/status.cpp @@ -18,6 +18,7 @@ static const char* statusDescriptionString[ewol::key::statusCount+1] = { "statusQuad", "statusQuinte", "statusUp", + "statusUpAfter", "statusEnter", "statusLeave", "statusAbort", diff --git a/sources/ewol/key/status.h b/sources/ewol/key/status.h index 32b767e0..5d076ac3 100644 --- a/sources/ewol/key/status.h +++ b/sources/ewol/key/status.h @@ -27,6 +27,7 @@ namespace ewol { statusQuad, statusQuinte, statusUp, // availlable on Keyboard too + statusUpAfter, // mouse input & finger input this appear after the single event (depending on some case...) statusEnter, statusLeave, statusAbort, // Appeare when an event is tranfert betwwen widgets (the widget which receive this has lost the events) diff --git a/sources/ewol/object/Manager.cpp b/sources/ewol/object/Manager.cpp index 034d1b3a..db8a6b76 100644 --- a/sources/ewol/object/Manager.cpp +++ b/sources/ewol/object/Manager.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #undef __class__ #define __class__ "ewol::object::Manager" @@ -95,20 +96,33 @@ int32_t ewol::object::Manager::getNumberObject(void) { } void ewol::object::Manager::informOneObjectIsRemoved(ewol::Object* _object) { - for (size_t iii=0; iiigetName() << "' type=" << m_eObjectList[iii]->getObjectType()); + size_t mbElement = m_eObjectList.size(); + for (int64_t iii=0; iii<(int64_t)m_eObjectList.size(); ++iii) { + if ( m_eObjectList[iii] != NULL + && m_eObjectList[iii] != _object) { + //EWOL_DEBUG("inform " << iii+1 << "/" << m_eObjectList.size()); + //EWOL_DEBUG(" id=" << m_eObjectList[iii]->getId() << " named '" << m_eObjectList[iii]->getName() << "' type=" << m_eObjectList[iii]->getObjectType()); m_eObjectList[iii]->onObjectRemove(_object); + if (mbElement != m_eObjectList.size()) { + iii = -1; + mbElement = m_eObjectList.size(); + } } } + //EWOL_DEBUG("inform active done"); + mbElement = m_eObjectAutoRemoveList.size(); for (size_t iii=0; iiionObjectRemove(_object); + if (mbElement != m_eObjectAutoRemoveList.size()) { + iii = -1; + mbElement = m_eObjectAutoRemoveList.size(); + } } } + //EWOL_DEBUG("inform in-active done"); // call input event manager to remove linked widget ... ewol::getContext().onObjectRemove(_object); } @@ -148,8 +162,10 @@ void ewol::object::Manager::autoRemove(ewol::Object* _object) { // remove Element m_eObjectList[iii] = NULL; m_eObjectList.erase(m_eObjectList.begin()+iii); - EWOL_DEBUG("Auto-Remove Object : [" << _object->getId() << "] type=\"" << _object->getObjectType() << "\""); - informOneObjectIsRemoved(_object); + EWOL_DEBUG("Auto-Remove Object : [" << _object->getId() << "] type='" << _object->getObjectType() << "'"); + if (_object->getStatusResource() == false) { + informOneObjectIsRemoved(_object); + } m_eObjectAutoRemoveList.push_back(_object); ewol::getContext().forceRedrawAll(); EWOL_DEBUG("Auto-Remove Object ... done"); @@ -164,7 +180,7 @@ void ewol::object::Manager::removeAllAutoRemove(void) { //EWOL_DEBUG("Auto-Remove Object section : " << m_eObjectAutoRemoveList.size() << " elemeents"); while(0getObjectType() << "\""); + EWOL_DEBUG("Real Auto-Remove Object [" << m_eObjectAutoRemoveList[0]->getId() << "]type='" << m_eObjectAutoRemoveList[0]->getObjectType() << "'"); delete(m_eObjectAutoRemoveList[0]); m_eObjectAutoRemoveList[0] = NULL; } else { diff --git a/sources/ewol/widget/Widget.h b/sources/ewol/widget/Widget.h index 5d46ff72..de25c634 100644 --- a/sources/ewol/widget/Widget.h +++ b/sources/ewol/widget/Widget.h @@ -447,7 +447,6 @@ namespace ewol { virtual void setMouseLimit(int32_t _numberState) { m_limitMouseEvent = _numberState; }; - // ---------------------------------------------------------------------------------------------------------------- // -- keyboard event properties Area // ---------------------------------------------------------------------------------------------------------------- diff --git a/sources/ewol/widget/WidgetScrolled.cpp b/sources/ewol/widget/WidgetScrolled.cpp index 2b316036..4ed20835 100644 --- a/sources/ewol/widget/WidgetScrolled.cpp +++ b/sources/ewol/widget/WidgetScrolled.cpp @@ -274,7 +274,7 @@ bool ewol::widget::WidgetScrooled::onEventInput(const ewol::event::Input& _event int32_t idTable = _event.getId()-1; if (_event.getStatus() == ewol::key::statusDown) { m_fingerPresent[idTable] = true; - } else if (_event.getStatus() == ewol::key::statusUp) { + } else if (_event.getStatus() == ewol::key::statusUpAfter) { m_fingerPresent[idTable] = false; } if (m_fingerScoolActivated == false) { @@ -300,7 +300,7 @@ bool ewol::widget::WidgetScrooled::onEventInput(const ewol::event::Input& _event } if ( m_fingerPresent[0] == false && m_fingerPresent[1] == false) { - if (_event.getStatus() == ewol::key::statusUp) { + if (_event.getStatus() == ewol::key::statusUpAfter) { // TODO : Reset event ... m_fingerScoolActivated = false; _event.reset(); @@ -317,7 +317,7 @@ bool ewol::widget::WidgetScrooled::onEventInput(const ewol::event::Input& _event m_highSpeedStartPos.setValue(relativePos.x(), relativePos.y()); EWOL_DEBUG("SCROOL == > INIT"); return true; - } else if (_event.getStatus() == ewol::key::statusUp) { + } else if (_event.getStatus() == ewol::key::statusUpAfter) { m_highSpeedMode = ewol::widget::Scroll::speedModeDisable; m_highSpeedType = ewol::key::typeUnknow; EWOL_DEBUG("SCROOL == > DISABLE");