diff --git a/client/gui/CGuiHandler.cpp b/client/gui/CGuiHandler.cpp index 16e92e2e9..926ee3e6e 100644 --- a/client/gui/CGuiHandler.cpp +++ b/client/gui/CGuiHandler.cpp @@ -206,9 +206,6 @@ void CGuiHandler::handleEvents() } } -bool multifinger = false; -int lastFingerCount; - void convertTouch(SDL_Event * current) { int rLogicalWidth, rLogicalHeight; @@ -358,7 +355,7 @@ void CGuiHandler::handleCurrentEvent() } else if(current->type == SDL_MOUSEBUTTONUP) { - if(!multifinger || lastFingerCount < 1) + if(!multifinger) { switch(current->button.button) { @@ -374,13 +371,14 @@ void CGuiHandler::handleCurrentEvent() } } } +#ifndef VCMI_IOS else if(current->type == SDL_FINGERDOWN) { - lastFingerCount = SDL_GetNumTouchFingers(current->tfinger.touchId); + auto fingerCount = SDL_GetNumTouchFingers(current->tfinger.touchId); - multifinger = lastFingerCount > 1; + multifinger = fingerCount > 1; - if(lastFingerCount == 2) + if(fingerCount == 2) { convertTouch(current); handleMouseMotion(); @@ -389,16 +387,17 @@ void CGuiHandler::handleCurrentEvent() } else if(current->type == SDL_FINGERUP) { - lastFingerCount = SDL_GetNumTouchFingers(current->tfinger.touchId); + auto fingerCount = SDL_GetNumTouchFingers(current->tfinger.touchId); if(multifinger) { - multifinger = false; convertTouch(current); handleMouseMotion(); handleMouseButtonClick(rclickable, EIntObjMouseBtnType::RIGHT, false); + multifinger = fingerCount != 0; } } +#endif //VCMI_IOS current = nullptr; } //event end @@ -527,7 +526,8 @@ void CGuiHandler::renderFrame() CGuiHandler::CGuiHandler() - : lastClick(-500, -500),lastClickTime(0), defActionsDef(0), captureChildren(false) + : lastClick(-500, -500),lastClickTime(0), defActionsDef(0), captureChildren(false), + multifinger(false) { continueEventHandling = true; curInt = nullptr; diff --git a/client/gui/CGuiHandler.h b/client/gui/CGuiHandler.h index 7f6373dfb..d9aa2068d 100644 --- a/client/gui/CGuiHandler.h +++ b/client/gui/CGuiHandler.h @@ -101,6 +101,7 @@ public: Point lastClick; unsigned lastClickTime; + bool multifinger; ui8 defActionsDef; //default auto actions bool captureChildren; //all newly created objects will get their parents from stack and will be added to parents children list diff --git a/client/windows/CAdvmapInterface.cpp b/client/windows/CAdvmapInterface.cpp index 99e676a36..0af40cc55 100644 --- a/client/windows/CAdvmapInterface.cpp +++ b/client/windows/CAdvmapInterface.cpp @@ -180,7 +180,7 @@ void CTerrainRect::mouseMoved(const SDL_MouseMotionEvent & sEvent) void CTerrainRect::handleSwipeMove(const SDL_MouseMotionEvent & sEvent) { #if defined(VCMI_ANDROID) || defined(VCMI_IOS) - if(sEvent.state == 0) // any "button" is enough on mobile + if(sEvent.state == 0 || GH.multifinger) // any "button" is enough on mobile #else if((sEvent.state & SDL_BUTTON_MMASK) == 0) // swipe only works with middle mouse on other platforms #endif