From: Bowon Ryu Date: Wed, 5 Feb 2025 11:20:15 +0000 (+0900) Subject: [Tizen] Prevent atlas block corruption issue when renderer is reset X-Git-Tag: accepted/tizen/8.0/unified/20250227.155239^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3ad9c5780d0139d99a2ae732616bfc7f424f4938;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [Tizen] Prevent atlas block corruption issue when renderer is reset If UpdateTextType is NONE_UPDATED when Renderer is reset, RenderText does not perform rendering. This causes several problems with atlas operation. When the renderer is reset, all caches used by the text field are removed from AtlasManager. At this time, if a cache of an ID that was previously used (now removed) by another editable text is created and used, the atlas block of the existing text field will be damaged. At least until the cache structure is improved, render must be performed when the renderer is reset. Change-Id: Ic5f939e81920ab59e676ee50f450c6ffbb1259e3 Signed-off-by: Bowon Ryu --- 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 061355dfde..27c47387ab 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -787,13 +787,8 @@ void TextEditor::OnRelayout(const Vector2& size, RelayoutContainer& container) if(!mRenderer) { - mRenderer = Backend::Get().NewRenderer(mRenderingBackend); - } - - if(mRenderRequired) - { + mRenderer = Backend::Get().NewRenderer(mRenderingBackend); updateTextType = static_cast(updateTextType | Text::Controller::MODEL_UPDATED); - mRenderRequired = false; } RenderText(updateTextType); @@ -1443,8 +1438,7 @@ TextEditor::TextEditor(ControlBehaviour additionalBehaviour) mOldPosition(0u), mOldSelectionStart(0u), mOldSelectionEnd(0u), - mSelectionStarted(false), - mRenderRequired(false) + mSelectionStarted(false) { } diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h index 8483daba20..14cef45038 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -652,7 +652,6 @@ private: // Data uint32_t mOldSelectionEnd; bool mSelectionStarted : 1; ///< If true, emits SelectionStartedSignal at the end of OnRelayout(). - bool mRenderRequired : 1; ///< If true, text rendering required. struct PropertyHandler; diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-property-handler.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-property-handler.cpp index 708e803a63..edafd6acb0 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-property-handler.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-property-handler.cpp @@ -372,7 +372,6 @@ void TextEditor::PropertyHandler::SetProperty(Toolkit::TextEditor textEditor, Pr if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } @@ -391,7 +390,6 @@ void TextEditor::PropertyHandler::SetProperty(Toolkit::TextEditor textEditor, Pr if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } @@ -428,7 +426,6 @@ void TextEditor::PropertyHandler::SetProperty(Toolkit::TextEditor textEditor, Pr if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } @@ -717,7 +714,6 @@ void TextEditor::PropertyHandler::SetProperty(Toolkit::TextEditor textEditor, Pr if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } 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 41ffcbc68f..62c6e73936 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -698,13 +698,8 @@ void TextField::OnRelayout(const Vector2& size, RelayoutContainer& container) if(!mRenderer) { - mRenderer = Backend::Get().NewRenderer(mRenderingBackend); - } - - if(mRenderRequired) - { + mRenderer = Backend::Get().NewRenderer(mRenderingBackend); updateTextType = static_cast(updateTextType | Text::Controller::MODEL_UPDATED); - mRenderRequired = false; } RenderText(updateTextType); @@ -1210,8 +1205,7 @@ TextField::TextField(ControlBehaviour additionalBehaviour) mOldPosition(0u), mOldSelectionStart(0u), mOldSelectionEnd(0u), - mSelectionStarted(false), - mRenderRequired(false) + mSelectionStarted(false) { } diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index 31efbcc7d0..babde4554f 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -599,7 +599,6 @@ private: // Data uint32_t mOldSelectionEnd; bool mSelectionStarted : 1; ///< If true, emits SelectionStartedSignal at the end of OnRelayout(). - bool mRenderRequired : 1; ///< If true, text rendering required. protected: struct PropertyHandler; diff --git a/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp b/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp index 22202c84f7..2646a5379a 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-property-handler.cpp @@ -437,7 +437,6 @@ void TextField::PropertyHandler::SetProperty(Toolkit::TextField textField, Prope if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } @@ -456,7 +455,6 @@ void TextField::PropertyHandler::SetProperty(Toolkit::TextField textField, Prope if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } @@ -493,7 +491,6 @@ void TextField::PropertyHandler::SetProperty(Toolkit::TextField textField, Prope if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; } @@ -683,7 +680,6 @@ void TextField::PropertyHandler::SetProperty(Toolkit::TextField textField, Prope if(update) { impl.mRenderer.Reset(); - impl.mRenderRequired = true; } break; }