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.cpp;h=30c6e04bccbeeffa7bf5faa4aff5107dfd835593;hp=7e0410df8746144148b2900ce851094dd256e974;hb=2de247c304a6f70fa87f465eb1b5417efd6e5f6b;hpb=91a31a5bdf35ebea5818c3809467b6fb74a547a2 diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 7e0410d..30c6e04 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -1219,12 +1219,31 @@ const std::string& Controller::GetDefaultOutlineProperties() const return EMPTY_STRING; } +void Controller::RelayoutForNewLineSize() +{ + // relayout all characters + mImpl->mTextUpdateInfo.mCharacterIndex = 0; + mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters; + mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl->mModel->mLogicalModel->mText.Count(); + mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | LAYOUT); + + //remove selection + if((mImpl->mEventData != nullptr) && (mImpl->mEventData->mState == EventData::SELECTING)) + { + mImpl->ChangeState(EventData::EDITING); + } + + mImpl->RequestRelayout(); +} + bool Controller::SetDefaultLineSpacing(float lineSpacing) { if(std::fabs(lineSpacing - mImpl->mLayoutEngine.GetDefaultLineSpacing()) > Math::MACHINE_EPSILON_1000) { mImpl->mLayoutEngine.SetDefaultLineSpacing(lineSpacing); mImpl->mRecalculateNaturalSize = true; + + RelayoutForNewLineSize(); return true; } return false; @@ -1241,6 +1260,8 @@ bool Controller::SetDefaultLineSize(float lineSize) { mImpl->mLayoutEngine.SetDefaultLineSize(lineSize); mImpl->mRecalculateNaturalSize = true; + + RelayoutForNewLineSize(); return true; } return false; @@ -1822,6 +1843,11 @@ void Controller::SelectEvent(float x, float y, SelectionType selectType) EventHandler::SelectEvent(*this, x, y, selectType); } +void Controller::SelectEvent(const uint32_t start, const uint32_t end, SelectionType selectType) +{ + EventHandler::SelectEvent(*this, start, end, selectType); +} + void Controller::SetTextSelectionRange(const uint32_t* start, const uint32_t* end) { if(mImpl->mEventData) @@ -1845,7 +1871,7 @@ CharacterIndex Controller::GetPrimaryCursorPosition() const return mImpl->GetPrimaryCursorPosition(); } -bool Controller::SetPrimaryCursorPosition(CharacterIndex index) +bool Controller::SetPrimaryCursorPosition(CharacterIndex index, bool focused) { if(mImpl->mEventData) { @@ -1853,7 +1879,7 @@ bool Controller::SetPrimaryCursorPosition(CharacterIndex index) mImpl->mEventData->mIsLeftHandleSelected = true; mImpl->mEventData->mIsRightHandleSelected = true; mImpl->mEventData->mCheckScrollAmount = true; - if(mImpl->SetPrimaryCursorPosition(index)) + if(mImpl->SetPrimaryCursorPosition(index, focused) && focused) { KeyboardFocusGainEvent(); return true; @@ -1872,6 +1898,11 @@ void Controller::SelectNone() SelectEvent(0.f, 0.f, SelectionType::NONE); } +void Controller::SelectText(const uint32_t start, const uint32_t end) +{ + SelectEvent(start, end, SelectionType::RANGE); +} + string Controller::GetSelectedText() const { string text; @@ -1882,6 +1913,59 @@ string Controller::GetSelectedText() const return text; } +string Controller::CopyText() +{ + string text; + mImpl->RetrieveSelection(text, false); + mImpl->SendSelectionToClipboard(false); // Text not modified + + mImpl->mEventData->mUpdateCursorPosition = true; + + mImpl->RequestRelayout(); // Cursor, Handles, Selection Highlight, Popup + + return text; +} + +string Controller::CutText() +{ + string text; + mImpl->RetrieveSelection(text, false); + + if(!IsEditable()) + { + return ""; + } + + mImpl->SendSelectionToClipboard(true); // Synchronous call to modify text + mImpl->mOperationsPending = ALL_OPERATIONS; + + if((0u != mImpl->mModel->mLogicalModel->mText.Count()) || + !mImpl->IsPlaceholderAvailable()) + { + mImpl->QueueModifyEvent(ModifyEvent::TEXT_DELETED); + } + else + { + ShowPlaceholderText(); + } + + mImpl->mEventData->mUpdateCursorPosition = true; + mImpl->mEventData->mScrollAfterDelete = true; + + mImpl->RequestRelayout(); + + if(nullptr != mImpl->mEditableControlInterface) + { + mImpl->mEditableControlInterface->TextChanged(true); + } + return text; +} + +void Controller::PasteText() +{ + mImpl->RequestGetTextFromClipboard(); // Request clipboard service to retrieve an item +} + InputMethodContext::CallbackData Controller::OnInputMethodContextEvent(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent) { return EventHandler::OnInputMethodContextEvent(*this, inputMethodContext, inputMethodContextEvent);