From: ANZ1217 Date: Thu, 11 Jan 2024 11:36:48 +0000 (+0900) Subject: Fix Text Anchor don't work properly X-Git-Tag: accepted/tizen/7.0/unified/20240115.170644~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d65ac99b64735697e4ba7db7a5a5ca8d8dba677;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Fix Text Anchor don't work properly When the text component is vertical aligned as center or bottom, The y offset was not calculated at anchor event. Now, it works properly. Change-Id: I31f2530122d28e07a32c8a75875a77bcc69353ee --- diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index fbebd86..b787366 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -1138,6 +1138,8 @@ void TextLabel::OnRelayout(const Vector2& size, RelayoutContainer& container) visualTransformOffset.x = roundf(padding.start + alignmentOffset.x); visualTransformOffset.y = roundf(padding.top + alignmentOffset.y); + mController->SetVisualTransformOffset(visualTransformOffset); + Property::Map visualTransform; visualTransform.Add(Toolkit::Visual::Transform::Property::SIZE, layoutSize) .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE)) diff --git a/dali-toolkit/internal/text/controller/text-controller-event-handler.cpp b/dali-toolkit/internal/text/controller/text-controller-event-handler.cpp index dddb7da..9708844 100644 --- a/dali-toolkit/internal/text/controller/text-controller-event-handler.cpp +++ b/dali-toolkit/internal/text/controller/text-controller-event-handler.cpp @@ -377,16 +377,19 @@ void Controller::EventHandler::AnchorEvent(Controller& controller, float x, floa CharacterIndex cursorPosition = 0u; // Convert from control's coords to text's coords. + const float xPosition = x - controller.mImpl->mModel->mScrollPosition.x; const float yPosition = y - controller.mImpl->mModel->mScrollPosition.y; + Vector2 visualTransformOffset = controller.mImpl->mModel->mVisualTransformOffset; + // Whether to touch point hits on a glyph. bool matchedCharacter = false; cursorPosition = Text::GetClosestCursorIndex(controller.mImpl->mModel->mVisualModel, controller.mImpl->mModel->mLogicalModel, controller.mImpl->mMetrics, xPosition, - yPosition, + yPosition - visualTransformOffset.y, CharacterHitTest::TAP, matchedCharacter); diff --git a/dali-toolkit/internal/text/controller/text-controller.cpp b/dali-toolkit/internal/text/controller/text-controller.cpp index 399e871..d4082fb 100644 --- a/dali-toolkit/internal/text/controller/text-controller.cpp +++ b/dali-toolkit/internal/text/controller/text-controller.cpp @@ -1416,6 +1416,11 @@ const float Controller::GetCharacterSpacing() const return mImpl->mModel->mVisualModel->GetCharacterSpacing(); } +void Controller::SetVisualTransformOffset(Vector2 offset) +{ + mImpl->mModel->mVisualTransformOffset = offset; +} + Controller::UpdateTextType Controller::Relayout(const Size& size, Dali::LayoutDirection::Type layoutDirection) { return Relayouter::Relayout(*this, size, layoutDirection); diff --git a/dali-toolkit/internal/text/controller/text-controller.h b/dali-toolkit/internal/text/controller/text-controller.h index 38b1e98..b6f0aff 100644 --- a/dali-toolkit/internal/text/controller/text-controller.h +++ b/dali-toolkit/internal/text/controller/text-controller.h @@ -1574,6 +1574,13 @@ public: // Default style & Input style */ const float GetCharacterSpacing() const; + /** + * @brief Sets the visual transform offset. + * + * @param[in] offset The offset. + */ + void SetVisualTransformOffset(Vector2 offset); + public: // Queries & retrieves. /** * @brief Return the layout engine. diff --git a/dali-toolkit/internal/text/text-model.h b/dali-toolkit/internal/text/text-model.h index a3a42a2..92a514a 100644 --- a/dali-toolkit/internal/text/text-model.h +++ b/dali-toolkit/internal/text/text-model.h @@ -380,6 +380,7 @@ public: bool mIgnoreSpacesAfterText : 1; ///< Whether ignoring spaces after text or not. Default is true. DevelText::MatchLayoutDirection mMatchLayoutDirection; ///< Whether to match text alignment with layout direction or not. DevelText::EllipsisPosition::Type mEllipsisPosition; ///< Where is the location the text elide + Vector2 mVisualTransformOffset; ///< The offset of the layout based on the controller due to alignment. }; } // namespace Text