X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fcontroller%2Ftext-controller.cpp;h=f61a0378f94d0d9e4b73251ce7aeb233a135d4b7;hb=f9649c1d7583b0e1af1c91f1f1518323921e6a47;hp=25892667b9402c97e45eec84fc30b1686734119b;hpb=d4938b4b2872ea432f45fcdedbc13e85af0d08df;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/controller/text-controller.cpp b/dali-toolkit/internal/text/controller/text-controller.cpp index 2589266..f61a037 100644 --- a/dali-toolkit/internal/text/controller/text-controller.cpp +++ b/dali-toolkit/internal/text/controller/text-controller.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -45,7 +45,8 @@ namespace Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, true, "LOG_TEXT_CONTROLS"); #endif -const std::string EMPTY_STRING(""); +const char* EMPTY_STRING = ""; +const char* MIME_TYPE_TEXT_PLAIN = "text/plain;charset=utf-8"; template void EnsureCreated(Type*& object) @@ -85,10 +86,15 @@ void EnsureCreated(Type*& object, Arg1 arg1, Arg2 arg2) float GetDpi() { - unsigned int horizontalDpi = 0u; - unsigned int verticalDpi = 0u; - Dali::TextAbstraction::FontClient fontClient = Dali::TextAbstraction::FontClient::Get(); - fontClient.GetDpi(horizontalDpi, verticalDpi); + static uint32_t horizontalDpi = 0u; + static uint32_t verticalDpi = 0u; + + // TODO : How can we know when fontClient DPI changed case? + if(DALI_UNLIKELY(horizontalDpi == 0u)) + { + Dali::TextAbstraction::FontClient fontClient = Dali::TextAbstraction::FontClient::Get(); + fontClient.GetDpi(horizontalDpi, verticalDpi); + } return static_cast(horizontalDpi); } @@ -413,6 +419,11 @@ float Controller::GetTextFitPointSize() const return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFitPointSize : 0.0f; } +void Controller::SetTextFitLineSize(float lineSize) +{ + mImpl->mTextFitLineSize = lineSize; +} + void Controller::SetPlaceholderTextElideEnabled(bool enabled) { PlaceholderHandler::SetPlaceholderTextElideEnabled(*this, enabled); @@ -473,6 +484,11 @@ void Controller::GetText(std::string& text) const mImpl->GetText(text); } +Length Controller::GetNumberOfCharacters() const +{ + return mImpl->GetNumberOfCharacters(); +} + void Controller::SetSpannedText(const Text::Spanned& spannedText) { SpannableHandler::SetSpannedText(*this, spannedText); @@ -522,20 +538,23 @@ void Controller::SetDefaultFontFamily(const std::string& defaultFontFamily) { EnsureCreated(mImpl->mFontDefaults); - mImpl->mFontDefaults->mFontDescription.family = defaultFontFamily; - DALI_LOG_INFO(gLogFilter, Debug::General, "Controller::SetDefaultFontFamily %s\n", defaultFontFamily.c_str()); - mImpl->mFontDefaults->familyDefined = !defaultFontFamily.empty(); + if(mImpl->mFontDefaults->mFontDescription.family != defaultFontFamily) + { + mImpl->mFontDefaults->mFontDescription.family = defaultFontFamily; + DALI_LOG_INFO(gLogFilter, Debug::General, "Controller::SetDefaultFontFamily %s\n", defaultFontFamily.c_str()); + mImpl->mFontDefaults->familyDefined = !defaultFontFamily.empty(); - // Update the cursor position if it's in editing mode - UpdateCursorPosition(mImpl->mEventData); + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); - // Clear the font-specific data - mImpl->ClearFontData(); + // Clear the font-specific data + mImpl->ClearFontData(); - mImpl->RequestRelayout(); + mImpl->RequestRelayout(); + } } -const std::string& Controller::GetDefaultFontFamily() const +std::string Controller::GetDefaultFontFamily() const { return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFontDescription.family : EMPTY_STRING; } @@ -545,7 +564,7 @@ void Controller::SetPlaceholderFontFamily(const std::string& placeholderTextFont PlaceholderHandler::SetPlaceholderFontFamily(*this, placeholderTextFontFamily); } -const std::string& Controller::GetPlaceholderFontFamily() const +std::string Controller::GetPlaceholderFontFamily() const { return PlaceholderHandler::GetPlaceholderFontFamily(*this); } @@ -942,7 +961,7 @@ void Controller::SetDefaultEmbossProperties(const std::string& embossProperties) mImpl->mEmbossDefaults->properties = embossProperties; } -const std::string& Controller::GetDefaultEmbossProperties() const +std::string Controller::GetDefaultEmbossProperties() const { return mImpl->mEmbossDefaults ? mImpl->mEmbossDefaults->properties : EMPTY_STRING; } @@ -953,7 +972,7 @@ void Controller::SetDefaultOutlineProperties(const std::string& outlinePropertie mImpl->mOutlineDefaults->properties = outlineProperties; } -const std::string& Controller::GetDefaultOutlineProperties() const +std::string Controller::GetDefaultOutlineProperties() const { return mImpl->mOutlineDefaults ? mImpl->mOutlineDefaults->properties : EMPTY_STRING; } @@ -1003,7 +1022,7 @@ void Controller::SetInputFontFamily(const std::string& fontFamily) InputFontHandler::SetInputFontFamily(*this, fontFamily); } -const std::string& Controller::GetInputFontFamily() const +std::string Controller::GetInputFontFamily() const { return InputFontHandler::GetInputFontFamily(*this); } @@ -1078,7 +1097,7 @@ void Controller::SetInputShadowProperties(const std::string& shadowProperties) InputProperties::SetInputShadowProperties(*this, shadowProperties); } -const std::string& Controller::GetInputShadowProperties() const +std::string Controller::GetInputShadowProperties() const { return InputProperties::GetInputShadowProperties(*this); } @@ -1088,7 +1107,7 @@ void Controller::SetInputUnderlineProperties(const std::string& underlinePropert InputProperties::SetInputUnderlineProperties(*this, underlineProperties); } -const std::string& Controller::GetInputUnderlineProperties() const +std::string Controller::GetInputUnderlineProperties() const { return InputProperties::GetInputUnderlineProperties(*this); } @@ -1098,7 +1117,7 @@ void Controller::SetInputEmbossProperties(const std::string& embossProperties) InputProperties::SetInputEmbossProperties(*this, embossProperties); } -const std::string& Controller::GetInputEmbossProperties() const +std::string Controller::GetInputEmbossProperties() const { return InputProperties::GetInputEmbossProperties(*this); } @@ -1108,7 +1127,7 @@ void Controller::SetInputOutlineProperties(const std::string& outlineProperties) InputProperties::SetInputOutlineProperties(*this, outlineProperties); } -const std::string& Controller::GetInputOutlineProperties() const +std::string Controller::GetInputOutlineProperties() const { return InputProperties::GetInputOutlineProperties(*this); } @@ -1233,7 +1252,7 @@ void Controller::SetInputStrikethroughProperties(const std::string& strikethroug } } -const std::string& Controller::GetInputStrikethroughProperties() const +std::string Controller::GetInputStrikethroughProperties() const { return (NULL != mImpl->mEventData) ? mImpl->mEventData->mInputStyle.strikethroughProperties : EMPTY_STRING; } @@ -1284,7 +1303,7 @@ int Controller::GetLineCount(float width) return mImpl->mModel->GetNumberOfLines(); } -const ModelInterface* const Controller::GetTextModel() const +const ModelInterface* Controller::GetTextModel() const { return mImpl->mModel.Get(); } @@ -1431,6 +1450,11 @@ Rect Controller::GetCharacterBoundingRectangle(const uint32_t charIndex) return GetCharacterBoundingRect(mImpl->mModel, charIndex); } +int Controller::GetCharacterIndexAtPosition(float visualX, float visualY) +{ + return GetCharIndexAtPosition(mImpl->mModel, visualX, visualY); +} + Rect<> Controller::GetTextBoundingRectangle(CharacterIndex startIndex, CharacterIndex endIndex) { Vector sizeList; @@ -1590,19 +1614,40 @@ string Controller::CutText() return mImpl->CutText(); } -void Controller::PasteText() +void Controller::PasteClipboardItemEvent(uint32_t id, const char* mimeType, const char* data) { - mImpl->RequestGetTextFromClipboard(); // Request clipboard service to retrieve an item + // Upon receiving the data, it is important to disconnect the signal + // to avoid potential unintended pasting caused by subsequent requests. + mImpl->mClipboard.DataReceivedSignal().Disconnect(this, &Controller::PasteClipboardItemEvent); + + // If the id is 0u, it is an invalid response. + // text-controller allows only plain text type. + if(id != 0u && !strncmp(mimeType, MIME_TYPE_TEXT_PLAIN, strlen(MIME_TYPE_TEXT_PLAIN))) + { + EventHandler::PasteClipboardItemEvent(*this, data); + } } -InputMethodContext::CallbackData Controller::OnInputMethodContextEvent(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent) +void Controller::PasteText() { - return EventHandler::OnInputMethodContextEvent(*this, inputMethodContext, inputMethodContextEvent); + if(mImpl->EnsureClipboardCreated()) + { + // Connect the signal before calling GetData() of the clipboard. + mImpl->mClipboard.DataReceivedSignal().Connect(this, &Controller::PasteClipboardItemEvent); + + // Request clipboard service to retrieve an item. + uint id = mImpl->mClipboard.GetData(MIME_TYPE_TEXT_PLAIN); + if(id == 0u) + { + // If the return id is 0u, the signal is not emitted, we must disconnect signal here. + mImpl->mClipboard.DataReceivedSignal().Disconnect(this, &Controller::PasteClipboardItemEvent); + } + } } -void Controller::PasteClipboardItemEvent() +InputMethodContext::CallbackData Controller::OnInputMethodContextEvent(InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent) { - EventHandler::PasteClipboardItemEvent(*this); + return EventHandler::OnInputMethodContextEvent(*this, inputMethodContext, inputMethodContextEvent); } void Controller::GetTargetSize(Vector2& targetSize) @@ -1727,7 +1772,6 @@ Controller::Controller(ControlInterface* controlInterface, Controller::~Controller() { - delete mImpl; } } // namespace Dali::Toolkit::Text