[DEV] correction of resource error when remove

This commit is contained in:
Edouard DUPIN 2014-01-22 21:20:39 +01:00
parent 8a48e529d4
commit c50abe2032
10 changed files with 48 additions and 17 deletions

View File

@ -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

2
external/egami vendored

@ -1 +1 @@
Subproject commit 2fe76f92055c61a11e84bafbecc4aa0488e0b16e
Subproject commit 9ed82e01ab2bf9147adcb0a238db764cea162214

2
external/ege vendored

@ -1 +1 @@
Subproject commit e23442beb1bec4fef48b9d7bb3aff8119a2909fd
Subproject commit 2b31c01fabad98b6cdfc842e9ff646f37534b9f0

View File

@ -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,8 +300,10 @@ vec2 ewol::compositing::Image::getRealSize(void) {
if (m_resource != NULL) {
return m_resource->getRealSize();
}
if (m_resourceDF != NULL) {
return m_resourceDF->getRealSize();
}
}

View File

@ -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) {

View File

@ -18,6 +18,7 @@ static const char* statusDescriptionString[ewol::key::statusCount+1] = {
"statusQuad",
"statusQuinte",
"statusUp",
"statusUpAfter",
"statusEnter",
"statusLeave",
"statusAbort",

View File

@ -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)

View File

@ -9,6 +9,7 @@
#include <ewol/object/Manager.h>
#include <ewol/context/Context.h>
#include <ewol/ewol.h>
#include <unistd.h>
#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; iii<m_eObjectList.size(); iii++) {
if (m_eObjectList[iii] != NULL) {
//EWOL_DEBUG("inform " << iii << "/" << m_eObjectList.size());
//EWOL_DEBUG(" named '" << m_eObjectList[iii]->getName() << "' 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; iii<m_eObjectAutoRemoveList.size(); iii++) {
if( m_eObjectAutoRemoveList[iii] != NULL
&& m_eObjectAutoRemoveList[iii] != _object) {
//EWOL_DEBUG("inform2 " << iii << "/" << m_eObjectList.size());
//EWOL_DEBUG("inform2 " << iii+1 << "/" << m_eObjectAutoRemoveList.size());
m_eObjectAutoRemoveList[iii]->onObjectRemove(_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() << "\"");
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(0<m_eObjectAutoRemoveList.size()) {
if (m_eObjectAutoRemoveList[0] != NULL) {
EWOL_DEBUG("Real Auto-Remove Object type=\"" << m_eObjectAutoRemoveList[0]->getObjectType() << "\"");
EWOL_DEBUG("Real Auto-Remove Object [" << m_eObjectAutoRemoveList[0]->getId() << "]type='" << m_eObjectAutoRemoveList[0]->getObjectType() << "'");
delete(m_eObjectAutoRemoveList[0]);
m_eObjectAutoRemoveList[0] = NULL;
} else {

View File

@ -447,7 +447,6 @@ namespace ewol {
virtual void setMouseLimit(int32_t _numberState) {
m_limitMouseEvent = _numberState;
};
// ----------------------------------------------------------------------------------------------------------------
// -- keyboard event properties Area
// ----------------------------------------------------------------------------------------------------------------

View File

@ -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");