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-impl.cpp;h=7fac661a11d8a1495e334cfb3c8dc7d43e781574;hp=c24a5cfbddb0e1b053d57f6222f52493f1956468;hb=aa6d5ffc76e7c5ad6785a4a426b9b6ba2ef4d99b;hpb=b2b0bec92c5632c2cad9223656cf67b152442d3c diff --git a/dali-toolkit/internal/text/text-controller-impl.cpp b/dali-toolkit/internal/text/text-controller-impl.cpp index c24a5cf..7fac661 100644 --- a/dali-toolkit/internal/text/text-controller-impl.cpp +++ b/dali-toolkit/internal/text/text-controller-impl.cpp @@ -362,6 +362,27 @@ void ChangeTextControllerState(Controller::Impl& impl, EventData::State newState } } +void UpdateCursorPositionForAlignment(Controller::Impl& impl, bool needFullAlignment) +{ + EventData* eventData = impl.mEventData; + + // Set the flag to redo the alignment operation + impl.mOperationsPending = static_cast(impl.mOperationsPending | Controller::OperationsMask::ALIGN); + + if(eventData) + { + // Note: mUpdateAlignment is currently only needed for horizontal alignment + eventData->mUpdateAlignment = needFullAlignment; + + // Update the cursor if it's in editing mode + if(EventData::IsEditingState(eventData->mState)) + { + impl.ChangeState(EventData::EDITING); + eventData->mUpdateCursorPosition = true; + } + } +} + } // unnamed Namespace EventData::EventData(DecoratorPtr decorator, InputMethodContext& inputMethodContext) @@ -519,7 +540,8 @@ Dali::LayoutDirection::Type Controller::Impl::GetLayoutDirection(Dali::Actor& ac if(mModel->mMatchLayoutDirection == DevelText::MatchLayoutDirection::LOCALE || (mModel->mMatchLayoutDirection == DevelText::MatchLayoutDirection::INHERIT && !mIsLayoutDirectionChanged)) { - return static_cast(DevelWindow::Get(actor).GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get()); + Window window = DevelWindow::Get(actor); + return static_cast(window ? window.GetRootLayer().GetProperty(Dali::Actor::Property::LAYOUT_DIRECTION).Get() : LayoutDirection::LEFT_TO_RIGHT); } else { @@ -1440,6 +1462,10 @@ void Controller::Impl::ScrollToMakePositionVisible(const Vector2& position, floa { mModel->mScrollPosition.y = mModel->mVisualModel->mControlSize.height - positionEndY; } + else if(mModel->mLogicalModel->mText.Count() == 0u) + { + Relayouter::CalculateVerticalOffset(*this, mModel->mVisualModel->mControlSize); + } } } @@ -1555,6 +1581,43 @@ void Controller::Impl::ScrollBy(Vector2 scroll) } } +bool Controller::Impl::IsScrollable(const Vector2& displacement) +{ + bool isScrollable = false; + if(mEventData) + { + const bool isHorizontalScrollEnabled = mEventData->mDecorator->IsHorizontalScrollEnabled(); + const bool isVerticalScrollEnabled = mEventData->mDecorator->IsVerticalScrollEnabled(); + if(isHorizontalScrollEnabled ||isVerticalScrollEnabled) + { + const Vector2& targetSize = mModel->mVisualModel->mControlSize; + const Vector2& layoutSize = mModel->mVisualModel->GetLayoutSize(); + const Vector2& scrollPosition = mModel->mScrollPosition; + + if(isHorizontalScrollEnabled) + { + const float displacementX = displacement.x; + const float positionX = scrollPosition.x + displacementX; + if(layoutSize.width > targetSize.width && -positionX > 0.f && -positionX < layoutSize.width - targetSize.width) + { + isScrollable = true; + } + } + + if(isVerticalScrollEnabled) + { + const float displacementY = displacement.y; + const float positionY = scrollPosition.y + displacementY; + if(layoutSize.height > targetSize.height && -positionY > 0 && -positionY < layoutSize.height - targetSize.height) + { + isScrollable = true; + } + } + } + } + return isScrollable; +} + float Controller::Impl::GetHorizontalScrollPosition() { // Scroll values are negative internally so we convert them to positive numbers @@ -1802,22 +1865,7 @@ void Controller::Impl::SetHorizontalAlignment(Text::HorizontalAlignment::Type al { // Set the alignment. mModel->mHorizontalAlignment = alignment; - - // Set the flag to redo the alignment operation. - mOperationsPending = static_cast(mOperationsPending | ALIGN); - - if(mEventData) - { - mEventData->mUpdateAlignment = true; - - // Update the cursor if it's in editing mode - if(EventData::IsEditingState(mEventData->mState)) - { - ChangeState(EventData::EDITING); - mEventData->mUpdateCursorPosition = true; - } - } - + UpdateCursorPositionForAlignment(*this, true); RequestRelayout(); } } @@ -1828,7 +1876,7 @@ void Controller::Impl::SetVerticalAlignment(VerticalAlignment::Type alignment) { // Set the alignment. mModel->mVerticalAlignment = alignment; - mOperationsPending = static_cast(mOperationsPending | ALIGN); + UpdateCursorPositionForAlignment(*this, false); RequestRelayout(); } }