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=4ec306bff81425d499d3dea17de27447ef7d9836;hp=d78f275ed855b2167312cec91bbd76a3b2b6868a;hb=c039ebb7a115f5516aa792c1aa3bd6370e61acfd;hpb=b039ecfd6a5a2ab3529b8ea36c23fde8b2e847f5 diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index d78f275..4ec306b 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -46,48 +47,76 @@ constexpr float MAX_FLOAT = std::numeric_limits::max(); const std::string EMPTY_STRING(""); -int ConvertPixelToPint(float pixel) +template +void EnsureCreated(Type*& object) { - unsigned int horizontalDpi = 0u; - unsigned int verticalDpi = 0u; - Dali::TextAbstraction::FontClient fontClient = Dali::TextAbstraction::FontClient::Get(); - fontClient.GetDpi(horizontalDpi, verticalDpi); - - return (pixel * 72.f) / static_cast(horizontalDpi); + if(!object) + { + object = new Type(); + } } -} // namespace +template +void EnsureCreated(std::unique_ptr& object) +{ + if(!object) + { + object = std::unique_ptr(new Type()); + } +} -namespace Dali +template +void EnsureCreated(Type*& object, Arg1 arg1) { -namespace Toolkit + if(!object) + { + object = new Type(arg1); + } +} + +template +void EnsureCreated(Type*& object, Arg1 arg1, Arg2 arg2) { -namespace Text + if(!object) + { + object = new Type(arg1, arg2); + } +} + +float GetDpi() { -// public : Constructor. + unsigned int horizontalDpi = 0u; + unsigned int verticalDpi = 0u; + Dali::TextAbstraction::FontClient fontClient = Dali::TextAbstraction::FontClient::Get(); + fontClient.GetDpi(horizontalDpi, verticalDpi); + return static_cast(horizontalDpi); +} -ControllerPtr Controller::New() +float ConvertPixelToPoint(float pixel) { - return ControllerPtr(new Controller()); + return pixel * 72.0f / GetDpi(); } -ControllerPtr Controller::New(ControlInterface* controlInterface) +float ConvertPointToPixel(float point) { - return ControllerPtr(new Controller(controlInterface)); + // Pixel size = Point size * DPI / 72.f + return point * GetDpi() / 72.0f; } -ControllerPtr Controller::New(ControlInterface* controlInterface, - EditableControlInterface* editableControlInterface, - SelectableControlInterface* selectableControlInterface, - AnchorControlInterface* anchorControlInterface) +void UpdateCursorPosition(Dali::Toolkit::Text::EventData* eventData) { - return ControllerPtr(new Controller(controlInterface, - editableControlInterface, - selectableControlInterface, - anchorControlInterface)); + if(eventData && Dali::Toolkit::Text::EventData::IsEditingState(eventData->mState)) + { + // Update the cursor position if it's in editing mode + eventData->mDecoratorUpdated = true; + eventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font size is updated. + } } -// public : Configure the text controller. +} // namespace + +namespace Dali::Toolkit::Text +{ void Controller::EnableTextInput(DecoratorPtr decorator, InputMethodContext& inputMethodContext) { @@ -100,10 +129,7 @@ void Controller::EnableTextInput(DecoratorPtr decorator, InputMethodContext& inp return; } - if(NULL == mImpl->mEventData) - { - mImpl->mEventData = new EventData(decorator, inputMethodContext); - } + EnsureCreated(mImpl->mEventData, decorator, inputMethodContext); } void Controller::SetGlyphType(TextAbstraction::GlyphType glyphType) @@ -112,7 +138,7 @@ void Controller::SetGlyphType(TextAbstraction::GlyphType glyphType) mImpl->mMetrics->SetGlyphType(glyphType); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } @@ -136,46 +162,20 @@ bool Controller::IsMarkupProcessorEnabled() const return mImpl->mMarkupProcessorEnabled; } +bool Controller::HasAnchors() const +{ + return (mImpl->mMarkupProcessorEnabled && mImpl->mModel->mLogicalModel->mAnchors.Count() && mImpl->IsShowingRealText()); +} + void Controller::SetAutoScrollEnabled(bool enable) { DALI_LOG_INFO(gLogFilter, Debug::General, "Controller::SetAutoScrollEnabled[%s] SingleBox[%s]-> [%p]\n", (enable) ? "true" : "false", (mImpl->mLayoutEngine.GetLayout() == Layout::Engine::SINGLE_LINE_BOX) ? "true" : "false", this); - - if(mImpl->mLayoutEngine.GetLayout() == Layout::Engine::SINGLE_LINE_BOX) - { - if(enable) - { - DALI_LOG_INFO(gLogFilter, Debug::General, "Controller::SetAutoScrollEnabled for SINGLE_LINE_BOX\n"); - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | - LAYOUT | - ALIGN | - UPDATE_LAYOUT_SIZE | - UPDATE_DIRECTION | - REORDER); - } - else - { - DALI_LOG_INFO(gLogFilter, Debug::General, "Controller::SetAutoScrollEnabled Disabling autoscroll\n"); - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | - LAYOUT | - ALIGN | - UPDATE_LAYOUT_SIZE | - REORDER); - } - - mImpl->mIsAutoScrollEnabled = enable; - mImpl->RequestRelayout(); - } - else - { - DALI_LOG_WARNING("Attempted AutoScrolling on a non SINGLE_LINE_BOX, request ignored\n"); - mImpl->mIsAutoScrollEnabled = false; - } + mImpl->SetAutoScrollEnabled(enable); } bool Controller::IsAutoScrollEnabled() const { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Controller::IsAutoScrollEnabled[%s]\n", mImpl->mIsAutoScrollEnabled ? "true" : "false"); - return mImpl->mIsAutoScrollEnabled; } @@ -187,62 +187,42 @@ CharacterDirection Controller::GetAutoScrollDirection() const float Controller::GetAutoScrollLineAlignment() const { float offset = 0.f; - - if(mImpl->mModel->mVisualModel && - (0u != mImpl->mModel->mVisualModel->mLines.Count())) + if(mImpl->mModel->mVisualModel && (0u != mImpl->mModel->mVisualModel->mLines.Count())) { offset = (*mImpl->mModel->mVisualModel->mLines.Begin()).alignmentOffset; } - return offset; } void Controller::SetHorizontalScrollEnabled(bool enable) { - if((NULL != mImpl->mEventData) && - mImpl->mEventData->mDecorator) + if(mImpl->mEventData && mImpl->mEventData->mDecorator) { mImpl->mEventData->mDecorator->SetHorizontalScrollEnabled(enable); } } + bool Controller::IsHorizontalScrollEnabled() const { - if((NULL != mImpl->mEventData) && - mImpl->mEventData->mDecorator) - { - return mImpl->mEventData->mDecorator->IsHorizontalScrollEnabled(); - } - - return false; + return mImpl->mEventData && mImpl->mEventData->mDecorator && mImpl->mEventData->mDecorator->IsHorizontalScrollEnabled(); } void Controller::SetVerticalScrollEnabled(bool enable) { - if((NULL != mImpl->mEventData) && - mImpl->mEventData->mDecorator) + if(mImpl->mEventData && mImpl->mEventData->mDecorator) { - if(mImpl->mEventData->mDecorator) - { - mImpl->mEventData->mDecorator->SetVerticalScrollEnabled(enable); - } + mImpl->mEventData->mDecorator->SetVerticalScrollEnabled(enable); } } bool Controller::IsVerticalScrollEnabled() const { - if((NULL != mImpl->mEventData) && - mImpl->mEventData->mDecorator) - { - return mImpl->mEventData->mDecorator->IsVerticalScrollEnabled(); - } - - return false; + return mImpl->mEventData && mImpl->mEventData->mDecorator && mImpl->mEventData->mDecorator->IsVerticalScrollEnabled(); } void Controller::SetSmoothHandlePanEnabled(bool enable) { - if((NULL != mImpl->mEventData) && - mImpl->mEventData->mDecorator) + if(mImpl->mEventData && mImpl->mEventData->mDecorator) { mImpl->mEventData->mDecorator->SetSmoothHandlePanEnabled(enable); } @@ -250,13 +230,7 @@ void Controller::SetSmoothHandlePanEnabled(bool enable) bool Controller::IsSmoothHandlePanEnabled() const { - if((NULL != mImpl->mEventData) && - mImpl->mEventData->mDecorator) - { - return mImpl->mEventData->mDecorator->IsSmoothHandlePanEnabled(); - } - - return false; + return mImpl->mEventData && mImpl->mEventData->mDecorator && mImpl->mEventData->mDecorator->IsSmoothHandlePanEnabled(); } void Controller::SetMaximumNumberOfCharacters(Length maxCharacters) @@ -271,53 +245,17 @@ int Controller::GetMaximumNumberOfCharacters() void Controller::SetEnableCursorBlink(bool enable) { - DALI_ASSERT_DEBUG(NULL != mImpl->mEventData && "TextInput disabled"); - - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mCursorBlinkEnabled = enable; - - if(!enable && - mImpl->mEventData->mDecorator) - { - mImpl->mEventData->mDecorator->StopCursorBlink(); - } - } + mImpl->SetEnableCursorBlink(enable); } bool Controller::GetEnableCursorBlink() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mCursorBlinkEnabled; - } - - return false; + return mImpl->mEventData && mImpl->mEventData->mCursorBlinkEnabled; } void Controller::SetMultiLineEnabled(bool enable) { - const Layout::Engine::Type layout = enable ? Layout::Engine::MULTI_LINE_BOX : Layout::Engine::SINGLE_LINE_BOX; - - if(layout != mImpl->mLayoutEngine.GetLayout()) - { - // Set the layout type. - mImpl->mLayoutEngine.SetLayout(layout); - - // Set the flags to redo the layout operations - const OperationsMask layoutOperations = static_cast(LAYOUT | - UPDATE_LAYOUT_SIZE | - ALIGN | - REORDER); - - mImpl->mTextUpdateInfo.mFullRelayoutNeeded = true; - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | layoutOperations); - - // Need to recalculate natural size - mImpl->mRecalculateNaturalSize = true; - - mImpl->RequestRelayout(); - } + mImpl->SetMultiLineEnabled(enable); } bool Controller::IsMultiLineEnabled() const @@ -327,28 +265,7 @@ bool Controller::IsMultiLineEnabled() const void Controller::SetHorizontalAlignment(Text::HorizontalAlignment::Type alignment) { - if(alignment != mImpl->mModel->mHorizontalAlignment) - { - // Set the alignment. - mImpl->mModel->mHorizontalAlignment = alignment; - - // Set the flag to redo the alignment operation. - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | ALIGN); - - if(mImpl->mEventData) - { - mImpl->mEventData->mUpdateAlignment = true; - - // Update the cursor if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->ChangeState(EventData::EDITING); - mImpl->mEventData->mUpdateCursorPosition = true; - } - } - - mImpl->RequestRelayout(); - } + mImpl->SetHorizontalAlignment(alignment); } Text::HorizontalAlignment::Type Controller::GetHorizontalAlignment() const @@ -358,15 +275,7 @@ Text::HorizontalAlignment::Type Controller::GetHorizontalAlignment() const void Controller::SetVerticalAlignment(VerticalAlignment::Type alignment) { - if(alignment != mImpl->mModel->mVerticalAlignment) - { - // Set the alignment. - mImpl->mModel->mVerticalAlignment = alignment; - - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | ALIGN); - - mImpl->RequestRelayout(); - } + mImpl->SetVerticalAlignment(alignment); } VerticalAlignment::Type Controller::GetVerticalAlignment() const @@ -424,31 +333,7 @@ bool Controller::IsShowingRealText() const void Controller::SetLineWrapMode(Text::LineWrap::Mode lineWrapMode) { - if(lineWrapMode != mImpl->mModel->mLineWrapMode) - { - // Update Text layout for applying wrap mode - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | - ALIGN | - LAYOUT | - UPDATE_LAYOUT_SIZE | - REORDER); - - if((mImpl->mModel->mLineWrapMode == (Text::LineWrap::Mode)DevelText::LineWrap::HYPHENATION) || (lineWrapMode == (Text::LineWrap::Mode)DevelText::LineWrap::HYPHENATION) || - (mImpl->mModel->mLineWrapMode == (Text::LineWrap::Mode)DevelText::LineWrap::MIXED) || (lineWrapMode == (Text::LineWrap::Mode)DevelText::LineWrap::MIXED)) // hyphen is treated as line break - { - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | GET_LINE_BREAKS); - } - - // Set the text wrap mode. - mImpl->mModel->mLineWrapMode = lineWrapMode; - - mImpl->mTextUpdateInfo.mCharacterIndex = 0u; - mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters; - mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl->mModel->mLogicalModel->mText.Count(); - - // Request relayout - mImpl->RequestRelayout(); - } + mImpl->SetLineWrapMode(lineWrapMode); } Text::LineWrap::Mode Controller::GetLineWrapMode() const @@ -459,6 +344,7 @@ Text::LineWrap::Mode Controller::GetLineWrapMode() const void Controller::SetTextElideEnabled(bool enabled) { mImpl->mModel->mElideEnabled = enabled; + mImpl->mModel->mVisualModel->SetTextElideEnabled(enabled); } bool Controller::IsTextElideEnabled() const @@ -476,21 +362,19 @@ bool Controller::IsTextFitEnabled() const return mImpl->mTextFitEnabled; } +void Controller::SetTextFitChanged(bool changed) +{ + mImpl->mTextFitChanged = changed; +} + +bool Controller::IsTextFitChanged() const +{ + return mImpl->mTextFitChanged; +} + void Controller::SetTextFitMinSize(float minSize, FontSizeType type) { - switch(type) - { - case POINT_SIZE: - { - mImpl->mTextFitMinSize = minSize; - break; - } - case PIXEL_SIZE: - { - mImpl->mTextFitMinSize = ConvertPixelToPint(minSize); - break; - } - } + mImpl->mTextFitMinSize = (type == POINT_SIZE) ? minSize : ConvertPixelToPoint(minSize); } float Controller::GetTextFitMinSize() const @@ -500,19 +384,7 @@ float Controller::GetTextFitMinSize() const void Controller::SetTextFitMaxSize(float maxSize, FontSizeType type) { - switch(type) - { - case POINT_SIZE: - { - mImpl->mTextFitMaxSize = maxSize; - break; - } - case PIXEL_SIZE: - { - mImpl->mTextFitMaxSize = ConvertPixelToPint(maxSize); - break; - } - } + mImpl->mTextFitMaxSize = (type == POINT_SIZE) ? maxSize : ConvertPixelToPoint(maxSize); } float Controller::GetTextFitMaxSize() const @@ -522,19 +394,7 @@ float Controller::GetTextFitMaxSize() const void Controller::SetTextFitStepSize(float step, FontSizeType type) { - switch(type) - { - case POINT_SIZE: - { - mImpl->mTextFitStepSize = step; - break; - } - case PIXEL_SIZE: - { - mImpl->mTextFitStepSize = ConvertPixelToPint(step); - break; - } - } + mImpl->mTextFitStepSize = (type == POINT_SIZE) ? step : ConvertPixelToPoint(step); } float Controller::GetTextFitStepSize() const @@ -552,6 +412,11 @@ Vector2 Controller::GetTextFitContentSize() const return mImpl->mTextFitContentSize; } +float Controller::GetTextFitPointSize() const +{ + return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFitPointSize : 0.0f; +} + void Controller::SetPlaceholderTextElideEnabled(bool enabled) { PlaceholderHandler::SetPlaceholderTextElideEnabled(*this, enabled); @@ -602,8 +467,6 @@ bool Controller::IsGrabHandlePopupEnabled() const return mImpl->mEventData->mGrabHandlePopupEnabled; } -// public : Update - void Controller::SetText(const std::string& text) { TextUpdater::SetText(*this, text); @@ -634,17 +497,7 @@ void Controller::GetPlaceholderText(PlaceholderType type, std::string& text) con void Controller::UpdateAfterFontChange(const std::string& newDefaultFont) { - DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Controller::UpdateAfterFontChange\n"); - - if(!mImpl->mFontDefaults->familyDefined) // If user defined font then should not update when system font changes - { - DALI_LOG_INFO(gLogFilter, Debug::Concise, "Controller::UpdateAfterFontChange newDefaultFont(%s)\n", newDefaultFont.c_str()); - mImpl->mFontDefaults->mFontDescription.family = newDefaultFont; - - ClearFontData(); - - mImpl->RequestRelayout(); - } + mImpl->UpdateAfterFontChange(newDefaultFont); } void Controller::RetrieveSelection(std::string& selectedText) const @@ -672,43 +525,26 @@ void Controller::SendSelectionToClipboard(bool deleteAfterSending) mImpl->SendSelectionToClipboard(deleteAfterSending); } -// public : Default style & Input style - void Controller::SetDefaultFontFamily(const std::string& defaultFontFamily) { - if(NULL == mImpl->mFontDefaults) - { - mImpl->mFontDefaults = new FontDefaults(); - } + 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->mEventData) - { - // Update the cursor position if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->mEventData->mDecoratorUpdated = true; - mImpl->mEventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font family is updated. - } - } + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } const std::string& Controller::GetDefaultFontFamily() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->mFontDescription.family; - } - - return EMPTY_STRING; + return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFontDescription.family : EMPTY_STRING; } void Controller::SetPlaceholderFontFamily(const std::string& placeholderTextFontFamily) @@ -723,48 +559,28 @@ const std::string& Controller::GetPlaceholderFontFamily() const void Controller::SetDefaultFontWeight(FontWeight weight) { - if(NULL == mImpl->mFontDefaults) - { - mImpl->mFontDefaults = new FontDefaults(); - } + EnsureCreated(mImpl->mFontDefaults); mImpl->mFontDefaults->mFontDescription.weight = weight; mImpl->mFontDefaults->weightDefined = true; - if(mImpl->mEventData) - { - // Update the cursor position if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->mEventData->mDecoratorUpdated = true; - mImpl->mEventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font weight is updated. - } - } + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } bool Controller::IsDefaultFontWeightDefined() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->weightDefined; - } - - return false; + return mImpl->mFontDefaults && mImpl->mFontDefaults->weightDefined; } FontWeight Controller::GetDefaultFontWeight() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->mFontDescription.weight; - } - - return TextAbstraction::FontWeight::NORMAL; + return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFontDescription.weight : TextAbstraction::FontWeight::NORMAL; } void Controller::SetPlaceholderTextFontWeight(FontWeight weight) @@ -775,7 +591,6 @@ void Controller::SetPlaceholderTextFontWeight(FontWeight weight) bool Controller::IsPlaceholderTextFontWeightDefined() const { return PlaceholderHandler::IsPlaceholderTextFontWeightDefined(*this); - ; } FontWeight Controller::GetPlaceholderTextFontWeight() const @@ -785,48 +600,28 @@ FontWeight Controller::GetPlaceholderTextFontWeight() const void Controller::SetDefaultFontWidth(FontWidth width) { - if(NULL == mImpl->mFontDefaults) - { - mImpl->mFontDefaults = new FontDefaults(); - } + EnsureCreated(mImpl->mFontDefaults); mImpl->mFontDefaults->mFontDescription.width = width; mImpl->mFontDefaults->widthDefined = true; - if(mImpl->mEventData) - { - // Update the cursor position if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->mEventData->mDecoratorUpdated = true; - mImpl->mEventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font width is updated. - } - } + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } bool Controller::IsDefaultFontWidthDefined() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->widthDefined; - } - - return false; + return mImpl->mFontDefaults && mImpl->mFontDefaults->widthDefined; } FontWidth Controller::GetDefaultFontWidth() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->mFontDescription.width; - } - - return TextAbstraction::FontWidth::NORMAL; + return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFontDescription.width : TextAbstraction::FontWidth::NORMAL; } void Controller::SetPlaceholderTextFontWidth(FontWidth width) @@ -846,47 +641,28 @@ FontWidth Controller::GetPlaceholderTextFontWidth() const void Controller::SetDefaultFontSlant(FontSlant slant) { - if(NULL == mImpl->mFontDefaults) - { - mImpl->mFontDefaults = new FontDefaults(); - } + EnsureCreated(mImpl->mFontDefaults); mImpl->mFontDefaults->mFontDescription.slant = slant; mImpl->mFontDefaults->slantDefined = true; - if(mImpl->mEventData) - { - // Update the cursor position if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->mEventData->mDecoratorUpdated = true; - mImpl->mEventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font slant is updated. - } - } + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } bool Controller::IsDefaultFontSlantDefined() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->slantDefined; - } - return false; + return mImpl->mFontDefaults && mImpl->mFontDefaults->slantDefined; } FontSlant Controller::GetDefaultFontSlant() const { - if(NULL != mImpl->mFontDefaults) - { - return mImpl->mFontDefaults->mFontDescription.slant; - } - - return TextAbstraction::FontSlant::NORMAL; + return mImpl->mFontDefaults ? mImpl->mFontDefaults->mFontDescription.slant : TextAbstraction::FontSlant::NORMAL; } void Controller::SetPlaceholderTextFontSlant(FontSlant slant) @@ -908,105 +684,43 @@ void Controller::SetFontSizeScale(float scale) { mImpl->mFontSizeScale = scale; - if(mImpl->mEventData) - { - // Update the cursor position if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->mEventData->mDecoratorUpdated = true; - mImpl->mEventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font size is updated. - } - } + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } float Controller::GetFontSizeScale() const { - if(nullptr != mImpl->mFontDefaults) - { - return mImpl->mFontSizeScale; - } - - return 1.f; + return mImpl->mFontDefaults ? mImpl->mFontSizeScale : 1.0f; } void Controller::SetDefaultFontSize(float fontSize, FontSizeType type) { - if(NULL == mImpl->mFontDefaults) - { - mImpl->mFontDefaults = new FontDefaults(); - } + EnsureCreated(mImpl->mFontDefaults); - switch(type) - { - case POINT_SIZE: - { - mImpl->mFontDefaults->mDefaultPointSize = fontSize; - mImpl->mFontDefaults->sizeDefined = true; - break; - } - case PIXEL_SIZE: - { - // Point size = Pixel size * 72.f / DPI - unsigned int horizontalDpi = 0u; - unsigned int verticalDpi = 0u; - TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); - fontClient.GetDpi(horizontalDpi, verticalDpi); - - mImpl->mFontDefaults->mDefaultPointSize = (fontSize * 72.f) / static_cast(horizontalDpi); - mImpl->mFontDefaults->sizeDefined = true; - break; - } - } + mImpl->mFontDefaults->mDefaultPointSize = (type == POINT_SIZE) ? fontSize : ConvertPixelToPoint(fontSize); + mImpl->mFontDefaults->sizeDefined = true; - if(mImpl->mEventData) - { - // Update the cursor position if it's in editing mode - if(EventData::IsEditingState(mImpl->mEventData->mState)) - { - mImpl->mEventData->mDecoratorUpdated = true; - mImpl->mEventData->mUpdateCursorPosition = true; // Cursor position should be updated when the font size is updated. - } - } + // Update the cursor position if it's in editing mode + UpdateCursorPosition(mImpl->mEventData); // Clear the font-specific data - ClearFontData(); + mImpl->ClearFontData(); mImpl->RequestRelayout(); } float Controller::GetDefaultFontSize(FontSizeType type) const { - float value = 0.0f; - if(NULL != mImpl->mFontDefaults) + if(mImpl->mFontDefaults) { - switch(type) - { - case POINT_SIZE: - { - value = mImpl->mFontDefaults->mDefaultPointSize; - break; - } - case PIXEL_SIZE: - { - // Pixel size = Point size * DPI / 72.f - unsigned int horizontalDpi = 0u; - unsigned int verticalDpi = 0u; - TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get(); - fontClient.GetDpi(horizontalDpi, verticalDpi); - - value = mImpl->mFontDefaults->mDefaultPointSize * static_cast(horizontalDpi) / 72.f; - break; - } - } - return value; + return (type == POINT_SIZE) ? mImpl->mFontDefaults->mDefaultPointSize : ConvertPointToPixel(mImpl->mFontDefaults->mDefaultPointSize); } - - return value; + return 0.0f; } void Controller::SetPlaceholderTextFontSize(float fontSize, FontSizeType type) @@ -1021,18 +735,7 @@ float Controller::GetPlaceholderTextFontSize(FontSizeType type) const void Controller::SetDefaultColor(const Vector4& color) { - mImpl->mTextColor = color; - - if(!mImpl->IsShowingPlaceholderText()) - { - mImpl->mModel->mVisualModel->SetTextColor(color); - - mImpl->mModel->mLogicalModel->mColorRuns.Clear(); - - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | COLOR); - - mImpl->RequestRelayout(); - } + mImpl->SetDefaultColor(color); } const Vector4& Controller::GetDefaultColor() const @@ -1053,7 +756,6 @@ const Vector4& Controller::GetPlaceholderTextColor() const void Controller::SetShadowOffset(const Vector2& shadowOffset) { mImpl->mModel->mVisualModel->SetShadowOffset(shadowOffset); - mImpl->RequestRelayout(); } @@ -1065,7 +767,6 @@ const Vector2& Controller::GetShadowOffset() const void Controller::SetShadowColor(const Vector4& shadowColor) { mImpl->mModel->mVisualModel->SetShadowColor(shadowColor); - mImpl->RequestRelayout(); } @@ -1079,7 +780,6 @@ void Controller::SetShadowBlurRadius(const float& shadowBlurRadius) if(fabsf(GetShadowBlurRadius() - shadowBlurRadius) > Math::MACHINE_EPSILON_1) { mImpl->mModel->mVisualModel->SetShadowBlurRadius(shadowBlurRadius); - mImpl->RequestRelayout(); } } @@ -1092,7 +792,6 @@ const float& Controller::GetShadowBlurRadius() const void Controller::SetUnderlineColor(const Vector4& color) { mImpl->mModel->mVisualModel->SetUnderlineColor(color); - mImpl->RequestRelayout(); } @@ -1104,7 +803,6 @@ const Vector4& Controller::GetUnderlineColor() const void Controller::SetUnderlineEnabled(bool enabled) { mImpl->mModel->mVisualModel->SetUnderlineEnabled(enabled); - mImpl->RequestRelayout(); } @@ -1116,7 +814,6 @@ bool Controller::IsUnderlineEnabled() const void Controller::SetUnderlineHeight(float height) { mImpl->mModel->mVisualModel->SetUnderlineHeight(height); - mImpl->RequestRelayout(); } @@ -1128,7 +825,6 @@ float Controller::GetUnderlineHeight() const void Controller::SetOutlineColor(const Vector4& color) { mImpl->mModel->mVisualModel->SetOutlineColor(color); - mImpl->RequestRelayout(); } @@ -1140,7 +836,6 @@ const Vector4& Controller::GetOutlineColor() const void Controller::SetOutlineWidth(uint16_t width) { mImpl->mModel->mVisualModel->SetOutlineWidth(width); - mImpl->RequestRelayout(); } @@ -1152,7 +847,6 @@ uint16_t Controller::GetOutlineWidth() const void Controller::SetBackgroundColor(const Vector4& color) { mImpl->mModel->mVisualModel->SetBackgroundColor(color); - mImpl->RequestRelayout(); } @@ -1164,7 +858,6 @@ const Vector4& Controller::GetBackgroundColor() const void Controller::SetBackgroundEnabled(bool enabled) { mImpl->mModel->mVisualModel->SetBackgroundEnabled(enabled); - mImpl->RequestRelayout(); } @@ -1175,53 +868,29 @@ bool Controller::IsBackgroundEnabled() const void Controller::SetDefaultEmbossProperties(const std::string& embossProperties) { - if(NULL == mImpl->mEmbossDefaults) - { - mImpl->mEmbossDefaults = new EmbossDefaults(); - } - + EnsureCreated(mImpl->mEmbossDefaults); mImpl->mEmbossDefaults->properties = embossProperties; } const std::string& Controller::GetDefaultEmbossProperties() const { - if(NULL != mImpl->mEmbossDefaults) - { - return mImpl->mEmbossDefaults->properties; - } - - return EMPTY_STRING; + return mImpl->mEmbossDefaults ? mImpl->mEmbossDefaults->properties : EMPTY_STRING; } void Controller::SetDefaultOutlineProperties(const std::string& outlineProperties) { - if(NULL == mImpl->mOutlineDefaults) - { - mImpl->mOutlineDefaults = new OutlineDefaults(); - } - + EnsureCreated(mImpl->mOutlineDefaults); mImpl->mOutlineDefaults->properties = outlineProperties; } const std::string& Controller::GetDefaultOutlineProperties() const { - if(NULL != mImpl->mOutlineDefaults) - { - return mImpl->mOutlineDefaults->properties; - } - - return EMPTY_STRING; + return mImpl->mOutlineDefaults ? mImpl->mOutlineDefaults->properties : EMPTY_STRING; } bool Controller::SetDefaultLineSpacing(float lineSpacing) { - if(std::fabs(lineSpacing - mImpl->mLayoutEngine.GetDefaultLineSpacing()) > Math::MACHINE_EPSILON_1000) - { - mImpl->mLayoutEngine.SetDefaultLineSpacing(lineSpacing); - mImpl->mRecalculateNaturalSize = true; - return true; - } - return false; + return mImpl->SetDefaultLineSpacing(lineSpacing); } float Controller::GetDefaultLineSpacing() const @@ -1231,13 +900,7 @@ float Controller::GetDefaultLineSpacing() const bool Controller::SetDefaultLineSize(float lineSize) { - if(std::fabs(lineSize - mImpl->mLayoutEngine.GetDefaultLineSize()) > Math::MACHINE_EPSILON_1000) - { - mImpl->mLayoutEngine.SetDefaultLineSize(lineSize); - mImpl->mRecalculateNaturalSize = true; - return true; - } - return false; + return mImpl->SetDefaultLineSize(lineSize); } float Controller::GetDefaultLineSize() const @@ -1247,57 +910,12 @@ float Controller::GetDefaultLineSize() const void Controller::SetInputColor(const Vector4& color) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mInputStyle.textColor = color; - mImpl->mEventData->mInputStyle.isDefaultColor = false; - - if(EventData::SELECTING == mImpl->mEventData->mState || EventData::EDITING == mImpl->mEventData->mState || EventData::INACTIVE == mImpl->mEventData->mState) - { - if(EventData::SELECTING == mImpl->mEventData->mState) - { - const bool handlesCrossed = mImpl->mEventData->mLeftSelectionPosition > mImpl->mEventData->mRightSelectionPosition; - - // Get start and end position of selection - const CharacterIndex startOfSelectedText = handlesCrossed ? mImpl->mEventData->mRightSelectionPosition : mImpl->mEventData->mLeftSelectionPosition; - const Length lengthOfSelectedText = (handlesCrossed ? mImpl->mEventData->mLeftSelectionPosition : mImpl->mEventData->mRightSelectionPosition) - startOfSelectedText; - - // Add the color run. - const VectorBase::SizeType numberOfRuns = mImpl->mModel->mLogicalModel->mColorRuns.Count(); - mImpl->mModel->mLogicalModel->mColorRuns.Resize(numberOfRuns + 1u); - - ColorRun& colorRun = *(mImpl->mModel->mLogicalModel->mColorRuns.Begin() + numberOfRuns); - colorRun.color = color; - colorRun.characterRun.characterIndex = startOfSelectedText; - colorRun.characterRun.numberOfCharacters = lengthOfSelectedText; - - mImpl->mTextUpdateInfo.mCharacterIndex = startOfSelectedText; - mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = lengthOfSelectedText; - mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = lengthOfSelectedText; - } - else - { - mImpl->mTextUpdateInfo.mCharacterIndex = 0; - mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters; - mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl->mModel->mLogicalModel->mText.Count(); - } - - // Request to relayout. - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | COLOR); - mImpl->RequestRelayout(); - } - } + InputProperties::SetInputColor(*this, color); } const Vector4& Controller::GetInputColor() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mInputStyle.textColor; - } - - // Return the default text's color if there is no EventData. - return mImpl->mTextColor; + return InputProperties::GetInputColor(*this); } void Controller::SetInputFontFamily(const std::string& fontFamily) @@ -1367,115 +985,67 @@ float Controller::GetInputFontPointSize() const void Controller::SetInputLineSpacing(float lineSpacing) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mInputStyle.lineSpacing = lineSpacing; - mImpl->mEventData->mInputStyle.isLineSpacingDefined = true; - } + InputProperties::SetInputLineSpacing(*this, lineSpacing); } float Controller::GetInputLineSpacing() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mInputStyle.lineSpacing; - } - - return 0.f; + return InputProperties::GetInputLineSpacing(*this); } void Controller::SetInputShadowProperties(const std::string& shadowProperties) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mInputStyle.shadowProperties = shadowProperties; - } + InputProperties::SetInputShadowProperties(*this, shadowProperties); } const std::string& Controller::GetInputShadowProperties() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mInputStyle.shadowProperties; - } - - return EMPTY_STRING; + return InputProperties::GetInputShadowProperties(*this); } void Controller::SetInputUnderlineProperties(const std::string& underlineProperties) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mInputStyle.underlineProperties = underlineProperties; - } + InputProperties::SetInputUnderlineProperties(*this, underlineProperties); } const std::string& Controller::GetInputUnderlineProperties() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mInputStyle.underlineProperties; - } - - return EMPTY_STRING; + return InputProperties::GetInputUnderlineProperties(*this); } void Controller::SetInputEmbossProperties(const std::string& embossProperties) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mInputStyle.embossProperties = embossProperties; - } + InputProperties::SetInputEmbossProperties(*this, embossProperties); } const std::string& Controller::GetInputEmbossProperties() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mInputStyle.embossProperties; - } - - return GetDefaultEmbossProperties(); + return InputProperties::GetInputEmbossProperties(*this); } void Controller::SetInputOutlineProperties(const std::string& outlineProperties) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mInputStyle.outlineProperties = outlineProperties; - } + InputProperties::SetInputOutlineProperties(*this, outlineProperties); } const std::string& Controller::GetInputOutlineProperties() const { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mInputStyle.outlineProperties; - } - - return GetDefaultOutlineProperties(); + return InputProperties::GetInputOutlineProperties(*this); } void Controller::SetInputModePassword(bool passwordInput) { - if(NULL != mImpl->mEventData) - { - mImpl->mEventData->mPasswordInput = passwordInput; - } + InputProperties::SetInputModePassword(*this, passwordInput); } bool Controller::IsInputModePassword() { - if(NULL != mImpl->mEventData) - { - return mImpl->mEventData->mPasswordInput; - } - return false; + return InputProperties::IsInputModePassword(*this); } void Controller::SetNoTextDoubleTapAction(NoTextTap::Action action) { - if(NULL != mImpl->mEventData) + if(mImpl->mEventData) { mImpl->mEventData->mDoubleTapAction = action; } @@ -1483,19 +1053,12 @@ void Controller::SetNoTextDoubleTapAction(NoTextTap::Action action) Controller::NoTextTap::Action Controller::GetNoTextDoubleTapAction() const { - NoTextTap::Action action = NoTextTap::NO_ACTION; - - if(NULL != mImpl->mEventData) - { - action = mImpl->mEventData->mDoubleTapAction; - } - - return action; + return mImpl->mEventData ? mImpl->mEventData->mDoubleTapAction : NoTextTap::NO_ACTION; } void Controller::SetNoTextLongPressAction(NoTextTap::Action action) { - if(NULL != mImpl->mEventData) + if(mImpl->mEventData) { mImpl->mEventData->mLongPressAction = action; } @@ -1503,14 +1066,7 @@ void Controller::SetNoTextLongPressAction(NoTextTap::Action action) Controller::NoTextTap::Action Controller::GetNoTextLongPressAction() const { - NoTextTap::Action action = NoTextTap::NO_ACTION; - - if(NULL != mImpl->mEventData) - { - action = mImpl->mEventData->mLongPressAction; - } - - return action; + return mImpl->mEventData ? mImpl->mEventData->mLongPressAction : NoTextTap::NO_ACTION; } bool Controller::IsUnderlineSetByString() @@ -1553,8 +1109,6 @@ void Controller::FontStyleSetByString(bool setByString) mImpl->mFontStyleSetByString = setByString; } -// public : Queries & retrieves. - Layout::Engine& Controller::GetLayoutEngine() { return mImpl->mLayoutEngine; @@ -1588,8 +1142,7 @@ float Controller::GetHeightForWidth(float width) int Controller::GetLineCount(float width) { GetHeightForWidth(width); - int numberofLines = mImpl->mModel->GetNumberOfLines(); - return numberofLines; + return mImpl->mModel->GetNumberOfLines(); } const ModelInterface* const Controller::GetTextModel() const @@ -1623,16 +1176,13 @@ bool Controller::GetTextScrollInfo(float& scrollPosition, float& controlHeight, void Controller::SetHiddenInputOption(const Property::Map& options) { - if(NULL == mImpl->mHiddenInput) - { - mImpl->mHiddenInput = new HiddenText(this); - } + EnsureCreated(mImpl->mHiddenInput, this); mImpl->mHiddenInput->SetProperties(options); } void Controller::GetHiddenInputOption(Property::Map& options) { - if(NULL != mImpl->mHiddenInput) + if(mImpl->mHiddenInput) { mImpl->mHiddenInput->GetProperties(options); } @@ -1640,16 +1190,13 @@ void Controller::GetHiddenInputOption(Property::Map& options) void Controller::SetInputFilterOption(const Property::Map& options) { - if(!mImpl->mInputFilter) - { - mImpl->mInputFilter = std::unique_ptr(new InputFilter()); - } + EnsureCreated(mImpl->mInputFilter); mImpl->mInputFilter->SetProperties(options); } void Controller::GetInputFilterOption(Property::Map& options) { - if(NULL != mImpl->mInputFilter) + if(mImpl->mInputFilter) { mImpl->mInputFilter->GetProperties(options); } @@ -1719,7 +1266,16 @@ void Controller::SetVerticalLineAlignment(Toolkit::DevelText::VerticalLineAlignm mImpl->mModel->mVerticalLineAlignment = alignment; } -// public : Relayout. +Toolkit::DevelText::EllipsisPosition::Type Controller::GetEllipsisPosition() const +{ + return mImpl->mModel->GetEllipsisPosition(); +} + +void Controller::SetEllipsisPosition(Toolkit::DevelText::EllipsisPosition::Type ellipsisPosition) +{ + mImpl->mModel->mEllipsisPosition = ellipsisPosition; + mImpl->mModel->mVisualModel->SetEllipsisPosition(ellipsisPosition); +} Controller::UpdateTextType Controller::Relayout(const Size& size, Dali::LayoutDirection::Type layoutDirection) { @@ -1731,40 +1287,16 @@ void Controller::RequestRelayout() mImpl->RequestRelayout(); } -// public : Input style change signals. - bool Controller::IsInputStyleChangedSignalsQueueEmpty() { - return (NULL == mImpl->mEventData) || (0u == mImpl->mEventData->mInputStyleChangedQueue.Count()); + return mImpl->IsInputStyleChangedSignalsQueueEmpty(); } void Controller::ProcessInputStyleChangedSignals() { - if(NULL == mImpl->mEventData) - { - // Nothing to do. - return; - } - - for(Vector::ConstIterator it = mImpl->mEventData->mInputStyleChangedQueue.Begin(), - endIt = mImpl->mEventData->mInputStyleChangedQueue.End(); - it != endIt; - ++it) - { - const InputStyle::Mask mask = *it; - - if(NULL != mImpl->mEditableControlInterface) - { - // Emit the input style changed signal. - mImpl->mEditableControlInterface->InputStyleChanged(mask); - } - } - - mImpl->mEventData->mInputStyleChangedQueue.Clear(); + mImpl->ProcessInputStyleChangedSignals(); } -// public : Text-input Event Queuing. - void Controller::KeyboardFocusGainEvent() { EventHandler::KeyboardFocusGainEvent(*this); @@ -1805,6 +1337,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) @@ -1828,7 +1365,7 @@ CharacterIndex Controller::GetPrimaryCursorPosition() const return mImpl->GetPrimaryCursorPosition(); } -bool Controller::SetPrimaryCursorPosition(CharacterIndex index) +bool Controller::SetPrimaryCursorPosition(CharacterIndex index, bool focused) { if(mImpl->mEventData) { @@ -1836,7 +1373,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; @@ -1855,6 +1392,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; @@ -1865,6 +1407,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 EMPTY_STRING; + } + + 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); @@ -1875,8 +1470,6 @@ void Controller::PasteClipboardItemEvent() EventHandler::PasteClipboardItemEvent(*this); } -// protected : Inherit from Text::Decorator::ControllerInterface. - void Controller::GetTargetSize(Vector2& targetSize) { targetSize = mImpl->mModel->mVisualModel->mControlSize; @@ -1884,7 +1477,7 @@ void Controller::GetTargetSize(Vector2& targetSize) void Controller::AddDecoration(Actor& actor, bool needsClipping) { - if(NULL != mImpl->mEditableControlInterface) + if(mImpl->mEditableControlInterface) { mImpl->mEditableControlInterface->AddDecoration(actor, needsClipping); } @@ -1898,60 +1491,21 @@ bool Controller::IsEditable() const void Controller::SetEditable(bool editable) { mImpl->SetEditable(editable); - if(mImpl->mEventData && mImpl->mEventData->mDecorator) - { - mImpl->mEventData->mDecorator->SetEditable(editable); - } } void Controller::ScrollBy(Vector2 scroll) { - if(mImpl->mEventData && (fabs(scroll.x) > Math::MACHINE_EPSILON_0 || fabs(scroll.y) > Math::MACHINE_EPSILON_0)) - { - const Vector2& layoutSize = mImpl->mModel->mVisualModel->GetLayoutSize(); - const Vector2 currentScroll = mImpl->mModel->mScrollPosition; - - scroll.x = -scroll.x; - scroll.y = -scroll.y; - - if(fabs(scroll.x) > Math::MACHINE_EPSILON_0) - { - mImpl->mModel->mScrollPosition.x += scroll.x; - mImpl->ClampHorizontalScroll(layoutSize); - } - - if(fabs(scroll.y) > Math::MACHINE_EPSILON_0) - { - mImpl->mModel->mScrollPosition.y += scroll.y; - mImpl->ClampVerticalScroll(layoutSize); - } - - if(mImpl->mModel->mScrollPosition != currentScroll) - { - mImpl->mEventData->mDecorator->UpdatePositions(mImpl->mModel->mScrollPosition - currentScroll); - mImpl->RequestRelayout(); - } - } + mImpl->ScrollBy(scroll); } float Controller::GetHorizontalScrollPosition() { - if(mImpl->mEventData) - { - //scroll values are negative internally so we convert them to positive numbers - return -mImpl->mModel->mScrollPosition.x; - } - return 0; + return mImpl->GetHorizontalScrollPosition(); } float Controller::GetVerticalScrollPosition() { - if(mImpl->mEventData) - { - //scroll values are negative internally so we convert them to positive numbers - return -mImpl->mModel->mScrollPosition.y; - } - return 0; + return mImpl->GetVerticalScrollPosition(); } void Controller::DecorationEvent(HandleType handleType, HandleState state, float x, float y) @@ -1959,8 +1513,6 @@ void Controller::DecorationEvent(HandleType handleType, HandleState state, float EventHandler::DecorationEvent(*this, handleType, state, x, y); } -// protected : Inherit from TextSelectionPopup::TextPopupButtonCallbackInterface. - void Controller::TextPopupButtonTouched(Dali::Toolkit::TextSelectionPopup::Buttons button) { EventHandler::TextPopupButtonTouched(*this, button); @@ -1975,8 +1527,6 @@ void Controller::DisplayTimeExpired() mImpl->RequestRelayout(); } -// private : Update. - void Controller::InsertText(const std::string& text, Controller::InsertType type) { TextUpdater::InsertText(*this, text, type); @@ -1987,9 +1537,7 @@ void Controller::PasteText(const std::string& stringToPaste) TextUpdater::PasteText(*this, stringToPaste); } -bool Controller::RemoveText(int cursorOffset, - int numberOfCharacters, - UpdateInputStyleType type) +bool Controller::RemoveText(int cursorOffset, int numberOfCharacters, UpdateInputStyleType type) { return TextUpdater::RemoveText(*this, cursorOffset, numberOfCharacters, type); } @@ -1999,24 +1547,17 @@ bool Controller::RemoveSelectedText() return TextUpdater::RemoveSelectedText(*this); } -void Controller::InsertTextAnchor(int numberOfCharacters, - CharacterIndex previousCursorIndex) +void Controller::InsertTextAnchor(int numberOfCharacters, CharacterIndex previousCursorIndex) { TextUpdater::InsertTextAnchor(*this, numberOfCharacters, previousCursorIndex); } -void Controller::RemoveTextAnchor(int cursorOffset, - int numberOfCharacters, - CharacterIndex previousCursorIndex) +void Controller::RemoveTextAnchor(int cursorOffset, int numberOfCharacters, CharacterIndex previousCursorIndex) { TextUpdater::RemoveTextAnchor(*this, cursorOffset, numberOfCharacters, previousCursorIndex); } -// private : Relayout. - -bool Controller::DoRelayout(const Size& size, - OperationsMask operationsRequired, - Size& layoutSize) +bool Controller::DoRelayout(const Size& size, OperationsMask operationsRequired, Size& layoutSize) { return Relayouter::DoRelayout(*this, size, operationsRequired, layoutSize); } @@ -2026,8 +1567,6 @@ void Controller::CalculateVerticalOffset(const Size& controlSize) Relayouter::CalculateVerticalOffset(*this, controlSize); } -// private : Events. - void Controller::ProcessModifyEvents() { EventHandler::ProcessModifyEvents(*this); @@ -2065,39 +1604,6 @@ void Controller::ShowPlaceholderText() PlaceholderHandler::ShowPlaceholderText(*this); } -void Controller::ClearFontData() -{ - if(mImpl->mFontDefaults) - { - mImpl->mFontDefaults->mFontId = 0u; // Remove old font ID - } - - // Set flags to update the model. - mImpl->mTextUpdateInfo.mCharacterIndex = 0u; - mImpl->mTextUpdateInfo.mNumberOfCharactersToRemove = mImpl->mTextUpdateInfo.mPreviousNumberOfCharacters; - mImpl->mTextUpdateInfo.mNumberOfCharactersToAdd = mImpl->mModel->mLogicalModel->mText.Count(); - - mImpl->mTextUpdateInfo.mClearAll = true; - mImpl->mTextUpdateInfo.mFullRelayoutNeeded = true; - mImpl->mRecalculateNaturalSize = true; - - mImpl->mOperationsPending = static_cast(mImpl->mOperationsPending | - VALIDATE_FONTS | - SHAPE_TEXT | - BIDI_INFO | - GET_GLYPH_METRICS | - LAYOUT | - UPDATE_LAYOUT_SIZE | - REORDER | - ALIGN); -} - -void Controller::ClearStyleData() -{ - mImpl->mModel->mLogicalModel->mColorRuns.Clear(); - mImpl->mModel->mLogicalModel->ClearFontDescriptionRuns(); -} - void Controller::ResetCursorPosition(CharacterIndex cursorIndex) { // Reset the cursor position @@ -2115,20 +1621,7 @@ void Controller::ResetCursorPosition(CharacterIndex cursorIndex) CharacterIndex Controller::GetCursorPosition() { - if(!mImpl->mEventData) - return 0; - - return mImpl->mEventData->mPrimaryCursorPosition; -} - -void Controller::ResetScrollPosition() -{ - if(NULL != mImpl->mEventData) - { - // Reset the scroll position. - mImpl->mModel->mScrollPosition = Vector2::ZERO; - mImpl->mEventData->mScrollAfterUpdatePosition = true; - } + return mImpl->mEventData ? mImpl->mEventData->mPrimaryCursorPosition : 0; } void Controller::SetControlInterface(ControlInterface* controlInterface) @@ -2151,18 +1644,6 @@ Actor Controller::CreateBackgroundActor() return mImpl->CreateBackgroundActor(); } -// private : Private contructors & copy operator. - -Controller::Controller() -: Controller(nullptr, nullptr, nullptr, nullptr) -{ -} - -Controller::Controller(ControlInterface* controlInterface) -: Controller(controlInterface, nullptr, nullptr, nullptr) -{ -} - Controller::Controller(ControlInterface* controlInterface, EditableControlInterface* editableControlInterface, SelectableControlInterface* selectableControlInterface, @@ -2171,17 +1652,9 @@ Controller::Controller(ControlInterface* controlInterface, { } -// The copy constructor and operator are left unimplemented. - -// protected : Destructor. - Controller::~Controller() { delete mImpl; } -} // namespace Text - -} // namespace Toolkit - -} // namespace Dali +} // namespace Dali::Toolkit::Text