X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.cpp;h=b18767b2f29509452782274855211821910b7a86;hb=b5741d8a1290e98c826aae62dc7fa5fcc4896ee5;hp=65807907ecf5721ccaa70c3c53c2ea35ba469e15;hpb=04949a42de50ce2ab83b1134dc2a7a989834a0c1;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 6580790..b18767b 100755 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2018 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -476,6 +476,16 @@ bool Controller::IsShiftSelectionEnabled() const return mImpl->mEventData->mShiftSelectionFlag; } +void Controller::SetGrabHandleEnabled( bool enabled ) +{ + mImpl->mEventData->mGrabHandleEnabled = enabled; +} + +bool Controller::IsGrabHandleEnabled() const +{ + return mImpl->mEventData->mGrabHandleEnabled; +} + // public : Update void Controller::SetText( const std::string& text ) @@ -1207,6 +1217,30 @@ unsigned int Controller::GetOutlineWidth() const return mImpl->mModel->mVisualModel->GetOutlineWidth(); } +void Controller::SetBackgroundColor( const Vector4& color ) +{ + mImpl->mModel->mVisualModel->SetBackgroundColor( color ); + + mImpl->RequestRelayout(); +} + +const Vector4& Controller::GetBackgroundColor() const +{ + return mImpl->mModel->mVisualModel->GetBackgroundColor(); +} + +void Controller::SetBackgroundEnabled( bool enabled ) +{ + mImpl->mModel->mVisualModel->SetBackgroundEnabled( enabled ); + + mImpl->RequestRelayout(); +} + +bool Controller::IsBackgroundEnabled() const +{ + return mImpl->mModel->mVisualModel->IsBackgroundEnabled(); +} + void Controller::SetDefaultEmbossProperties( const std::string& embossProperties ) { if( NULL == mImpl->mEmbossDefaults ) @@ -2135,7 +2169,8 @@ Toolkit::DevelText::TextDirection::Type Controller::GetTextDirection() GET_LINE_BREAKS | GET_WORD_BREAKS | BIDI_INFO | - SHAPE_TEXT ); + SHAPE_TEXT | + GET_GLYPH_METRICS ); // Set the update info to relayout the whole text. mImpl->mTextUpdateInfo.mParagraphCharacterIndex = 0u; @@ -2432,13 +2467,24 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) 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) || + if( ( Dali::DALI_KEY_CURSOR_LEFT == keyCode && 0 == cursorPosition && !keyEvent.IsShiftModifier() ) || + ( Dali::DALI_KEY_CURSOR_RIGHT == keyCode && numberOfCharacters == cursorPosition && !keyEvent.IsShiftModifier() ) || ( 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 ) ) { + // Release the active highlight. + if( mImpl->mEventData->mState == EventData::SELECTING ) + { + mImpl->ChangeState( EventData::EDITING ); + + // Update selection position. + mImpl->mEventData->mLeftSelectionPosition = mImpl->mEventData->mPrimaryCursorPosition; + mImpl->mEventData->mRightSelectionPosition = mImpl->mEventData->mPrimaryCursorPosition; + mImpl->mEventData->mUpdateCursorPosition = true; + mImpl->RequestRelayout(); + } return false; } @@ -3420,6 +3466,22 @@ bool Controller::DoRelayout( const Size& size, const CharacterIndex lastIndex = startIndex + ( ( requestedNumberOfCharacters > 0u ) ? requestedNumberOfCharacters - 1u : 0u ); const GlyphIndex startGlyphIndex = mImpl->mTextUpdateInfo.mStartGlyphIndex; + + // Make sure the index is not out of bound + if ( charactersToGlyph.Count() != glyphsPerCharacter.Count() || + requestedNumberOfCharacters > charactersToGlyph.Count() || + ( lastIndex >= charactersToGlyph.Count() && charactersToGlyph.Count() > 0u ) ) + { + std::string currentText; + GetText( currentText ); + + DALI_LOG_ERROR( "Controller::DoRelayout: Attempting to access invalid buffer\n" ); + DALI_LOG_ERROR( "Current text is: %s\n", currentText.c_str() ); + DALI_LOG_ERROR( "startIndex: %u, lastIndex: %u, requestedNumberOfCharacters: %u, charactersToGlyph.Count = %lu, glyphsPerCharacter.Count = %lu\n", startIndex, lastIndex, requestedNumberOfCharacters, charactersToGlyph.Count(), glyphsPerCharacter.Count()); + + return false; + } + const Length numberOfGlyphs = ( requestedNumberOfCharacters > 0u ) ? *( charactersToGlyphBuffer + lastIndex ) + *( glyphsPerCharacterBuffer + lastIndex ) - startGlyphIndex : 0u; const Length totalNumberOfGlyphs = mImpl->mModel->mVisualModel->mGlyphs.Count();