Add manual rendered property to text label
authorBowon Ryu <bowon.ryu@samsung.com>
Fri, 12 Jul 2024 05:02:03 +0000 (14:02 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Fri, 12 Jul 2024 05:02:03 +0000 (14:02 +0900)
Whether the last async rendering result is a manual render.
If it's false, the render result was automatically requested by OnRelayout.

Change-Id: I99798b64bce31d04992403a2dc44ce137e9fa575
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali-toolkit/devel-api/controls/text-controls/text-label-devel.h
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp
dali-toolkit/internal/text/async-text/async-text-loader.h

index f277f95..f3a66c1 100644 (file)
@@ -262,6 +262,13 @@ enum Type
    * ASYNC_MANUAL : users should manually request rendering using the async text method.
    */
   RENDER_MODE,
+
+  /**
+   * @brief Whether the last rendering result is a manual render.
+   * @details Name "manualRender", type Property::BOOLEAN.
+   * @note If it's false, the render result was automatically requested by OnRelayout.
+   */
+  MANUAL_RENDERED,
 };
 
 } // namespace Property
index 787901b..b04f808 100644 (file)
@@ -149,6 +149,7 @@ DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "removeFrontInset
 DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "removeBackInset",              BOOLEAN, REMOVE_BACK_INSET              )
 DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "cutout",                       BOOLEAN, CUTOUT                         )
 DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit,           TextLabel, "renderMode",                   INTEGER, RENDER_MODE                    )
+DALI_DEVEL_PROPERTY_REGISTRATION_READ_ONLY(Toolkit, TextLabel, "manualRendered",               BOOLEAN, MANUAL_RENDERED                )
 
 DALI_ANIMATABLE_PROPERTY_REGISTRATION_WITH_DEFAULT(Toolkit, TextLabel, "textColor",      Color::BLACK,     TEXT_COLOR   )
 DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION(Toolkit,    TextLabel, "textColorRed",   TEXT_COLOR_RED,   TEXT_COLOR, 0)
@@ -957,6 +958,11 @@ Property::Value TextLabel::GetProperty(BaseObject* object, Property::Index index
         value = impl.mController->GetRenderMode();
         break;
       }
+      case Toolkit::DevelTextLabel::Property::MANUAL_RENDERED:
+      {
+        value = impl.mManualRendered;
+        break;
+      }
     }
   }
 
@@ -1630,6 +1636,8 @@ void TextLabel::AsyncLoadComplete(Text::AsyncTextRenderInfo renderInfo)
     mIsManualRendered = true;
   }
 
+  mManualRendered = renderInfo.manualRendered;
+
   EmitAsyncTextRenderedSignal(renderInfo.renderedSize.width + (padding.start + padding.end), renderInfo.renderedSize.height + (padding.top + padding.bottom));
 }
 
@@ -1680,7 +1688,8 @@ TextLabel::TextLabel(ControlBehaviour additionalBehaviour)
   mIsPropertyUpdated(false),
   mIsSizeChanged(false),
   mIsManualRender(false),
-  mIsManualRendered(false)
+  mIsManualRendered(false),
+  mManualRendered(false)
 {
 }
 
@@ -1804,6 +1813,7 @@ void TextLabel::RequestAsyncRenderWithFixedSize(float width, float height)
 
   AsyncTextParameters parameters = GetAsyncTextParameters(contentSize, padding, layoutDirection);
   parameters.renderType = AsyncTextParameters::FIXED_SIZE;
+  parameters.manualRender = true;
 
   TextVisual::UpdateAsyncRenderer(mVisual, parameters);
   mTextUpdateNeeded = false;
@@ -1840,6 +1850,7 @@ void TextLabel::RequestAsyncRenderWithFixedWidth(float width, float heightConstr
 
   AsyncTextParameters parameters = GetAsyncTextParameters(contentSize, padding, layoutDirection);
   parameters.renderType = AsyncTextParameters::FIXED_WIDTH;
+  parameters.manualRender = true;
 
   TextVisual::UpdateAsyncRenderer(mVisual, parameters);
   mTextUpdateNeeded = false;
@@ -1876,6 +1887,7 @@ void TextLabel::RequestAsyncRenderWithConstraint(float widthConstraint, float he
 
   AsyncTextParameters parameters = GetAsyncTextParameters(contentSize, padding, layoutDirection);
   parameters.renderType = AsyncTextParameters::CONSTRAINT;
+  parameters.manualRender = true;
 
   TextVisual::UpdateAsyncRenderer(mVisual, parameters);
   mTextUpdateNeeded = false;
index 14cda70..f3640c2 100644 (file)
@@ -456,6 +456,7 @@ private: // Data
   bool mIsSizeChanged     : 1; // whether the size has been changed or not.
   bool mIsManualRender    : 1; // whether an async manual render has been requested, returns false when completed.
   bool mIsManualRendered  : 1; // whether an async manual render has been completed, returns false on the next relayout.
+  bool mManualRendered    : 1;
 
 protected:
   /**
index 74fcfa0..623b26e 100644 (file)
@@ -1053,6 +1053,7 @@ AsyncTextRenderInfo AsyncTextLoader::Render(AsyncTextParameters& parameters)
   renderInfo.containsColorGlyph    = containsColorGlyph;
   renderInfo.styleEnabled          = styleEnabled;
   renderInfo.isOverlayStyle        = isOverlayStyle;
+  renderInfo.manualRendered        = parameters.manualRender;
 
   if(cutoutEnabled)
   {
index cf87b5e..dd71c00 100644 (file)
@@ -54,6 +54,7 @@ struct AsyncTextParameters
 
   AsyncTextParameters()
   : renderType{FIXED_SIZE},
+    manualRender{false},
     maxTextureSize{0},
     text{},
     fontSize{0.f},
@@ -122,6 +123,7 @@ struct AsyncTextParameters
   }
 
   RenderType renderType;
+  bool manualRender : 1;
 
   int maxTextureSize;     ///< The maximum size of texture.
 
@@ -218,7 +220,8 @@ struct AsyncTextRenderInfo
     styleEnabled(false),
     isOverlayStyle(false),
     isTextDirectionRTL(false),
-    isCutout(false)
+    isCutout(false),
+    manualRendered(false)
   {
   }
 
@@ -242,6 +245,7 @@ struct AsyncTextRenderInfo
   bool          isOverlayStyle;
   bool          isTextDirectionRTL;
   bool          isCutout;
+  bool          manualRendered;
 };
 
 /**