From 6ba9927d226e40ce57844d837b61397cc721a133 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Mon, 21 Mar 2022 20:10:37 +0900 Subject: [PATCH] Fix cursor visible issue on text editing I made a prev patch to ensure that the cursor layer is on top. 16ef097a0b2d3945a5045db7bb2f3896ed5a5a95 But cursor layer in clippingDecorationActors(in RednerText) is processed only once. Therefore, if user edit while the background is present, the cursor still invisible. This patch passes the cursor layer actor as an argument to RenderText(), so that the cursor is always on top. Change-Id: I27e3334f74dbca34aaae18089082125c871935fa Signed-off-by: Bowon Ryu --- .../internal/controls/text-controls/common-text-utils.cpp | 11 +++++++---- .../internal/controls/text-controls/common-text-utils.h | 1 + .../internal/controls/text-controls/text-editor-impl.cpp | 2 +- .../internal/controls/text-controls/text-field-impl.cpp | 2 +- dali-toolkit/internal/text/decorator/text-decorator.cpp | 5 ++++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/dali-toolkit/internal/controls/text-controls/common-text-utils.cpp b/dali-toolkit/internal/controls/text-controls/common-text-utils.cpp index e0c2306..c1f4179 100644 --- a/dali-toolkit/internal/controls/text-controls/common-text-utils.cpp +++ b/dali-toolkit/internal/controls/text-controls/common-text-utils.cpp @@ -55,6 +55,7 @@ void CommonTextUtils::RenderText( float& alignmentOffset, Actor& renderableActor, Actor& backgroundActor, + Actor& cursorLayerActor, Toolkit::Control& stencil, std::vector& clippingDecorationActors, std::vector& anchorActors, @@ -132,10 +133,6 @@ void CommonTextUtils::RenderText( { highlightActor = *it; } - else if(it->GetProperty(Dali::Actor::Property::NAME) == "CursorLayerActor") - { - it->RaiseToTop(); - } } clippingDecorationActors.clear(); @@ -156,6 +153,12 @@ void CommonTextUtils::RenderText( backgroundActor.LowerToBottom(); } } + + if(cursorLayerActor) + { + cursorLayerActor.RaiseToTop(); + } + SynchronizeTextAnchorsInParent(textActor, controller, anchorActors); } } diff --git a/dali-toolkit/internal/controls/text-controls/common-text-utils.h b/dali-toolkit/internal/controls/text-controls/common-text-utils.h index f6a9a2f..a0d0ad4 100644 --- a/dali-toolkit/internal/controls/text-controls/common-text-utils.h +++ b/dali-toolkit/internal/controls/text-controls/common-text-utils.h @@ -60,6 +60,7 @@ public: float& alignmentOffset, Actor& renderableActor, Actor& backgroundActor, + Actor& cursorLayerActor, Toolkit::Control& stencil, std::vector& clippingDecorationActors, std::vector& anchorActors, diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index d3c0154..d6bae90 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -776,7 +776,7 @@ void TextEditor::OnRelayout(const Vector2& size, RelayoutContainer& container) void TextEditor::RenderText(Text::Controller::UpdateTextType updateTextType) { - CommonTextUtils::RenderText(Self(), mRenderer, mController, mDecorator, mAlignmentOffset, mRenderableActor, mBackgroundActor, mStencil, mClippingDecorationActors, mAnchorActors, updateTextType); + CommonTextUtils::RenderText(Self(), mRenderer, mController, mDecorator, mAlignmentOffset, mRenderableActor, mBackgroundActor, mCursorLayer, mStencil, mClippingDecorationActors, mAnchorActors, updateTextType); if(mRenderableActor) { ApplyScrollPosition(); diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index b1ea8e7..3cbd0b9 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -716,7 +716,7 @@ Text::ControllerPtr TextField::GetTextController() void TextField::RenderText(Text::Controller::UpdateTextType updateTextType) { - CommonTextUtils::RenderText(Self(), mRenderer, mController, mDecorator, mAlignmentOffset, mRenderableActor, mBackgroundActor, mStencil, mClippingDecorationActors, mAnchorActors, updateTextType); + CommonTextUtils::RenderText(Self(), mRenderer, mController, mDecorator, mAlignmentOffset, mRenderableActor, mBackgroundActor, mCursorLayer, mStencil, mClippingDecorationActors, mAnchorActors, updateTextType); } void TextField::OnKeyInputFocusGained() diff --git a/dali-toolkit/internal/text/decorator/text-decorator.cpp b/dali-toolkit/internal/text/decorator/text-decorator.cpp index d005d94..f4d2ca4 100644 --- a/dali-toolkit/internal/text/decorator/text-decorator.cpp +++ b/dali-toolkit/internal/text/decorator/text-decorator.cpp @@ -746,12 +746,15 @@ struct Decorator::Impl : public ConnectionTracker { layer.SetProperty(Actor::Property::NAME, "ActiveLayerActor"); } + else if(type == DecorationType::CURSOR_LAYER) + { + layer.SetProperty(Actor::Property::NAME, "CursorLayerActor"); + } #endif bool needsClipping = false; if(type == DecorationType::CURSOR_LAYER) { needsClipping = true; - layer.SetProperty(Actor::Property::NAME, "CursorLayerActor"); } layer.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); -- 2.7.4