return GetDefaultOutlineProperties();
}
+void Controller::SetInputModePassword( bool passwordInput )
+{
+ if( NULL != mImpl->mEventData )
+ {
+ mImpl->mEventData->mPasswordInput = passwordInput;
+ }
+}
+
+bool Controller::IsInputModePassword()
+{
+ if( NULL != mImpl->mEventData )
+ {
+ return mImpl->mEventData->mPasswordInput;
+ }
+ return false;
+}
+
// public : Queries & retrieves.
Layout::Engine& Controller::GetLayoutEngine()
return scrollAmount;
}
+bool Controller::GetTextScrollInfo( float& scrollPosition, float& controlHeight, float& layoutHeight )
+{
+ const Vector2& layout = mImpl->mModel->mVisualModel->GetLayoutSize();
+ bool isScrolled;
+
+ controlHeight = mImpl->mModel->mVisualModel->mControlSize.height;
+ layoutHeight = layout.height;
+ scrollPosition = mImpl->mModel->mScrollPosition.y;
+ isScrolled = !Equals( mImpl->mModel->mScrollPosition.y, mImpl->mModel->mScrollPositionLast.y, Math::MACHINE_EPSILON_1 );
+ return isScrolled;
+}
+
// public : Relayout.
Controller::UpdateTextType Controller::Relayout( const Size& size )
int keyCode = keyEvent.keyCode;
const std::string& keyString = keyEvent.keyPressed;
+ const bool isNullKey = ( 0 == keyCode ) && ( keyString.empty() );
+
// Pre-process to separate modifying events from non-modifying input events.
- if( Dali::DALI_KEY_ESCAPE == keyCode )
+ if( isNullKey )
+ {
+ // In some platforms arrive key events with no key code.
+ // Do nothing.
+ }
+ else if( Dali::DALI_KEY_ESCAPE == keyCode )
{
// Escape key is a special case which causes focus loss
KeyboardFocusLostEvent();
( Dali::DALI_KEY_CURSOR_UP == keyCode ) ||
( Dali::DALI_KEY_CURSOR_DOWN == keyCode ) )
{
- mImpl->mEventData->mCheckScrollAmount = true;
+ // If don't have any text, do nothing.
+ if( !mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters )
+ {
+ return false;
+ }
+ uint32_t cursorPosition = mImpl->mEventData->mPrimaryCursorPosition;
+ uint32_t numberOfCharacters = mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters;
+ uint32_t cursorLine = mImpl->mModel->mVisualModel->GetLineOfCharacter( cursorPosition );
+ uint32_t numberOfLines = mImpl->mModel->GetNumberOfLines();
+
+ // Logic to determine whether this text control will lose focus or not.
+ if( ( Dali::DALI_KEY_CURSOR_LEFT == keyCode && 0 == cursorPosition ) ||
+ ( Dali::DALI_KEY_CURSOR_RIGHT == keyCode && numberOfCharacters == cursorPosition) ||
+ ( Dali::DALI_KEY_CURSOR_DOWN == keyCode && cursorLine == numberOfLines -1 ) ||
+ ( Dali::DALI_KEY_CURSOR_DOWN == keyCode && numberOfCharacters == cursorPosition && cursorLine -1 == numberOfLines -1 ) ||
+ ( Dali::DALI_KEY_CURSOR_UP == keyCode && cursorLine == 0 ) ||
+ ( Dali::DALI_KEY_CURSOR_UP == keyCode && numberOfCharacters == cursorPosition && cursorLine == 1 ) )
+ {
+ return false;
+ }
+
+ mImpl->mEventData->mCheckScrollAmount = true;
Event event( Event::CURSOR_KEY_EVENT );
event.p1.mInt = keyCode;
mImpl->mEventData->mEventQueue.push_back( event );
if ( ( mImpl->mEventData->mState != EventData::INTERRUPTED ) &&
( mImpl->mEventData->mState != EventData::INACTIVE ) &&
+ ( !isNullKey ) &&
( Dali::DALI_KEY_SHIFT_LEFT != keyCode ) )
{
// Should not change the state if the key is the shift send by the imf manager.
mImpl->RequestRelayout();
}
- else if( !mImpl->IsClipboardVisible() )
+ else
{
// Reset the imf manger to commit the pre-edit before selecting the text.
mImpl->ResetImfManager();