Add screen keyboard handling for iOS

This commit is contained in:
Benau 2020-06-11 13:53:47 +08:00
parent 05a75dcbce
commit 784d641ebc
4 changed files with 37 additions and 0 deletions

View File

@ -318,6 +318,7 @@ namespace irr
virtual s32 getBottomPadding() { return 0; } virtual s32 getBottomPadding() { return 0; }
virtual s32 getLeftPadding() { return 0; } virtual s32 getLeftPadding() { return 0; }
virtual s32 getRightPadding() { return 0; } virtual s32 getRightPadding() { return 0; }
virtual f32 getNativeScale() const { return 1.0f; }
virtual void setWindowMinimumSize(u32 width, u32 height) {} virtual void setWindowMinimumSize(u32 width, u32 height) {}
virtual bool isResizable() const { return false; } virtual bool isResizable() const { return false; }
//! Check if a driver type is supported by the engine. //! Check if a driver type is supported by the engine.

View File

@ -950,6 +950,22 @@ bool CIrrDeviceSDL::supportsTouchDevice() const
return SDL_GetNumTouchDevices() > 0; return SDL_GetNumTouchDevices() > 0;
} }
bool CIrrDeviceSDL::hasOnScreenKeyboard() const
{
return SDL_HasScreenKeyboardSupport() == SDL_TRUE;
}
bool CIrrDeviceSDL::hasHardwareKeyboard() const
{
#ifdef MOBILE_STK
return SDL_HasHardwareKeyboardConnected() == SDL_TRUE;
#else
return true;
#endif
}
} // end namespace irr } // end namespace irr
#endif // _IRR_COMPILE_WITH_SDL_DEVICE_ #endif // _IRR_COMPILE_WITH_SDL_DEVICE_

View File

@ -133,6 +133,12 @@ namespace irr
return RightPadding * NativeScale; return RightPadding * NativeScale;
} }
virtual f32 getNativeScale() const { return NativeScale; }
virtual bool hasOnScreenKeyboard() const;
virtual bool hasHardwareKeyboard() const;
//! Implementation of the linux cursor control //! Implementation of the linux cursor control
class CCursorControl : public gui::ICursorControl class CCursorControl : public gui::ICursorControl
{ {

View File

@ -273,9 +273,12 @@ CGUIEditBox::~CGUIEditBox()
SDL_StopTextInput(); SDL_StopTextInput();
g_editbox = NULL; g_editbox = NULL;
#endif #endif
#ifdef ANDROID
if (GUIEngine::ScreenKeyboard::shouldUseScreenKeyboard() && if (GUIEngine::ScreenKeyboard::shouldUseScreenKeyboard() &&
GUIEngine::ScreenKeyboard::hasSystemScreenKeyboard()) GUIEngine::ScreenKeyboard::hasSystemScreenKeyboard())
irr_driver->getDevice()->toggleOnScreenKeyboard(false); irr_driver->getDevice()->toggleOnScreenKeyboard(false);
#endif
#endif #endif
} }
@ -686,9 +689,11 @@ bool CGUIEditBox::processKey(const SEvent& event)
break; break;
case IRR_KEY_RETURN: case IRR_KEY_RETURN:
{ {
#ifdef ANDROID
if (GUIEngine::ScreenKeyboard::shouldUseScreenKeyboard() && if (GUIEngine::ScreenKeyboard::shouldUseScreenKeyboard() &&
GUIEngine::ScreenKeyboard::hasSystemScreenKeyboard()) GUIEngine::ScreenKeyboard::hasSystemScreenKeyboard())
irr_driver->getDevice()->toggleOnScreenKeyboard(false); irr_driver->getDevice()->toggleOnScreenKeyboard(false);
#endif
sendGuiEvent( EGET_EDITBOX_ENTER ); sendGuiEvent( EGET_EDITBOX_ENTER );
} }
break; break;
@ -1156,9 +1161,11 @@ bool CGUIEditBox::processMouse(const SEvent& event)
if (GUIEngine::ScreenKeyboard::shouldUseScreenKeyboard()) if (GUIEngine::ScreenKeyboard::shouldUseScreenKeyboard())
{ {
#ifdef ANDROID
if (GUIEngine::ScreenKeyboard::hasSystemScreenKeyboard()) if (GUIEngine::ScreenKeyboard::hasSystemScreenKeyboard())
irr_driver->getDevice()->toggleOnScreenKeyboard(true, m_type); irr_driver->getDevice()->toggleOnScreenKeyboard(true, m_type);
else else
#endif
openScreenKeyboard(); openScreenKeyboard();
} }
@ -1382,6 +1389,13 @@ void CGUIEditBox::calculateScrollPos()
rect.w = 1; rect.w = 1;
rect.h = rect.h =
CurrentTextRect.LowerRightCorner.Y - CurrentTextRect.UpperLeftCorner.Y; CurrentTextRect.LowerRightCorner.Y - CurrentTextRect.UpperLeftCorner.Y;
float inverse_scale = 1.0f;
if (irr_driver->getDevice()->getNativeScale() > 0.0f)
inverse_scale = 1.0f / irr_driver->getDevice()->getNativeScale();
rect.x *= inverse_scale;
rect.y *= inverse_scale;
rect.w *= inverse_scale;
rect.h *= inverse_scale;
SDL_SetTextInputRect(&rect); SDL_SetTextInputRect(&rect);
#endif #endif