TizenFX icon indicating copy to clipboard operation
TizenFX copied to clipboard

[NUI] Spannbale: Create core classes and ColorSpan

Open shrouqsabah opened this issue 1 year ago • 6 comments

Description of Change

Spannable: it is a text module. It allows application developers to modify text style dynamically at runtime on character level. The application can attach and detach spans on range of text for text-controller.

BaseSpan: Base structure for different text-spans. ForegroundColorSpan: Span to change fore color of font

API Changes

Added:

  • Tizen.NUI.Text.Spans.BaseSpan // Class
  • Tizen.NUI.Text.Spans.ForegroundColorSpan // Class
  • Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder // Class
  • Tizen.NUI.Text.Spans.ISpan // interface
  • Tizen.NUI.Text.Spannable// Class
  • public static void AttachSpan(TextLabel textLabel, BaseSpan span, int startIndex, int endIndex) //Method
  • public static void DetachSpan(TextLabel textLabel, BaseSpan span)
  • public static void BuildSpannedText(TextLabel textLabel)
  • public static void AttachSpan(TextField textField, BaseSpan span, int startIndex, int endIndex)
  • public static void DetachSpan(TextField textField, BaseSpan span)
  • public static void BuildSpannedText(TextField textField)
  • public static void AttachSpan(TextEditor textEditor, BaseSpan span, int startIndex, int endIndex)
  • public static void DetachSpan(TextEditor textEditor, BaseSpan span)
  • public static void BuildSpannedText(TextEditor textEditor)

Testcases

Added the below to (Tizen.NUI.Devel.Tests.Ubuntu) and (Tizen.NUI.Tests):

  • Tizen.NUI.Devel.Tests.PublicBaseSpanTest
  • Tizen.NUI.Devel.Tests.PublicForegroundColorSpanTest
  • Tizen.NUI.Devel.Tests.PublicForegroundColorSpanBuilderTest
  • Tizen.NUI.Devel.Tests.PublicSpannableTest
  • Tizen.NUI.Devel.Tests.TestUtils

This PR depends on the below patches:

  • https://review.tizen.org/gerrit/c/platform/core/uifw/dali-csharp-binder/+/279035
  • https://review.tizen.org/gerrit/c/platform/core/uifw/dali-toolkit/+/276651

Here's an example how to use it

  • https://github.com/shrouqsabah/NUI-Test/tree/spannable_core_colorspan/text-spannable

shrouqsabah avatar Aug 08 '22 06:08 shrouqsabah

Public API Changed

Please follow the ACR process for the changed API below.

Added: 2, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ Tizen.NUI.Text.Spans.ISpan

+ /// <since_tizen>none</since_tizen
+ System.String Tizen.NUI.Text.Spans.ISpan::GetMarkupTagName()

Internal API Changed

