From d2d8b6fca1f06ca5e0ceed1d94117b01c823d35e Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Mon, 3 Jun 2013 22:35:05 +0200 Subject: [PATCH] [DEV] add sprite correct diaplsy and input maximum number segfault error --- sources/ewol/compositing/Sprite.cpp | 13 ++++++++++++- sources/ewol/renderer/os/eSystemInput.cpp | 9 +++++++++ sources/ewol/renderer/os/eSystemInput.h | 2 +- sources/ewol/renderer/resources/Image.cpp | 4 +++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/sources/ewol/compositing/Sprite.cpp b/sources/ewol/compositing/Sprite.cpp index 1853a6e3..e93c9810 100644 --- a/sources/ewol/compositing/Sprite.cpp +++ b/sources/ewol/compositing/Sprite.cpp @@ -20,16 +20,27 @@ ewol::Sprite::Sprite(const etk::UString& _imageName, const ivec2& _nbSprite) : m_nbSprite(_nbSprite), m_unitarySpriteSize(0,0) { + /* vec2 imageSize = GetRealSize(); m_unitarySpriteSize.setValue(imageSize.x()/(float)m_nbSprite.x(), imageSize.y()/(float)m_nbSprite.y()); + */ + m_unitarySpriteSize.setValue(1.0/(float)m_nbSprite.x(), + 1.0/(float)m_nbSprite.y()); } void ewol::Sprite::PrintSprite(const ivec2& _spriteID, const vec2& _size) { - + if( _spriteID.x()<0 + || _spriteID.y()<0 + || _spriteID.x()>=m_nbSprite.x() + || _spriteID.y()>=m_nbSprite.y()) { + return; + } + PrintPart(_size, vec2((float)(_spriteID.x() )*m_unitarySpriteSize.x(), (float)(_spriteID.y() )*m_unitarySpriteSize.y()), + vec2((float)(_spriteID.x()+1)*m_unitarySpriteSize.x(), (float)(_spriteID.y()+1)*m_unitarySpriteSize.y())); } diff --git a/sources/ewol/renderer/os/eSystemInput.cpp b/sources/ewol/renderer/os/eSystemInput.cpp index 26d6d7ea..11e570aa 100644 --- a/sources/ewol/renderer/os/eSystemInput.cpp +++ b/sources/ewol/renderer/os/eSystemInput.cpp @@ -217,6 +217,10 @@ int32_t ewol::eSystemInput::localGetDestinationId(ewol::keyEvent::type_te type, // note if id<0 ==> the it was finger event ... void ewol::eSystemInput::Motion(ewol::keyEvent::type_te type, int pointerID, vec2 pos) { + if (MAX_MANAGE_INPUT<=pointerID) { + // reject pointer ==> out of IDs... + return; + } InputPoperty_ts *eventTable = NULL; if (type == ewol::keyEvent::typeMouse) { eventTable = m_eventMouseSaved; @@ -306,6 +310,11 @@ void ewol::eSystemInput::Motion(ewol::keyEvent::type_te type, int pointerID, vec void ewol::eSystemInput::State(ewol::keyEvent::type_te type, int pointerID, bool isDown, vec2 pos) { + if (MAX_MANAGE_INPUT<=pointerID) { + // reject pointer ==> out of IDs... + return; + } + EWOL_DEBUG("event pointerId=" << pointerID); // convert position in Open-GL coordonates ... InputPoperty_ts *eventTable = NULL; inputLimit_ts localLimit; diff --git a/sources/ewol/renderer/os/eSystemInput.h b/sources/ewol/renderer/os/eSystemInput.h index 94e3ea95..1a6e24ce 100644 --- a/sources/ewol/renderer/os/eSystemInput.h +++ b/sources/ewol/renderer/os/eSystemInput.h @@ -44,7 +44,7 @@ namespace ewol inputLimit_ts m_eventInputLimit; inputLimit_ts m_eventMouseLimit; void CalculateLimit(void); - #define MAX_MANAGE_INPUT (10) + #define MAX_MANAGE_INPUT (15) InputPoperty_ts m_eventInputSaved[MAX_MANAGE_INPUT]; InputPoperty_ts m_eventMouseSaved[MAX_MANAGE_INPUT]; void AbortElement(InputPoperty_ts *eventTable, int32_t idInput, ewol::keyEvent::type_te _type); diff --git a/sources/ewol/renderer/resources/Image.cpp b/sources/ewol/renderer/resources/Image.cpp index cd8c57ab..3bc7e9b1 100644 --- a/sources/ewol/renderer/resources/Image.cpp +++ b/sources/ewol/renderer/resources/Image.cpp @@ -38,13 +38,15 @@ ewol::TextureFile::TextureFile(etk::UString genName, etk::UString tmpfileName, i if (false == m_element.IsLoadOk()) { EWOL_ERROR("Error To load SVG file " << tmpName ); } else { + /* if (size.x()>0 && size.y()>0) { // generate the texture m_element.GenerateAnImage(size, m_data); } else { + */ // generate the texture m_element.GenerateAnImage(m_data); - } + //} } } else if (true == tmpName.EndWith(".png") ) { // generate the texture