X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller-text-updater.cpp;h=0bcb97f558f46e676e98f1cb260219bd0538a866;hp=36a2133eccf3ab8674e0cf0b0299fce3334530e8;hb=7c13cc0c065ae22e7ad0deaea4f56730ff050c5c;hpb=9161d9828d1a5bb3c7eaf83002863de84b23b751 diff --git a/dali-toolkit/internal/text/text-controller-text-updater.cpp b/dali-toolkit/internal/text/text-controller-text-updater.cpp index 36a2133..0bcb97f 100644 --- a/dali-toolkit/internal/text/text-controller-text-updater.cpp +++ b/dali-toolkit/internal/text/text-controller-text-updater.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include namespace @@ -55,7 +56,7 @@ void Controller::TextUpdater::SetText(Controller& controller, const std::string& ResetText(controller); // Remove the style. - controller.ClearStyleData(); + impl.ClearStyleData(); CharacterIndex lastCursorIndex = 0u; @@ -69,6 +70,11 @@ void Controller::TextUpdater::SetText(Controller& controller, const std::string& (EventData::EDITING_WITH_GRAB_HANDLE == eventData->mState) || (EventData::EDITING_WITH_PASTE_POPUP == eventData->mState)) { + if((impl.mSelectableControlInterface != nullptr) && (EventData::SELECTING == eventData->mState)) + { + impl.mSelectableControlInterface->SelectionChanged(eventData->mLeftSelectionPosition, eventData->mRightSelectionPosition, eventData->mPrimaryCursorPosition, eventData->mPrimaryCursorPosition); + } + impl.ChangeState(EventData::EDITING); } } @@ -83,7 +89,8 @@ void Controller::TextUpdater::SetText(Controller& controller, const std::string& logicalModel->mFontDescriptionRuns, logicalModel->mEmbeddedItems, logicalModel->mAnchors, - logicalModel->mUnderlinedCharacterRuns); + logicalModel->mUnderlinedCharacterRuns, + logicalModel->mBackgroundColorRuns); Length textSize = 0u; const uint8_t* utf8 = NULL; @@ -135,14 +142,16 @@ void Controller::TextUpdater::SetText(Controller& controller, const std::string& } else { - controller.ShowPlaceholderText(); + PlaceholderHandler::ShowPlaceholderText(impl); } + unsigned int oldCursorPos = (nullptr != eventData ? eventData->mPrimaryCursorPosition : 0); + // Resets the cursor position. controller.ResetCursorPosition(lastCursorIndex); // Scrolls the text to make the cursor visible. - controller.ResetScrollPosition(); + impl.ResetScrollPosition(); impl.RequestRelayout(); @@ -155,6 +164,7 @@ void Controller::TextUpdater::SetText(Controller& controller, const std::string& // Do this last since it provides callbacks into application code. if(NULL != impl.mEditableControlInterface) { + impl.mEditableControlInterface->CursorPositionChanged(oldCursorPos, lastCursorIndex); impl.mEditableControlInterface->TextChanged(true); } } @@ -171,9 +181,10 @@ void Controller::TextUpdater::InsertText(Controller& controller, const std::stri return; } - bool removedPrevious = false; - bool removedSelected = false; - bool maxLengthReached = false; + bool removedPrevious = false; + bool removedSelected = false; + bool maxLengthReached = false; + unsigned int oldCursorPos = eventData->mPrimaryCursorPosition; DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Controller::InsertText %p %s (%s) mPrimaryCursorPosition %d mPreEditFlag %d mPreEditStartPosition %d mPreEditLength %d\n", &controller, text.c_str(), (COMMIT == type ? "COMMIT" : "PRE_EDIT"), eventData->mPrimaryCursorPosition, eventData->mPreEditFlag, eventData->mPreEditStartPosition, eventData->mPreEditLength); @@ -395,7 +406,7 @@ void Controller::TextUpdater::InsertText(Controller& controller, const std::stri impl.IsPlaceholderAvailable()) { // Show place-holder if empty after removing the pre-edit text - controller.ShowPlaceholderText(); + PlaceholderHandler::ShowPlaceholderText(impl); eventData->mUpdateCursorPosition = true; impl.ClearPreEditFlag(); } @@ -417,6 +428,11 @@ void Controller::TextUpdater::InsertText(Controller& controller, const std::stri } } + if(nullptr != impl.mEditableControlInterface) + { + impl.mEditableControlInterface->CursorPositionChanged(oldCursorPos, eventData->mPrimaryCursorPosition); + } + if(maxLengthReached) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "MaxLengthReached (%d)\n", logicalModel->mText.Count()); @@ -560,6 +576,11 @@ bool Controller::TextUpdater::RemoveText( RemoveTextAnchor(controller, cursorOffset, numberOfCharacters, previousCursorIndex); } + if(nullptr != impl.mEditableControlInterface) + { + impl.mEditableControlInterface->CursorPositionChanged(previousCursorIndex, cursorIndex); + } + // Cursor position retreat previousCursorIndex = cursorIndex; @@ -587,6 +608,9 @@ bool Controller::TextUpdater::RemoveSelectedText(Controller& controller) if(EventData::SELECTING == impl.mEventData->mState) { std::string removedString; + uint32_t oldSelStart = impl.mEventData->mLeftSelectionPosition; + uint32_t oldSelEnd = impl.mEventData->mRightSelectionPosition; + impl.RetrieveSelection(removedString, true); if(!removedString.empty()) @@ -603,6 +627,11 @@ bool Controller::TextUpdater::RemoveSelectedText(Controller& controller) RemoveTextAnchor(controller, cursorOffset, numberOfCharacters, previousCursorIndex); } + + if(impl.mSelectableControlInterface != nullptr) + { + impl.mSelectableControlInterface->SelectionChanged(oldSelStart, oldSelEnd, impl.mEventData->mPrimaryCursorPosition, impl.mEventData->mPrimaryCursorPosition); + } } }