Added: 22, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spannable

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextEditor,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextField,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextLabel,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextEditor)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextField)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextLabel)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::UnAttachSpan(Tizen.NUI.BaseComponents.TextEditor,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::UnAttachSpan(Tizen.NUI.BaseComponents.TextField,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::UnAttachSpan(Tizen.NUI.BaseComponents.TextLabel,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.BaseSpan

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.NUI.Text.Spans.BaseSpan::GetMarkupTagName()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.BaseSpan::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ColorSpan

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Boolean Tizen.NUI.Text.Spans.ColorSpan::ForeColorDefined()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Vector4 Tizen.NUI.Text.Spans.ColorSpan::ForeColor()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.ColorSpan::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ColorSpanBuilder

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.ColorSpanBuilder::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ColorSpan Tizen.NUI.Text.Spans.ColorSpanBuilder::Build()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static Tizen.NUI.Text.Spans.ColorSpanBuilder Tizen.NUI.Text.Spans.ColorSpanBuilder::Initialize()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ColorSpanBuilder Tizen.NUI.Text.Spans.ColorSpanBuilder::WithForeColor(Tizen.NUI.Vector4)

TizenAPI-Bot avatar Aug 08 '22 06:08 TizenAPI-Bot

Public API Changed

Please follow the ACR process for the changed API below.

Added: 2, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ Tizen.NUI.Text.Spans.ISpan

+ /// <since_tizen>none</since_tizen
+ System.String Tizen.NUI.Text.Spans.ISpan::GetMarkupTagName()

Internal API Changed

Added: 23, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spannable

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextEditor,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextField,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextLabel,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextEditor)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextField)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextLabel)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::DetachSpan(Tizen.NUI.BaseComponents.TextEditor,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::DetachSpan(Tizen.NUI.BaseComponents.TextField,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::DetachSpan(Tizen.NUI.BaseComponents.TextLabel,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.BaseSpan

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.NUI.Text.Spans.BaseSpan::GetMarkupTagName()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.BaseSpan::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpan

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Boolean Tizen.NUI.Text.Spans.ForegroundColorSpan::ForegroundColorDefined()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Color Tizen.NUI.Text.Spans.ForegroundColorSpan::ForegroundColor()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.ForegroundColorSpan::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static Tizen.NUI.Text.Spans.ForegroundColorSpan Tizen.NUI.Text.Spans.ForegroundColorSpan::CreateWithForegroundColor(Tizen.NUI.Color)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpan Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::Build()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::Initialize()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::WithForegroundColor(Tizen.NUI.Color)

TizenAPI-Bot avatar Aug 14 '22 22:08 TizenAPI-Bot

@shrouqsabah Hello, I'm sorry for the inconvenience. Some patches has been merged only into the master branch, so the master branch and the DevelNUI branch were conflicted. So I did hard reset the DevelNUI branch. Could you rebase the patch and resolve the conflict? thank you.

the following tip could be helpful : (execute from the work branch)

  1. git fetch upstream
  2. git rebase --onto=upstream/DevelNUI HEAD~1
  3. git push -f (number of commits on the work branch has to be given after '~', for this case it is 1)

dongsug-song avatar Aug 24 '22 09:08 dongsug-song

Public API Changed

Please follow the ACR process for the changed API below.

Added: 2, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ Tizen.NUI.Text.Spans.ISpan

+ /// <since_tizen>none</since_tizen
+ System.String Tizen.NUI.Text.Spans.ISpan::GetMarkupTagName()

Internal API Changed

Added: 23, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spannable

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextEditor,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextField,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::AttachSpan(Tizen.NUI.BaseComponents.TextLabel,Tizen.NUI.Text.Spans.BaseSpan,System.Int32,System.Int32)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextEditor)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextField)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::BuildSpannedText(Tizen.NUI.BaseComponents.TextLabel)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::DetachSpan(Tizen.NUI.BaseComponents.TextEditor,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::DetachSpan(Tizen.NUI.BaseComponents.TextField,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static System.Void Tizen.NUI.Text.Spannable::DetachSpan(Tizen.NUI.BaseComponents.TextLabel,Tizen.NUI.Text.Spans.BaseSpan)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.BaseSpan

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.NUI.Text.Spans.BaseSpan::GetMarkupTagName()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.BaseSpan::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpan

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Boolean Tizen.NUI.Text.Spans.ForegroundColorSpan::ForegroundColorDefined()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Color Tizen.NUI.Text.Spans.ForegroundColorSpan::ForegroundColor()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.ForegroundColorSpan::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static Tizen.NUI.Text.Spans.ForegroundColorSpan Tizen.NUI.Text.Spans.ForegroundColorSpan::CreateWithForegroundColor(Tizen.NUI.Color)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.Void Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef)

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpan Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::Build()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ static Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::Initialize()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder Tizen.NUI.Text.Spans.ForegroundColorSpanBuilder::WithForegroundColor(Tizen.NUI.Color)

TizenAPI-Bot avatar Aug 25 '22 05:08 TizenAPI-Bot

I don't know why need BuildSpannedText method could you explain the reason?

myroot avatar Aug 25 '22 05:08 myroot

I don't know why need BuildSpannedText method could you explain the reason?

@myroot Because we do not want to call Relayout and Rendering functions when the developer Attach span or/and Detach span. This is better for the performance of application.

Usually the developer will attach various spans on many and different ranges. Do Relayout and rendering after each attach/detach could cause performance issue on application level.

So the developer can attach/detach many spans then call 'BuildSpannedText' to call Relayout and Rendering functions.

shrouqsabah avatar Aug 26 '22 12:08 shrouqsabah

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days

github-actions[bot] avatar Oct 25 '22 15:10 github-actions[bot]