X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.cpp;h=7875e5c6ae97d2713a759463595d5fedb615bac5;hb=723acb540264b5f3bfc98ec3284891aa58d765c4;hp=a0daf14259dc0a03e3a1d2ae8cbb71831f0ce613;hpb=eedb83ac31c3728a311dbe462bedc660f54094d8;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index a0daf14..7875e5c 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -48,6 +48,7 @@ const float MAX_FLOAT = std::numeric_limits::max(); 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"; @@ -391,6 +392,34 @@ Layout::VerticalAlignment Controller::GetVerticalAlignment() const 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( 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; @@ -531,22 +560,6 @@ void Controller::GetText( std::string& text ) const } } -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 ) @@ -569,15 +582,6 @@ void Controller::SetPlaceholderText( PlaceholderType type, const std::string& te } } -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 ) @@ -682,7 +686,12 @@ void Controller::SetDefaultFontWeight( FontWeight weight ) bool Controller::IsDefaultFontWeightDefined() const { - return mImpl->mFontDefaults->weightDefined; + if( NULL != mImpl->mFontDefaults ) + { + return mImpl->mFontDefaults->weightDefined; + } + + return false; } FontWeight Controller::GetDefaultFontWeight() const @@ -748,7 +757,12 @@ void Controller::SetDefaultFontWidth( FontWidth width ) bool Controller::IsDefaultFontWidthDefined() const { - return mImpl->mFontDefaults->widthDefined; + if( NULL != mImpl->mFontDefaults ) + { + return mImpl->mFontDefaults->widthDefined; + } + + return false; } FontWidth Controller::GetDefaultFontWidth() const @@ -814,7 +828,11 @@ void Controller::SetDefaultFontSlant( FontSlant slant ) bool Controller::IsDefaultFontSlantDefined() const { - return mImpl->mFontDefaults->slantDefined; + if( NULL != mImpl->mFontDefaults ) + { + return mImpl->mFontDefaults->slantDefined; + } + return false; } FontSlant Controller::GetDefaultFontSlant() const @@ -1793,7 +1811,8 @@ float Controller::GetHeightForWidth( float width ) 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( CONVERT_TO_UTF32 | @@ -1918,7 +1937,13 @@ void Controller::SetPlaceholderProperty( const Property::Map& map ) { 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 ) { @@ -1964,7 +1989,15 @@ void Controller::GetPlaceholderProperty( Property::Map& map ) { 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(); @@ -2201,14 +2234,12 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) { // In some platforms arrive key events with no key code. // Do nothing. + return false; } - else if( Dali::DALI_KEY_ESCAPE == keyCode ) + else if( Dali::DALI_KEY_ESCAPE == keyCode || Dali::DALI_KEY_BACK == keyCode ) { - // Escape key is a special case which causes focus loss - KeyboardFocusLostEvent(); - - // Will request for relayout. - relayoutNeeded = true; + // Do nothing + return false; } else if( ( Dali::DALI_KEY_CURSOR_LEFT == keyCode ) || ( Dali::DALI_KEY_CURSOR_RIGHT == keyCode ) || @@ -2270,11 +2301,13 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) // 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 { @@ -3205,7 +3238,8 @@ bool Controller::DoRelayout( const Size& 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& glyphPositions = mImpl->mModel->mVisualModel->mGlyphPositions; @@ -3554,27 +3588,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; @@ -3670,6 +3694,11 @@ void Controller::ResetScrollPosition() } } +bool Controller::ShouldClearFocusOnEscape() const +{ + return mImpl->mShouldClearFocusOnEscape; +} + // private : Private contructors & copy operator. Controller::Controller()