diff --git a/Sources/libewol/ewol/Widget.cpp b/Sources/libewol/ewol/Widget.cpp index 5efbd9ba..8f92ec74 100644 --- a/Sources/libewol/ewol/Widget.cpp +++ b/Sources/libewol/ewol/Widget.cpp @@ -133,9 +133,14 @@ bool ewol::Widget::CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY) } -bool ewol::Widget::GenEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::Widget::GenEventInput(int32_t IdInput, eventInputType_te typeEvent, coord2D_ts pos) { - return OnEventInput(IdInput, typeEvent, x-m_origin.x, y-m_origin.y); + eventPosition_ts eventPos; + eventPos.abs = pos; + eventPos.local.x = pos.x - m_origin.x; + eventPos.local.y = pos.y - m_origin.y; + //EWOL_DEBUG(" event on abs=(" << eventPos.abs.x << "," << eventPos.abs.y << ") local=(" << eventPos.local.x << "," << eventPos.local.y << ")"); + return OnEventInput(IdInput, typeEvent, eventPos); } bool ewol::Widget::GenEventInputExternal(const char * generateEventId, etkFloat_t x, etkFloat_t y) @@ -241,44 +246,26 @@ void ewol::Widget::SetCanHaveFocus(bool canFocusState) //#define TEST_CLIPPING_SIZE (3) #define TEST_CLIPPING_SIZE (0) -#ifdef __PLATFORM__Android -# define clipping_type GLfloat -# define clipping_function glClipPlanef -#else -# define clipping_type GLdouble -# define clipping_function glClipPlane -#endif bool ewol::Widget::GenDraw(void) { glPushMatrix(); -#if 1 - glTranslatef(m_origin.x,m_origin.y, 0); - //GLfloat - clipping_type eqn1[4] = { 0.0, 1.0, 0.0, -TEST_CLIPPING_SIZE}; // less the Y pos ... - clipping_type eqn2[4] = { 0.0, -1.0, 0.0, m_size.y-TEST_CLIPPING_SIZE}; // upper the y pos ... - clipping_type eqn3[4] = { 1.0, 0.0, 0.0, -TEST_CLIPPING_SIZE}; // less the x pos ... - clipping_type eqn4[4] = {-1.0, 0.0, 0.0, m_size.x-TEST_CLIPPING_SIZE}; // upper the x pos ... - //EWOL_DEBUG("widget size (" << m_size.x << "," << m_size.y << ")" ); - glEnable(GL_CLIP_PLANE0); - glEnable(GL_CLIP_PLANE1); - glEnable(GL_CLIP_PLANE2); - glEnable(GL_CLIP_PLANE3); - clipping_function(GL_CLIP_PLANE0, eqn1); - clipping_function(GL_CLIP_PLANE1, eqn2); - clipping_function(GL_CLIP_PLANE2, eqn3); - clipping_function(GL_CLIP_PLANE3, eqn4); -#else - glTranslatef(m_origin.x,m_origin.y, 0); - glEnable(GL_SCISSOR_TEST); - glScissor(TEST_CLIPPING_SIZE, TEST_CLIPPING_SIZE, m_size.x-TEST_CLIPPING_SIZE, m_size.y-TEST_CLIPPING_SIZE); -#endif + etkFloat_t testSizeX = m_size.x-TEST_CLIPPING_SIZE*2; + etkFloat_t testSizeY = m_size.y-TEST_CLIPPING_SIZE*2; + // here we invert the reference of the standard OpenGl view because the reference in the common display is Top left and not buttom left + glViewport( m_origin.x + TEST_CLIPPING_SIZE, + 600 - m_size.y - m_origin.y + TEST_CLIPPING_SIZE, + testSizeX, + testSizeY); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrthoEwol(-testSizeX/2, testSizeX/2, testSizeY/2, -testSizeY/2, -1, 1); + //glOrthoEwol(0., m_size.x, 0., -m_size.y, 1., 20.); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(-testSizeX/2, -testSizeY/2, -1.0); + bool valRet = OnDraw(); - /* - glDisable(GL_CLIP_PLANE3); - glDisable(GL_CLIP_PLANE2); - glDisable(GL_CLIP_PLANE1); - glDisable(GL_CLIP_PLANE0); - */ glPopMatrix(); return valRet; } diff --git a/Sources/libewol/ewol/Widget.h b/Sources/libewol/ewol/Widget.h index 3965fa56..7b9b63b0 100644 --- a/Sources/libewol/ewol/Widget.h +++ b/Sources/libewol/ewol/Widget.h @@ -93,13 +93,19 @@ namespace ewol { char* GetCharTypeMoveEvent(eventKbMoveType_te type); - extern "C" { - typedef struct { - const char * generateEventId; //!< event generate ID (to be unique it was pointer on the string name) - int32_t widgetCall; //!< unique ID of the widget - const char * generateEventIdExtern; //!< External generated event ID (to be unique it was pointer on the string name) - } eventExtern_ts; - }; + + typedef struct { + const char * generateEventId; //!< event generate ID (to be unique it was pointer on the string name) + int32_t widgetCall; //!< unique ID of the widget + const char * generateEventIdExtern; //!< External generated event ID (to be unique it was pointer on the string name) + } eventExtern_ts; + + typedef struct { + coord2D_ts abs; + coord2D_ts local; + } eventPosition_ts; + + class Widget { public: @@ -173,7 +179,7 @@ namespace ewol { etk::VectorType m_ListEventAvaillable; //!< List of all event availlable for this widget public: // external acces to set an input event on this widget. - bool GenEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t X, etkFloat_t Y); // call when input event arrive and call OnEventInput, if no event detected + bool GenEventInput(int32_t IdInput, eventInputType_te typeEvent, coord2D_ts pos); // call when input event arrive and call OnEventInput, if no event detected bool GenEventInputExternal(const char * generateEventId, etkFloat_t x, etkFloat_t y); virtual bool GenEventShortCut(bool shift, bool control, bool alt, bool meta, uint32_t unicodeValue); protected: @@ -186,7 +192,7 @@ namespace ewol { // to link an extern widget at the internal event of this one it will access by here : bool ExternLinkOnEvent(const char * eventName, int32_t widgetId, const char * eventExternId = NULL); protected: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t X, etkFloat_t Y) { return false; }; + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { return false; }; public: // when an event arrive from an other widget, it will arrive here: // TODO : change name ... diff --git a/Sources/libewol/ewol/Windows.cpp b/Sources/libewol/ewol/Windows.cpp index db964ccc..bc99977e 100644 --- a/Sources/libewol/ewol/Windows.cpp +++ b/Sources/libewol/ewol/Windows.cpp @@ -104,12 +104,12 @@ bool ewol::Windows::CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY } -bool ewol::Windows::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::Windows::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { if (NULL != m_keyBoardwidget && false == m_keyBoardwidget->IsHide() ) { coord2D_ts tmpSize = m_keyBoardwidget->GetMinSize(); - if (y > m_size.y - tmpSize.y) { - m_keyBoardwidget->GenEventInput(IdInput, typeEvent, x, y); + if (pos.local.y > m_size.y - tmpSize.y) { + m_keyBoardwidget->GenEventInput(IdInput, typeEvent, pos.abs); return true; } } @@ -118,11 +118,11 @@ bool ewol::Windows::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, e if (NULL == m_popUpWidgetList[m_currentCreateId][m_popUpWidgetList[m_currentCreateId].Size()-1]) { m_popUpWidgetList[m_currentCreateId].PopBack(); } else { - m_popUpWidgetList[m_currentCreateId][m_popUpWidgetList[m_currentCreateId].Size()-1]->GenEventInput(IdInput, typeEvent, x, y); + m_popUpWidgetList[m_currentCreateId][m_popUpWidgetList[m_currentCreateId].Size()-1]->GenEventInput(IdInput, typeEvent, pos.abs); } // otherwise in the normal windows } else if (NULL != m_subWidget[m_currentCreateId]) { - m_subWidget[m_currentCreateId]->GenEventInput(IdInput, typeEvent, x, y); + m_subWidget[m_currentCreateId]->GenEventInput(IdInput, typeEvent, pos.abs); } return true; } @@ -133,20 +133,15 @@ void ewol::Windows::SysDraw(void) //EWOL_DEBUG("Drow on (" << m_size.x << "," << m_size.y << ")"); // set the size of the open GL system glViewport(0,0,m_size.x,m_size.y); - - // Clear the screen with transparency ... - glClearColor(0.750, 0.750, 0.750, 0.5); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +/* glMatrixMode(GL_PROJECTION); glLoadIdentity(); -//#if defined(__PLATFORM__Android) glOrthoEwol(-m_size.x/2, m_size.x/2, m_size.y/2, -m_size.y/2, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - glTranslatef(-m_size.x/2, -m_size.y/2, -1.0); -/* + #else glOrtho(0., m_size.x, 0., -m_size.y, 1., 20.); @@ -155,19 +150,8 @@ void ewol::Windows::SysDraw(void) glTranslatef(0, -m_size.y, -5); #endif */ - //http://www.khronos.org/opengles/documentation/opengles1_0/html/glBlendFunc.html - - //glEnable(GL_POLYGON_SMOOTH); - //glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - //glShadeModel(GL_POLYGON_SMOOTH); - //glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - - //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA); - //glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR); GenDraw(); @@ -193,6 +177,11 @@ void ewol::Windows::OnRegenerateDisplay(void) bool ewol::Windows::OnDraw(void) { + + // Clear the screen with transparency ... + glClearColor(0.750, 0.750, 0.750, 0.5); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + //EWOL_WARNING(" WINDOWS draw on " << m_currentDrawId); // first display the windows on the display if (NULL != m_subWidget[m_currentDrawId]) { diff --git a/Sources/libewol/ewol/Windows.h b/Sources/libewol/ewol/Windows.h index 0527fbd6..28b92127 100644 --- a/Sources/libewol/ewol/Windows.h +++ b/Sources/libewol/ewol/Windows.h @@ -52,7 +52,7 @@ namespace ewol { virtual void On(void) { }; public: virtual bool CalculateSize(etkFloat_t availlableX, etkFloat_t availlableY); - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual bool OnEventAreaExternal(int32_t widgetID, const char * generateEventId, const char * eventExternId, etkFloat_t x, etkFloat_t y); private: bool m_hasDecoration; diff --git a/Sources/libewol/ewol/base/gui.cpp b/Sources/libewol/ewol/base/gui.cpp index a85376ae..5799a6d8 100644 --- a/Sources/libewol/ewol/base/gui.cpp +++ b/Sources/libewol/ewol/base/gui.cpp @@ -152,7 +152,11 @@ void EWOL_NativeEventInputMotion(int pointerID, float x, float y ) if(0<=pointerID && pointerID < NB_MAX_INPUT ) { if(NULL != gui_uniqueWindows) { //EWOL_DEBUG("Event: bt=" << pointerID+1 << " ** = \"MotionNotify\" (" << (etkFloat_t)x << "," << (etkFloat_t)y << ")"); - gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_MOVE, (etkFloat_t)x, (etkFloat_t)y); + // TODO : Rework this ... + coord2D_ts tmpCoord; + tmpCoord.x = x; + tmpCoord.y = y; + gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_MOVE, tmpCoord); } } } @@ -166,7 +170,11 @@ void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y ) // Send Down message if (NULL != gui_uniqueWindows) { EWOL_VERBOSE("GUI : Input ID=" << pointerID << " [DOWN] (" << (etkFloat_t)x << "," << (etkFloat_t)y << ")"); - gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_DOWN, (etkFloat_t)x, (etkFloat_t)y); + // TODO : Rework this ... + coord2D_ts tmpCoord; + tmpCoord.x = x; + tmpCoord.y = y; + gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_DOWN, tmpCoord); } // Check double or triple click event ... m_previousDown_x = x; @@ -196,7 +204,11 @@ void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y ) // Send Down message if (NULL != gui_uniqueWindows) { EWOL_VERBOSE("GUI : Input ID=" << pointerID << " [UP] (" << (etkFloat_t)x << "," << (etkFloat_t)y << ")"); - gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_UP, (etkFloat_t)x, (etkFloat_t)y); + // TODO : Rework this ... + coord2D_ts tmpCoord; + tmpCoord.x = x; + tmpCoord.y = y; + gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_UP, tmpCoord); } if (m_previousBouttonId != pointerID) { m_previousDown_x = -1; @@ -216,7 +228,11 @@ void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y ) { // might generate an sigle event : EWOL_VERBOSE("GUI : Input ID=" << pointerID << " [SINGLE] (" << (etkFloat_t)x << "," << (etkFloat_t)y << ")"); - gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_SINGLE, (etkFloat_t)x, (etkFloat_t)y); + // TODO : Rework this ... + coord2D_ts tmpCoord; + tmpCoord.x = x; + tmpCoord.y = y; + gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_SINGLE, tmpCoord); m_previous_x = m_previousDown_x; m_previous_y = m_previousDown_y; m_previousTime = currentTime; @@ -239,12 +255,20 @@ void EWOL_NativeEventInputState(int pointerID, bool isUp, float x, float y ) // might generate an sigle event : if (false == m_previousDouble) { EWOL_VERBOSE("GUI : Input ID=" << pointerID << " [DOUBLE] (" << (etkFloat_t)x << "," << (etkFloat_t)y << ")"); - gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_DOUBLE, (etkFloat_t)x, (etkFloat_t)y); + // TODO : Rework this ... + coord2D_ts tmpCoord; + tmpCoord.x = x; + tmpCoord.y = y; + gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_DOUBLE, tmpCoord); m_previousTime = currentTime; m_previousDouble = true; } else { EWOL_VERBOSE("GUI : Input ID=" << pointerID << " [TRIPLE] (" << (etkFloat_t)x << "," << (etkFloat_t)y << ")"); - gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_TRIPLE, (etkFloat_t)x, (etkFloat_t)y); + // TODO : Rework this ... + coord2D_ts tmpCoord; + tmpCoord.x = x; + tmpCoord.y = y; + gui_uniqueWindows->GenEventInput(pointerID, ewol::EVENT_INPUT_TYPE_TRIPLE, tmpCoord); // reset values ... m_previousDown_x = -1; m_previousDown_y = -1; diff --git a/Sources/libewol/ewol/widget/Button.cpp b/Sources/libewol/ewol/widget/Button.cpp index 6c93bb52..be9e4830 100644 --- a/Sources/libewol/ewol/widget/Button.cpp +++ b/Sources/libewol/ewol/widget/Button.cpp @@ -184,7 +184,7 @@ void ewol::Button::OnRegenerateDisplay(void) } -bool ewol::Button::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::Button::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { //EWOL_DEBUG("Event on BT ..."); if (1 == IdInput) { @@ -192,7 +192,7 @@ bool ewol::Button::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, et || ewol::EVENT_INPUT_TYPE_DOUBLE == typeEvent || ewol::EVENT_INPUT_TYPE_TRIPLE == typeEvent) { // nothing to do ... - GenEventInputExternal(ewolEventButtonPressed, x, y); + GenEventInputExternal(ewolEventButtonPressed, pos.abs.x, pos.abs.y); MarkToReedraw(); return true; } diff --git a/Sources/libewol/ewol/widget/Button.h b/Sources/libewol/ewol/widget/Button.h index 0b25bbaa..fbb4ccc1 100644 --- a/Sources/libewol/ewol/widget/Button.h +++ b/Sources/libewol/ewol/widget/Button.h @@ -61,7 +61,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual bool OnEventKb(ewol::eventKbType_te typeEvent, uniChar_t unicodeData); }; }; diff --git a/Sources/libewol/ewol/widget/CheckBox.cpp b/Sources/libewol/ewol/widget/CheckBox.cpp index 6c476fcd..58b2eebb 100644 --- a/Sources/libewol/ewol/widget/CheckBox.cpp +++ b/Sources/libewol/ewol/widget/CheckBox.cpp @@ -148,7 +148,7 @@ void ewol::CheckBox::OnRegenerateDisplay(void) } -bool ewol::CheckBox::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::CheckBox::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { //EWOL_DEBUG("Event on checkbox ..."); if (1 == IdInput) { @@ -158,7 +158,7 @@ bool ewol::CheckBox::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, } else { m_value = true; } - GenEventInputExternal(ewolEventCheckBoxClicked, x, y); + GenEventInputExternal(ewolEventCheckBoxClicked, pos.abs.x, pos.abs.y); ewol::widgetManager::FocusKeep(this); MarkToReedraw(); return true; diff --git a/Sources/libewol/ewol/widget/CheckBox.h b/Sources/libewol/ewol/widget/CheckBox.h index 05dd5732..2db35059 100644 --- a/Sources/libewol/ewol/widget/CheckBox.h +++ b/Sources/libewol/ewol/widget/CheckBox.h @@ -51,7 +51,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual bool OnEventKb(eventKbType_te typeEvent, uniChar_t unicodeData); }; }; diff --git a/Sources/libewol/ewol/widget/ContextMenu.cpp b/Sources/libewol/ewol/widget/ContextMenu.cpp index 263be171..72362f52 100644 --- a/Sources/libewol/ewol/widget/ContextMenu.cpp +++ b/Sources/libewol/ewol/widget/ContextMenu.cpp @@ -243,15 +243,15 @@ void ewol::ContextMenu::OnRegenerateDisplay(void) } -bool ewol::ContextMenu::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::ContextMenu::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { if (NULL != m_subWidget) { coord2D_ts tmpSize = m_subWidget->GetSize(); coord2D_ts tmpOrigin = m_subWidget->GetOrigin(); - if( (tmpOrigin.x <= x && tmpOrigin.x + tmpSize.x >= x) - && (tmpOrigin.y <= y && tmpOrigin.y + tmpSize.y >= y) ) + if( (tmpOrigin.x <= pos.local.x && tmpOrigin.x + tmpSize.x >= pos.local.x) + && (tmpOrigin.y <= pos.local.y && tmpOrigin.y + tmpSize.y >= pos.local.y) ) { - return m_subWidget->GenEventInput(IdInput, typeEvent, x, y); + return m_subWidget->GenEventInput(IdInput, typeEvent, pos.abs); } else { //EWOL_INFO("Event ouside the context menu"); if (IdInput > 0) { diff --git a/Sources/libewol/ewol/widget/ContextMenu.h b/Sources/libewol/ewol/widget/ContextMenu.h index e0229648..88c63d65 100644 --- a/Sources/libewol/ewol/widget/ContextMenu.h +++ b/Sources/libewol/ewol/widget/ContextMenu.h @@ -66,7 +66,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); }; }; diff --git a/Sources/libewol/ewol/widget/Drawable.cpp b/Sources/libewol/ewol/widget/Drawable.cpp index 1dd81516..98dee3da 100644 --- a/Sources/libewol/ewol/widget/Drawable.cpp +++ b/Sources/libewol/ewol/widget/Drawable.cpp @@ -49,10 +49,10 @@ void ewol::Drawable::AddOObject(ewol::OObject* newObject, int32_t pos) EWOL_ERROR("Try to add an empty object in the Widget generic display system"); return; } + // TODO : Chow why I use this ... //EWOL_INFO("UPDATE AT size : (" << m_size.x << "," << m_size.y << ")"); newObject->UpdateSize(m_size.x, m_size.y); - //EWOL_INFO("UPDATE AT origin : (" << m_origin.x << "," << m_origin.y << ")"); - //newObject->UpdateOrigin(m_origin.x, m_origin.y); + if (pos < 0 || pos >= m_listOObject[m_currentCreateId].Size() ) { m_listOObject[m_currentCreateId].PushBack(newObject); } else { diff --git a/Sources/libewol/ewol/widget/Entry.cpp b/Sources/libewol/ewol/widget/Entry.cpp index a2c26cf6..a6b9b3a9 100644 --- a/Sources/libewol/ewol/widget/Entry.cpp +++ b/Sources/libewol/ewol/widget/Entry.cpp @@ -171,13 +171,13 @@ void ewol::Entry::OnRegenerateDisplay(void) } -bool ewol::Entry::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::Entry::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { //EWOL_DEBUG("Event on Entry ..."); if (1 == IdInput) { if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) { // nothing to do ... - GenEventInputExternal(ewolEventEntryClick, x, y); + GenEventInputExternal(ewolEventEntryClick, pos.abs.x, pos.abs.y); ewol::widgetManager::FocusKeep(this); MarkToReedraw(); return true; diff --git a/Sources/libewol/ewol/widget/Entry.h b/Sources/libewol/ewol/widget/Entry.h index d85004a6..f3b47090 100644 --- a/Sources/libewol/ewol/widget/Entry.h +++ b/Sources/libewol/ewol/widget/Entry.h @@ -62,7 +62,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual bool OnEventKb(eventKbType_te typeEvent, uniChar_t unicodeData); protected: virtual void OnGetFocus(void); diff --git a/Sources/libewol/ewol/widget/Label.cpp b/Sources/libewol/ewol/widget/Label.cpp index 5170f386..6e066e4b 100644 --- a/Sources/libewol/ewol/widget/Label.cpp +++ b/Sources/libewol/ewol/widget/Label.cpp @@ -119,13 +119,13 @@ void ewol::Label::OnRegenerateDisplay(void) } -bool ewol::Label::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::Label::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { //EWOL_DEBUG("Event on Label ..."); if (1 == IdInput) { if (ewol::EVENT_INPUT_TYPE_SINGLE == typeEvent) { // nothing to do ... - GenEventInputExternal(ewolEventLabelPressed, x, y); + GenEventInputExternal(ewolEventLabelPressed, pos.abs.x, pos.abs.y); return true; } } diff --git a/Sources/libewol/ewol/widget/Label.h b/Sources/libewol/ewol/widget/Label.h index 1ceccd90..21af5c0d 100644 --- a/Sources/libewol/ewol/widget/Label.h +++ b/Sources/libewol/ewol/widget/Label.h @@ -47,7 +47,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); }; }; diff --git a/Sources/libewol/ewol/widget/List.cpp b/Sources/libewol/ewol/widget/List.cpp index 743ca8f3..b6f6b04d 100644 --- a/Sources/libewol/ewol/widget/List.cpp +++ b/Sources/libewol/ewol/widget/List.cpp @@ -154,9 +154,9 @@ void ewol::List::OnRegenerateDisplay(void) } -bool ewol::List::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::List::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { - if (true == WidgetScrooled::OnEventInput(IdInput, typeEvent, x, y)) { + if (true == WidgetScrooled::OnEventInput(IdInput, typeEvent, pos)) { ewol::widgetManager::FocusKeep(this); // nothing to do ... done on upper widet ... return true; @@ -165,9 +165,9 @@ bool ewol::List::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkF //int32_t minWidth = ewol::GetWidth(fontId, m_label.c_str()); int32_t minHeight = ewol::GetHeight(fontId); - int32_t rawID = (y+m_originScrooled.y) / (minHeight + 2*m_paddingSizeY); + int32_t rawID = (pos.local.y+m_originScrooled.y) / (minHeight + 2*m_paddingSizeY); //EWOL_DEBUG("OnEventInput(" << IdInput << "," << typeEvent << "," << 0 << "," << rawID << "," << x <<"," << y << ");"); - bool isUsed = OnItemEvent(IdInput, typeEvent, 0, rawID, x, y); + bool isUsed = OnItemEvent(IdInput, typeEvent, 0, rawID, pos.local.x, pos.local.y); if (true == isUsed) { // TODO : this generate bugs ... I did not understand why .. //ewol::widgetManager::FocusKeep(this); diff --git a/Sources/libewol/ewol/widget/List.h b/Sources/libewol/ewol/widget/List.h index 6bbe5788..5d0b58a6 100644 --- a/Sources/libewol/ewol/widget/List.h +++ b/Sources/libewol/ewol/widget/List.h @@ -46,7 +46,7 @@ namespace ewol { int32_t m_displayCurrentNbLine; //!< Number of line in the display public: virtual void OnRegenerateDisplay(void); - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); protected: // function call to display the list : virtual color_ts GetBasicBG(void) { diff --git a/Sources/libewol/ewol/widget/PopUp.cpp b/Sources/libewol/ewol/widget/PopUp.cpp index e60d58bd..39f646d8 100644 --- a/Sources/libewol/ewol/widget/PopUp.cpp +++ b/Sources/libewol/ewol/widget/PopUp.cpp @@ -175,15 +175,15 @@ void ewol::PopUp::OnRegenerateDisplay(void) } -bool ewol::PopUp::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::PopUp::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { if (NULL != m_subWidget[m_currentCreateId]) { coord2D_ts tmpSize = m_subWidget[m_currentCreateId]->GetSize(); coord2D_ts tmpOrigin = m_subWidget[m_currentCreateId]->GetOrigin(); - if( (tmpOrigin.x <= x && tmpOrigin.x + tmpSize.x >= x) - && (tmpOrigin.y <= y && tmpOrigin.y + tmpSize.y >= y) ) + if( (tmpOrigin.x <= pos.local.x && tmpOrigin.x + tmpSize.x >= pos.local.x) + && (tmpOrigin.y <= pos.local.y && tmpOrigin.y + tmpSize.y >= pos.local.y) ) { - return m_subWidget[m_currentCreateId]->GenEventInput(IdInput, typeEvent, x, y); + return m_subWidget[m_currentCreateId]->GenEventInput(IdInput, typeEvent, pos.abs); } else { //EWOL_INFO("Event ouside the Pop-up"); } diff --git a/Sources/libewol/ewol/widget/PopUp.h b/Sources/libewol/ewol/widget/PopUp.h index 13d9d548..225f1d56 100644 --- a/Sources/libewol/ewol/widget/PopUp.h +++ b/Sources/libewol/ewol/widget/PopUp.h @@ -56,7 +56,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual void OnFlipFlopEvent(void); }; }; diff --git a/Sources/libewol/ewol/widget/SizerHori.cpp b/Sources/libewol/ewol/widget/SizerHori.cpp index fd5c2cab..9fd630ca 100644 --- a/Sources/libewol/ewol/widget/SizerHori.cpp +++ b/Sources/libewol/ewol/widget/SizerHori.cpp @@ -71,8 +71,8 @@ bool ewol::SizerHori::CalculateSize(etkFloat_t availlableX, etkFloat_t availlabl } } coord2D_ts tmpOrigin; - tmpOrigin.x = 0; - tmpOrigin.y = 0; + tmpOrigin.x = m_origin.x; + tmpOrigin.y = m_origin.y; for (int32_t iii=0; iiiGetMinSize(); @@ -235,16 +235,16 @@ void ewol::SizerHori::OnRegenerateDisplay(void) } -bool ewol::SizerHori::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::SizerHori::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { for (int32_t iii=0; iiiGetSize(); coord2D_ts tmpOrigin = m_subWidget[m_currentCreateId][iii]->GetOrigin(); - if( (tmpOrigin.x <= x && tmpOrigin.x + tmpSize.x >= x) - && (tmpOrigin.y <= y && tmpOrigin.y + tmpSize.y >= y) ) + if( (tmpOrigin.x <= pos.abs.x && tmpOrigin.x + tmpSize.x >= pos.abs.x) + && (tmpOrigin.y <= pos.abs.y && tmpOrigin.y + tmpSize.y >= pos.abs.y) ) { - return m_subWidget[m_currentCreateId][iii]->GenEventInput(IdInput, typeEvent, x, y); + return m_subWidget[m_currentCreateId][iii]->GenEventInput(IdInput, typeEvent, pos.abs); } } } diff --git a/Sources/libewol/ewol/widget/SizerHori.h b/Sources/libewol/ewol/widget/SizerHori.h index 60826687..44ca1d73 100644 --- a/Sources/libewol/ewol/widget/SizerHori.h +++ b/Sources/libewol/ewol/widget/SizerHori.h @@ -56,7 +56,7 @@ namespace ewol { virtual bool OnDraw(void); public: virtual void OnRegenerateDisplay(void); - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual void OnFlipFlopEvent(void); }; }; diff --git a/Sources/libewol/ewol/widget/SizerVert.cpp b/Sources/libewol/ewol/widget/SizerVert.cpp index 7b69d4dc..28b6937c 100644 --- a/Sources/libewol/ewol/widget/SizerVert.cpp +++ b/Sources/libewol/ewol/widget/SizerVert.cpp @@ -73,8 +73,8 @@ bool ewol::SizerVert::CalculateSize(etkFloat_t availlableX, etkFloat_t availlabl } } coord2D_ts tmpOrigin; - tmpOrigin.x = 0; - tmpOrigin.y = 0; + tmpOrigin.x = m_origin.x; + tmpOrigin.y = m_origin.y; for (int32_t iii=0; iiiGetMinSize(); @@ -235,16 +235,16 @@ void ewol::SizerVert::OnRegenerateDisplay(void) } -bool ewol::SizerVert::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::SizerVert::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { for (int32_t iii=0; iiiGetSize(); coord2D_ts tmpOrigin = m_subWidget[m_currentCreateId][iii]->GetOrigin(); - if( (tmpOrigin.x <= x && tmpOrigin.x + tmpSize.x >= x) - && (tmpOrigin.y <= y && tmpOrigin.y + tmpSize.y >= y) ) + if( (tmpOrigin.x <= pos.abs.x && tmpOrigin.x + tmpSize.x >= pos.abs.x) + && (tmpOrigin.y <= pos.abs.y && tmpOrigin.y + tmpSize.y >= pos.abs.y) ) { - return m_subWidget[m_currentCreateId][iii]->GenEventInput(IdInput, typeEvent, x, y); + return m_subWidget[m_currentCreateId][iii]->GenEventInput(IdInput, typeEvent, pos.abs); } } } diff --git a/Sources/libewol/ewol/widget/SizerVert.h b/Sources/libewol/ewol/widget/SizerVert.h index 9a5dbc83..57f8edce 100644 --- a/Sources/libewol/ewol/widget/SizerVert.h +++ b/Sources/libewol/ewol/widget/SizerVert.h @@ -57,7 +57,7 @@ namespace ewol { public: virtual void OnRegenerateDisplay(void); public: - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); virtual void OnFlipFlopEvent(void); }; }; diff --git a/Sources/libewol/ewol/widget/WidgetScrolled.cpp b/Sources/libewol/ewol/widget/WidgetScrolled.cpp index 1125d796..412e1951 100644 --- a/Sources/libewol/ewol/widget/WidgetScrolled.cpp +++ b/Sources/libewol/ewol/widget/WidgetScrolled.cpp @@ -66,15 +66,15 @@ void ewol::WidgetScrooled::OnRegenerateDisplay(void) #endif } -bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te typeEvent, eventPosition_ts pos) { #ifdef __MODE__Touch if (1 == IdInput) { EWOL_VERBOSE("event 1 << " << (int32_t)typeEvent << "(" << x << "," << y << ")"); if (ewol::EVENT_INPUT_TYPE_DOWN == typeEvent) { m_highSpeedMode = ewol::SCROLL_INIT; - m_highSpeedStartPos.x = x; - m_highSpeedStartPos.y = y; + m_highSpeedStartPos.x = pos.local.x; + m_highSpeedStartPos.y = pos.local.y; EWOL_VERBOSE("SCROOL ==> INIT"); return true; } else if (ewol::EVENT_INPUT_TYPE_UP == typeEvent) { @@ -84,8 +84,8 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te return true; } else if (ewol::SCROLL_INIT==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) { // wait that the cursor move more than 10 px to enable it : - if( abs(x - m_highSpeedStartPos.x) > 10 - || abs(y - m_highSpeedStartPos.y) > 10 ) { + if( abs(pos.local.x - m_highSpeedStartPos.x) > 10 + || abs(pos.local.y - m_highSpeedStartPos.y) > 10 ) { // the scrooling can start : // select the direction : m_highSpeedMode = ewol::SCROLL_ENABLE; @@ -95,14 +95,14 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te return true; } if (ewol::SCROLL_ENABLE==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) { //m_originScrooled.x = (int32_t)(m_maxSize.x * x / m_size.x); - m_originScrooled.x -= x - m_highSpeedStartPos.x; - m_originScrooled.y -= y - m_highSpeedStartPos.y; + m_originScrooled.x -= pos.local.x - m_highSpeedStartPos.x; + m_originScrooled.y -= pos.local.y - m_highSpeedStartPos.y; m_originScrooled.x = etk_max(m_originScrooled.x, 0); m_originScrooled.y = etk_max(m_originScrooled.y, 0); m_originScrooled.x = etk_min(m_originScrooled.x, m_maxSize.x); m_originScrooled.y = etk_min(m_originScrooled.y, m_maxSize.y); - m_highSpeedStartPos.x = x; - m_highSpeedStartPos.y = y; + m_highSpeedStartPos.x = pos.local.x; + m_highSpeedStartPos.y = pos.local.y; EWOL_VERBOSE("SCROOL ==> MOVE (" << m_originScrooled.x << "," << m_originScrooled.y << ")"); MarkToReedraw(); return true; @@ -133,8 +133,8 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te }else if (2 == IdInput) { if (ewol::EVENT_INPUT_TYPE_DOWN == typeEvent) { m_highSpeedMode = ewol::SCROLL_INIT; - m_highSpeedStartPos.x = x; - m_highSpeedStartPos.y = y; + m_highSpeedStartPos.x = pos.local.x; + m_highSpeedStartPos.y = pos.local.y; return true; } else if (ewol::EVENT_INPUT_TYPE_UP == typeEvent) { m_highSpeedMode = ewol::SCROLL_DISABLE; @@ -142,16 +142,16 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te return true; } else if (ewol::SCROLL_INIT==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) { // wait that the cursor move more than 10 px to enable it : - if( abs(x - m_highSpeedStartPos.x) > 10 - || abs(y - m_highSpeedStartPos.y) > 10 ) { + if( abs(pos.local.x - m_highSpeedStartPos.x) > 10 + || abs(pos.local.y - m_highSpeedStartPos.y) > 10 ) { // the scrooling can start : // select the direction : - if (x == m_highSpeedStartPos.x) { + if (pos.local.x == m_highSpeedStartPos.x) { m_highSpeedMode = ewol::SCROLL_ENABLE_VERTICAL; - } else if (y == m_highSpeedStartPos.y) { + } else if (pos.local.y == m_highSpeedStartPos.y) { m_highSpeedMode = ewol::SCROLL_ENABLE_HORIZONTAL; } else { - etkFloat_t coef = (y - m_highSpeedStartPos.y) / (x - m_highSpeedStartPos.x); + etkFloat_t coef = (pos.local.y - m_highSpeedStartPos.y) / (pos.local.x - m_highSpeedStartPos.x); if (abs(coef) <= 1 ) { m_highSpeedMode = ewol::SCROLL_ENABLE_HORIZONTAL; } else { @@ -167,11 +167,11 @@ bool ewol::WidgetScrooled::OnEventInput(int32_t IdInput, ewol::eventInputType_te } return true; } if (ewol::SCROLL_ENABLE_HORIZONTAL==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) { - m_originScrooled.x = (int32_t)(m_maxSize.x * x / m_size.x); + m_originScrooled.x = (int32_t)(m_maxSize.x * pos.local.x / m_size.x); MarkToReedraw(); return true; } if (ewol::SCROLL_ENABLE_VERTICAL==m_highSpeedMode && ewol::EVENT_INPUT_TYPE_MOVE == typeEvent) { - m_originScrooled.y = (int32_t)(m_maxSize.y * y / m_size.y); + m_originScrooled.y = (int32_t)(m_maxSize.y * pos.local.y / m_size.y); MarkToReedraw(); return true; } diff --git a/Sources/libewol/ewol/widget/WidgetScrolled.h b/Sources/libewol/ewol/widget/WidgetScrolled.h index 0cfb51bc..e920512b 100644 --- a/Sources/libewol/ewol/widget/WidgetScrolled.h +++ b/Sources/libewol/ewol/widget/WidgetScrolled.h @@ -54,7 +54,7 @@ namespace ewol { WidgetScrooled(void); virtual ~WidgetScrooled(void); virtual void OnRegenerateDisplay(void); - virtual bool OnEventInput(int32_t IdInput, ewol::eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, ewol::eventInputType_te typeEvent, eventPosition_ts pos); protected: void SetScrollingSize(etkFloat_t nbPixel) { m_pixelScrolling = nbPixel; }; }; diff --git a/Sources/libewol/ewol/widgetMeta/Keyboard.cpp b/Sources/libewol/ewol/widgetMeta/Keyboard.cpp index 61500b7e..c2e1a30e 100644 --- a/Sources/libewol/ewol/widgetMeta/Keyboard.cpp +++ b/Sources/libewol/ewol/widgetMeta/Keyboard.cpp @@ -301,10 +301,10 @@ void ewol::Keyboard::OnRegenerateDisplay(void) } } -bool ewol::Keyboard::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y) +bool ewol::Keyboard::OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos) { if (NULL != m_subWidget) { - return m_subWidget->GenEventInput(IdInput, typeEvent, x, y); + return m_subWidget->GenEventInput(IdInput, typeEvent, pos.abs); } return false; } diff --git a/Sources/libewol/ewol/widgetMeta/Keyboard.h b/Sources/libewol/ewol/widgetMeta/Keyboard.h index 4b109620..bc5146b4 100644 --- a/Sources/libewol/ewol/widgetMeta/Keyboard.h +++ b/Sources/libewol/ewol/widgetMeta/Keyboard.h @@ -62,7 +62,7 @@ namespace ewol { virtual void SetMinSise(etkFloat_t x=-1, etkFloat_t y=-1); virtual void SetExpendX(bool newExpend=false); virtual void SetExpendY(bool newExpend=false); - virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, etkFloat_t x, etkFloat_t y); + virtual bool OnEventInput(int32_t IdInput, eventInputType_te typeEvent, eventPosition_ts pos); }; };