From: Huayong Xu Date: Fri, 1 Feb 2019 02:03:06 +0000 (+0800) Subject: TextField is re-laied out after its properties are changed. X-Git-Tag: dali_1.4.11~5^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=9df674d995218c964b7e498f83daed40da766464;hp=7c1ca2d9ab3bc63f3dc164c4f5d4ea0d8bf5ba3e TextField is re-laied out after its properties are changed. Originally TextField would be re-laid out only when its state is SELECTING and property is changed. But in some cases, TextField need be re-laid out immediately even if its state is INACTIVE or EDITING. Change-Id: Ib3642e34e0d853f884526b5a9c96bb387f9c74f9 Signed-off-by: Huayong Xu --- diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp index 92be479..66b7149 100755 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Controller.cpp @@ -49,6 +49,22 @@ void ContentSelectedCallback( ClipboardEventNotifier& notifier ) gClipboardText = notifier.GetContent(); } +// Generate a KeyEvent to send to Core. +Dali::KeyEvent GenerateKey( const std::string& keyName, + const std::string& keyString, + int keyCode, + int keyModifier, + unsigned long timeStamp, + const Dali::KeyEvent::State& keyState ) +{ + return Dali::KeyEvent( keyName, + keyString, + keyCode, + keyModifier, + timeStamp, + keyState ); +} + } // namespace int UtcDaliTextController(void) @@ -690,3 +706,299 @@ int UtcDaliTextControllerCheckBufferIndices(void) END_TEST; } + +int UtcDaliTextControllerCheckInputColorChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputColorChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + + const Vector4 inputColor( 0.0f, 0.0f, 0.0f, 1.0f ); + controller->SetInputColor( inputColor ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) ); + + // change the input color + const Vector4 newInputColor( 1.0f, 0.0f, 0.0f, 1.0f ); + controller->SetInputColor( newInputColor ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::COLOR, static_cast( mImpl.mOperationsPending & Controller::COLOR ), TEST_LOCATION ); + + // Perform a relayout + const Size size( Dali::Stage::GetCurrent().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontFamilyChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontFamilyChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text and font family + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontFamily("SamsungOneUI_200"); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) ); + + // change the input font family + controller->SetInputFontFamily("SamsungOneUI_300"); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( Dali::Stage::GetCurrent().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontWeightChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontWeightChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontWeight( TextAbstraction::FontWeight::NORMAL ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) ); + + // change the input font weight + controller->SetInputFontWeight( TextAbstraction::FontWeight::BOLD ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( Dali::Stage::GetCurrent().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontWidthChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontWidthChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontWidth( TextAbstraction::FontWidth::NORMAL ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) ); + + // change the input font width + controller->SetInputFontWidth( TextAbstraction::FontWidth::EXPANDED ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( Dali::Stage::GetCurrent().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontSlantChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontSlantChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontSlant( TextAbstraction::FontSlant::NORMAL ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) ); + + // change the input font slant + controller->SetInputFontSlant( TextAbstraction::FontSlant::ROMAN ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( Dali::Stage::GetCurrent().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} + +int UtcDaliTextControllerCheckInputFontPointSizeChanged(void) +{ + tet_infoline(" UtcDaliTextControllerCheckInputFontPointSizeChanged"); + ToolkitTestApplication application; + + // Creates a text controller. + ControllerPtr controller = Controller::New(); + + ConfigureTextLabel(controller); + + // Enable the text input. + // Creates a decorator. + Text::DecoratorPtr decorator = Text::Decorator::New( *controller, + *controller ); + InputMethodContext inputMethodContext = InputMethodContext::New(); + // Enables the text input. + controller->EnableTextInput( decorator, inputMethodContext ); + + // Set the text + const std::string text("Hello World!"); + controller->SetText(text); + controller->SetInputFontPointSize( 1.0f ); + + // Get the implementation of the text controller + Controller::Impl& mImpl = Controller::Impl::GetImplementation( *controller.Get() ); + + // Reset operation + mImpl.mOperationsPending = Controller::NO_OPERATION; + + // simulate a key event. + controller->KeyEvent( GenerateKey( "", "", DALI_KEY_CURSOR_LEFT, 0, 0, Dali::KeyEvent::Down ) ); + + // change the input font point size + controller->SetInputFontPointSize( 1.2f ); + + // Check if relayout is requested or not when event state is INACTIVE. + DALI_TEST_EQUALS( EventData::INACTIVE, mImpl.mEventData->mState, TEST_LOCATION ); + DALI_TEST_EQUALS( Controller::VALIDATE_FONTS, static_cast( mImpl.mOperationsPending & Controller::VALIDATE_FONTS ), + TEST_LOCATION ); + + // Perform a relayout + const Size size( Dali::Stage::GetCurrent().GetSize() ); + controller->Relayout(size); + + tet_result(TET_PASS); + + END_TEST; +} diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 1468941..981d8cc 100755 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -1340,7 +1340,7 @@ void Controller::SetInputColor( const Vector4& color ) mImpl->mEventData->mInputStyle.textColor = color; mImpl->mEventData->mInputStyle.isDefaultColor = false; - if( EventData::SELECTING == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState ) { const bool handlesCrossed = mImpl->mEventData->mLeftSelectionPosition > mImpl->mEventData->mRightSelectionPosition; @@ -1387,7 +1387,7 @@ void Controller::SetInputFontFamily( const std::string& fontFamily ) mImpl->mEventData->mInputStyle.familyName = fontFamily; mImpl->mEventData->mInputStyle.isFamilyDefined = true; - if( EventData::SELECTING == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState ) { CharacterIndex startOfSelectedText = 0u; Length lengthOfSelectedText = 0u; @@ -1446,7 +1446,7 @@ void Controller::SetInputFontWeight( FontWeight weight ) mImpl->mEventData->mInputStyle.weight = weight; mImpl->mEventData->mInputStyle.isWeightDefined = true; - if( EventData::SELECTING == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState ) { CharacterIndex startOfSelectedText = 0u; Length lengthOfSelectedText = 0u; @@ -1512,7 +1512,7 @@ void Controller::SetInputFontWidth( FontWidth width ) mImpl->mEventData->mInputStyle.width = width; mImpl->mEventData->mInputStyle.isWidthDefined = true; - if( EventData::SELECTING == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState ) { CharacterIndex startOfSelectedText = 0u; Length lengthOfSelectedText = 0u; @@ -1578,7 +1578,7 @@ void Controller::SetInputFontSlant( FontSlant slant ) mImpl->mEventData->mInputStyle.slant = slant; mImpl->mEventData->mInputStyle.isSlantDefined = true; - if( EventData::SELECTING == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState ) { CharacterIndex startOfSelectedText = 0u; Length lengthOfSelectedText = 0u; @@ -1644,7 +1644,7 @@ void Controller::SetInputFontPointSize( float size ) mImpl->mEventData->mInputStyle.size = size; mImpl->mEventData->mInputStyle.isSizeDefined = true; - if( EventData::SELECTING == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState ) { CharacterIndex startOfSelectedText = 0u; Length lengthOfSelectedText = 0u;