Merge " Calculate a new height when text was changed." into devel/master
authorJinho, Lee <jeano.lee@samsung.com>
Thu, 27 Jul 2017 10:41:59 +0000 (10:41 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Thu, 27 Jul 2017 10:42:00 +0000 (10:42 +0000)
1  2 
automated-tests/src/dali-toolkit/utc-Dali-TextField.cpp
dali-toolkit/internal/text/text-controller.cpp

@@@ -860,7 -860,6 +860,7 @@@ int UtcDaliTextFieldSetPropertyP(void
    Property::Map placeholderPixelSizeMapGet;
    Property::Map placeholderFontstyleMap;
    placeholderPixelSizeMapSet["placeholderText"] = "Setting Placeholder Text";
 +  placeholderPixelSizeMapSet["placeholderTextFocused"] = "Setting Placeholder Text Focused";
    placeholderPixelSizeMapSet["placeholderColor"] = Color::BLUE;
    placeholderPixelSizeMapSet["placeholderFontFamily"] = "Arial";
    placeholderPixelSizeMapSet["placeholderPixelSize"] = 15.0f;
    Property::Map placeholderMapSet;
    Property::Map placeholderMapGet;
    placeholderMapSet["placeholderText"] = "Setting Placeholder Text";
 +  placeholderMapSet["placeholderTextFocused"] = "Setting Placeholder Text Focused";
    placeholderMapSet["placeholderColor"] = Color::RED;
    placeholderMapSet["placeholderFontFamily"] = "Arial";
    placeholderMapSet["placeholderPointSize"] = 12.0f;
@@@ -2455,3 -2453,50 +2455,50 @@@ int utcDaliTextFieldSomeSpecialKeys(voi
  
    END_TEST;
  }
+ int utcDaliTextFieldSizeUpdate(void)
+ {
+   ToolkitTestApplication application;
+   tet_infoline("utcDaliTextFieldSizeUpdate");
+   // Checks some special keys when the text is selected.
+   TextField field = TextField::New();
+   DALI_TEST_CHECK( field );
+   Stage::GetCurrent().Add( field );
+   float previousHeight = 0.0f;
+   float currentHeight = 0.0f;
+   const float fieldWidth = 1920.0f;
+   // "ㅁ" is bigger then "ኢ"
+   field.SetSize( Vector2( fieldWidth ,10.0f ) );
+   field.SetResizePolicy( ResizePolicy::FIXED , Dimension::WIDTH );
+   field.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY , Dimension::HEIGHT );
+   field.SetProperty( TextField::Property::TEXT, "ኢ");
+   field.SetParentOrigin( ParentOrigin::TOP_LEFT );
+   field.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+   field.SetKeyboardFocusable(true);
+   KeyboardFocusManager::Get().SetCurrentFocusActor( field );
+   application.SendNotification();
+   application.Render();
+   previousHeight = field.GetHeightForWidth( fieldWidth );
+   DALI_TEST_EQUALS( previousHeight, field.GetProperty<float>( Actor::Property::SIZE_HEIGHT ) , TEST_LOCATION );
+   // Add  another script characters ( glyph height is defferent )
+   application.ProcessEvent( GenerateKey( "ㅁ", "ㅁ", KEY_A_CODE, 0, 0, Integration::KeyEvent::Down, DEFAULT_DEVICE_NAME, DevelDevice::Class::NONE, DevelDevice::Subclass::NONE ) );
+   application.ProcessEvent( GenerateKey( "ㅁ", "ㅁ", KEY_A_CODE, 0, 0, Integration::KeyEvent::Up, DEFAULT_DEVICE_NAME, DevelDevice::Class::NONE, DevelDevice::Subclass::NONE ) );
+   application.SendNotification();
+   application.Render();
+   currentHeight = field.GetHeightForWidth( fieldWidth );
+   DALI_TEST_EQUALS( currentHeight, field.GetProperty<float>( Actor::Property::SIZE_HEIGHT ), TEST_LOCATION );
+   DALI_TEST_EQUALS( (previousHeight < currentHeight), true , TEST_LOCATION );
+   END_TEST;
+ }
@@@ -48,7 -48,6 +48,7 @@@ const float MAX_FLOAT = std::numeric_li
  const std::string EMPTY_STRING("");
  
  const char * const PLACEHOLDER_TEXT = "placeholderText";
 +const char * const PLACEHOLDER_TEXT_FOCUSED = "placeholderTextFocused";
  const char * const PLACEHOLDER_COLOR = "placeholderColor";
  const char * const PLACEHOLDER_FONT_FAMILY = "placeholderFontFamily";
  const char * const PLACEHOLDER_FONT_STYLE = "placeholderFontStyle";
@@@ -392,34 -391,6 +392,34 @@@ Layout::VerticalAlignment Controller::G
    return mImpl->mModel->mVerticalAlignment;
  }
  
 +void Controller::SetLineWrapMode( Layout::LineWrap::Mode lineWrapMode )
 +{
 +  if( lineWrapMode != mImpl->mModel->mLineWrapMode )
 +  {
 +    // Set the text wrap mode.
 +    mImpl->mModel->mLineWrapMode = lineWrapMode;
 +
 +
 +    // Update Text layout for applying wrap mode
 +    mImpl->mOperationsPending = static_cast<OperationsMask>( mImpl->mOperationsPending |
 +                                                             ALIGN                     |
 +                                                             LAYOUT                    |
 +                                                             UPDATE_LAYOUT_SIZE        |
 +                                                             REORDER                   );
 +    mImpl->mTextUpdateInfo.mCharacterIndex = 0u;
 +    mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters;
 +    mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl->mModel->mLogicalModel->mText.Count();
 +
 +    // Request relayout
 +    mImpl->RequestRelayout();
 +  }
 +}
 +
 +Layout::LineWrap::Mode Controller::GetLineWrapMode() const
 +{
 +  return mImpl->mModel->mLineWrapMode;
 +}
 +
  void Controller::SetTextElideEnabled( bool enabled )
  {
    mImpl->mModel->mElideEnabled = enabled;
@@@ -560,6 -531,22 +560,6 @@@ void Controller::GetText( std::string& 
    }
  }
  
 -void Controller::SetPlaceholderText( const std::string& text )
 -{
 -  if( NULL != mImpl->mEventData )
 -  {
 -    mImpl->mEventData->mPlaceholderText = text;
 -
 -    // Update placeholder if there is no text
 -    if( mImpl->IsShowingPlaceholderText() ||
 -        ( 0u == mImpl->mModel->mLogicalModel->mText.Count() ) )
 -    {
 -      ShowPlaceholderText();
 -    }
 -  }
 -}
 -
 -// This is overloading function for PLACEHOLDER_TEXT_FOCUSED in text-field
  void Controller::SetPlaceholderText( PlaceholderType type, const std::string& text )
  {
    if( NULL != mImpl->mEventData )
    }
  }
  
 -void Controller::GetPlaceholderText( std::string& text ) const
 -{
 -  if( NULL != mImpl->mEventData )
 -  {
 -    text = mImpl->mEventData->mPlaceholderText;
 -  }
 -}
 -
 -// This is overloading function for PLACEHOLDER_TEXT_FOCUSED in text-field
  void Controller::GetPlaceholderText( PlaceholderType type, std::string& text ) const
  {
    if( NULL != mImpl->mEventData )
@@@ -1797,7 -1793,8 +1797,8 @@@ float Controller::GetHeightForWidth( fl
  
    Size layoutSize;
    if( fabsf( width - mImpl->mModel->mVisualModel->mControlSize.width ) > Math::MACHINE_EPSILON_1000 ||
-                                                            mImpl->mTextUpdateInfo.mFullRelayoutNeeded )
+                                                          mImpl->mTextUpdateInfo.mFullRelayoutNeeded ||
+                                                          mImpl->mTextUpdateInfo.mClearAll            )
    {
      // Operations that can be done only once until the text changes.
      const OperationsMask onlyOnceOperations = static_cast<OperationsMask>( CONVERT_TO_UTF32  |
@@@ -1922,13 -1919,7 +1923,13 @@@ void Controller::SetPlaceholderProperty
      {
        std::string text = "";
        value.Get( text );
 -      SetPlaceholderText( text );
 +      SetPlaceholderText( Controller::PLACEHOLDER_TYPE_INACTIVE, text );
 +    }
 +    else if( key == PLACEHOLDER_TEXT_FOCUSED )
 +    {
 +      std::string text = "";
 +      value.Get( text );
 +      SetPlaceholderText( Controller::PLACEHOLDER_TYPE_ACTIVE, text );
      }
      else if( key == PLACEHOLDER_COLOR )
      {
@@@ -1974,15 -1965,7 +1975,15 @@@ void Controller::GetPlaceholderProperty
  {
    if( NULL != mImpl->mEventData )
    {
 -    map[ PLACEHOLDER_TEXT ] = mImpl->mEventData->mPlaceholderText;
 +    if( !mImpl->mEventData->mPlaceholderTextActive.empty() )
 +    {
 +      map[ PLACEHOLDER_TEXT_FOCUSED ] = mImpl->mEventData->mPlaceholderTextActive;
 +    }
 +    if( !mImpl->mEventData->mPlaceholderTextInactive.empty() )
 +    {
 +      map[ PLACEHOLDER_TEXT ] = mImpl->mEventData->mPlaceholderTextInactive;
 +    }
 +
      map[ PLACEHOLDER_COLOR ] = mImpl->mEventData->mPlaceholderTextColor;
      map[ PLACEHOLDER_FONT_FAMILY ] = GetPlaceholderFontFamily();
  
@@@ -2219,7 -2202,6 +2220,7 @@@ bool Controller::KeyEvent( const Dali::
      {
        // In some platforms arrive key events with no key code.
        // Do nothing.
 +      return false;
      }
      else if( Dali::DALI_KEY_ESCAPE == keyCode )
      {
        // and a character is typed after the type of a upper case latin character.
  
        // Do nothing.
 +      return false;
      }
      else if( ( Dali::DALI_KEY_VOLUME_UP == keyCode ) || ( Dali::DALI_KEY_VOLUME_DOWN == keyCode ) )
      {
        // This branch avoids calling the InsertText() method of the 'else' branch which can delete selected text.
        // Do nothing.
 +      return false;
      }
      else
      {
@@@ -3226,8 -3206,7 +3227,8 @@@ bool Controller::DoRelayout( const Size
                                           charactersToGlyphBuffer,
                                           glyphsPerCharacterBuffer,
                                           totalNumberOfGlyphs,
 -                                         mImpl->mModel->mHorizontalAlignment );
 +                                         mImpl->mModel->mHorizontalAlignment,
 +                                         mImpl->mModel->mLineWrapMode );
  
      // Resize the vector of positions to have the same size than the vector of glyphs.
      Vector<Vector2>& glyphPositions = mImpl->mModel->mVisualModel->mGlyphPositions;
@@@ -3576,17 -3555,27 +3577,17 @@@ void Controller::ShowPlaceholderText(
      const char* text( NULL );
      size_t size( 0 );
  
 -    if( !mImpl->mEventData->mPlaceholderTextActive.empty() || !mImpl->mEventData->mPlaceholderTextInactive.empty() )
 +    // TODO - Switch Placeholder text when changing state
 +    if( ( EventData::INACTIVE != mImpl->mEventData->mState ) &&
 +        ( 0u != mImpl->mEventData->mPlaceholderTextActive.c_str() ) )
      {
 -      if( ( EventData::INACTIVE != mImpl->mEventData->mState ) &&
 -          ( 0u != mImpl->mEventData->mPlaceholderTextActive.c_str() ) )
 -      {
 -        text = mImpl->mEventData->mPlaceholderTextActive.c_str();
 -        size = mImpl->mEventData->mPlaceholderTextActive.size();
 -      }
 -      else
 -      {
 -        text = mImpl->mEventData->mPlaceholderTextInactive.c_str();
 -        size = mImpl->mEventData->mPlaceholderTextInactive.size();
 -      }
 +      text = mImpl->mEventData->mPlaceholderTextActive.c_str();
 +      size = mImpl->mEventData->mPlaceholderTextActive.size();
      }
      else
      {
 -      if( 0u != mImpl->mEventData->mPlaceholderText.c_str() )
 -      {
 -        text = mImpl->mEventData->mPlaceholderText.c_str();
 -        size = mImpl->mEventData->mPlaceholderText.size();
 -      }
 +      text = mImpl->mEventData->mPlaceholderTextInactive.c_str();
 +      size = mImpl->mEventData->mPlaceholderTextInactive.size();
      }
  
      mImpl->mTextUpdateInfo.mCharacterIndex = 0u;