From d60413f7d6a8ac1a2fc04ba27e2aef5726c74c25 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Fri, 8 Mar 2013 15:32:04 -0300 Subject: [PATCH] Progress in SDL platform --- modules/client/client.lua | 2 +- modules/game_interface/gameinterface.lua | 1 + src/client/spritemanager.cpp | 6 +- src/framework/core/logger.cpp | 4 +- src/framework/platform/platformwindow.h | 3 + src/framework/platform/sdlwindow.cpp | 111 ++++++++++++++++++++++- src/framework/platform/sdlwindow.h | 3 + 7 files changed, 123 insertions(+), 7 deletions(-) diff --git a/modules/client/client.lua b/modules/client/client.lua index 3f8d0cdb..e3e3689e 100644 --- a/modules/client/client.lua +++ b/modules/client/client.lua @@ -63,8 +63,8 @@ function init() -- initialize in fullscreen mode on mobile devices if g_app.getOs() == "android" then - g_window.setFullscreen(true) g_window.maximize() + --g_window.setFullscreen(true) else -- window size local size = { width = 800, height = 600 } diff --git a/modules/game_interface/gameinterface.lua b/modules/game_interface/gameinterface.lua index 7e27a223..55621a63 100644 --- a/modules/game_interface/gameinterface.lua +++ b/modules/game_interface/gameinterface.lua @@ -746,6 +746,7 @@ function setupViewMode(mode) gameMapPanel:setVisibleDimension({ width = 15, height = 11 }) elseif mode == 2 then local limit = limitZoom and not g_game.isGM() + gameMapPanel:setKeepAspectRatio(false) gameMapPanel:setLimitVisibleRange(limit) gameMapPanel:setZoom(11) gameMapPanel:setVisibleDimension({ width = 15, height = 11 }) diff --git a/src/client/spritemanager.cpp b/src/client/spritemanager.cpp index 1b2ac395..62a2a88c 100644 --- a/src/client/spritemanager.cpp +++ b/src/client/spritemanager.cpp @@ -48,9 +48,11 @@ bool SpriteManager::loadSpr(std::string file) file = g_resources.guessFilePath(file, "spr"); m_spritesFile = g_resources.openFile(file); - // cache file buffer to avoid lags from hard drive - m_spritesFile->cache(); + // cache file buffer to avoid lags from hard drive +#ifndef MOBILE + m_spritesFile->cache(); +#endif m_signature = m_spritesFile->getU32(); m_spritesCount = g_game.getFeature(Otc::GameSpritesU32) ? m_spritesFile->getU32() : m_spritesFile->getU16(); m_spritesOffset = m_spritesFile->tell(); diff --git a/src/framework/core/logger.cpp b/src/framework/core/logger.cpp index 63603875..9b02d7b2 100644 --- a/src/framework/core/logger.cpp +++ b/src/framework/core/logger.cpp @@ -42,11 +42,13 @@ void Logger::log(Fw::LogLevel level, const std::string& message) { std::lock_guard lock(m_mutex); +/* +>>>>>>> Progress in SDL platform #ifdef NDEBUG if(level == Fw::LogDebug) return; #endif - +*/ static bool ignoreLogs = false; if(ignoreLogs) return; diff --git a/src/framework/platform/platformwindow.h b/src/framework/platform/platformwindow.h index 11fc211c..cbf3c6da 100644 --- a/src/framework/platform/platformwindow.h +++ b/src/framework/platform/platformwindow.h @@ -58,6 +58,9 @@ public: virtual void setMouseCursor(int cursorId) = 0; virtual void restoreMouseCursor() = 0; + virtual void showInputKeyboard() { } + virtual void hideInputKeyboard() { } + virtual void setTitle(const std::string& title) = 0; virtual void setMinimumSize(const Size& minimumSize) = 0; virtual void setFullscreen(bool fullscreen) = 0; diff --git a/src/framework/platform/sdlwindow.cpp b/src/framework/platform/sdlwindow.cpp index ed453661..3afd36cf 100644 --- a/src/framework/platform/sdlwindow.cpp +++ b/src/framework/platform/sdlwindow.cpp @@ -111,6 +111,21 @@ void SDLWindow::maximize() SDL_MaximizeWindow(m_window); } +Fw::MouseButton translateMouseButton(uint8 sdlButton) +{ + switch(sdlButton) { + case SDL_BUTTON_LEFT: + return Fw::MouseLeftButton; + break; + case SDL_BUTTON_MIDDLE: + return Fw::MouseMidButton; + break; + case SDL_BUTTON_RIGHT: + return Fw::MouseRightButton; + } + return Fw::MouseNoButton; +} + void SDLWindow::poll() { SDL_Event event; @@ -158,13 +173,93 @@ void SDLWindow::poll() case SDL_TEXTINPUT: break; case SDL_MOUSEMOTION: + m_inputEvent.reset(); + m_inputEvent.type = Fw::MouseMoveInputEvent; + m_inputEvent.mouseMoved = Point(event.motion.xrel, event.motion.yrel); + m_inputEvent.mousePos = Point(event.motion.x, event.motion.y); + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); break; - case SDL_MOUSEBUTTONDOWN: + case SDL_MOUSEBUTTONDOWN: { + Fw::MouseButton button = translateMouseButton(event.button.button); + if(button != Fw::MouseNoButton) { + m_inputEvent.reset(); + m_inputEvent.type = Fw::MousePressInputEvent; + m_inputEvent.mouseButton = button; + m_mouseButtonStates[button] = true; + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); + } break; - case SDL_MOUSEBUTTONUP: + } + case SDL_MOUSEBUTTONUP: { + Fw::MouseButton button = translateMouseButton(event.button.button); + if(button == Fw::MouseNoButton) + break; + m_inputEvent.reset(); + m_inputEvent.type = Fw::MouseReleaseInputEvent; + m_inputEvent.mouseButton = button; + m_mouseButtonStates[button] = false; + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); break; - case SDL_MOUSEWHEEL: + } + case SDL_MOUSEWHEEL: { + m_inputEvent.reset(); + m_inputEvent.type = Fw::MouseWheelInputEvent; + m_inputEvent.mouseButton = Fw::MouseMidButton; + if(event.wheel.y > 0) + m_inputEvent.wheelDirection = Fw::MouseWheelUp; + else if(event.wheel.y < 0) + m_inputEvent.wheelDirection = Fw::MouseWheelUp; + else + break; + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); break; + } + case SDL_FINGERDOWN: { + Fw::MouseButton button; + if(event.tfinger.fingerId == 0) + button = Fw::MouseLeftButton; + else if(event.tfinger.fingerId == 1) + button = Fw::MouseRightButton; + else + break; + m_inputEvent.reset(); + m_inputEvent.type = Fw::MouseReleaseInputEvent; + m_inputEvent.mouseButton = button; + m_mouseButtonStates[button] = true; + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); + break; + } + case SDL_FINGERUP: { + Fw::MouseButton button; + if(event.tfinger.fingerId == 0) + button = Fw::MouseLeftButton; + else if(event.tfinger.fingerId == 1) + button = Fw::MouseRightButton; + else + break; + m_inputEvent.reset(); + m_inputEvent.type = Fw::MouseReleaseInputEvent; + m_inputEvent.mouseButton = button; + m_mouseButtonStates[button] = false; + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); + break; + } + case SDL_FINGERMOTION: { + m_inputEvent.reset(); + m_inputEvent.type = Fw::MouseMoveInputEvent; + m_inputEvent.mouseMoved = Point(event.tfinger.dx, event.tfinger.dy); + m_inputEvent.mousePos = Point(event.tfinger.x, event.tfinger.y); + g_logger.info(stdext::format("motion %d %d", event.tfinger.x, event.tfinger.y)); + if(m_onInputEvent) + m_onInputEvent(m_inputEvent); + break; + } case SDL_QUIT: if(m_onClose) m_onClose(); @@ -200,6 +295,16 @@ void SDLWindow::restoreMouseCursor() //TODO } +void SDLWindow::showInputKeyboard() +{ + SDL_StartTextInput(); +} + +void SDLWindow::hideInputKeyboard() +{ + SDL_StopTextInput(); +} + void SDLWindow::setTitle(const std::string& title) { SDL_SetWindowTitle(m_window, title.c_str()); diff --git a/src/framework/platform/sdlwindow.h b/src/framework/platform/sdlwindow.h index aae00135..fa372373 100644 --- a/src/framework/platform/sdlwindow.h +++ b/src/framework/platform/sdlwindow.h @@ -48,6 +48,9 @@ public: void setMouseCursor(int cursorId); void restoreMouseCursor(); + void showInputKeyboard(); + void hideInputKeyboard(); + void setTitle(const std::string& title); void setMinimumSize(const Size& minimumSize); void setFullscreen(bool fullscreen);