From: Bowon Ryu Date: Mon, 15 Jul 2024 11:33:25 +0000 (+0900) Subject: Add async line count to text label X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=871de89b4feb25857b7882d16e78b811b94888fb;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Add async line count to text label Number of lines after latest asynchronous computing or rendering of text. Change-Id: I68ce2d2096dec07d1e96bfd9fbc6805dcf07cb5d Signed-off-by: Bowon Ryu --- diff --git a/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h b/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h index ee303e8..652cac9 100644 --- a/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h +++ b/dali-toolkit/devel-api/controls/text-controls/text-label-devel.h @@ -269,6 +269,13 @@ enum Type * @note If it's false, the render result was automatically requested by OnRelayout. */ MANUAL_RENDERED, + + /** + * @brief Number of lines after latest asynchronous computing or rendering of text. + * @details Name "asyncLineCount", type Property::INTERGER. + * @note This property is read-only. + */ + ASYNC_LINE_COUNT, }; } // namespace Property 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 b348f4e..9841106 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -150,6 +150,7 @@ DALI_DEVEL_PROPERTY_REGISTRATION(Toolkit, TextLabel, "removeBackInset" 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_DEVEL_PROPERTY_REGISTRATION_READ_ONLY(Toolkit, TextLabel, "asyncLineCount", INTEGER, ASYNC_LINE_COUNT ) 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) @@ -965,6 +966,11 @@ Property::Value TextLabel::GetProperty(BaseObject* object, Property::Index index value = impl.mManualRendered; break; } + case Toolkit::DevelTextLabel::Property::ASYNC_LINE_COUNT: + { + value = impl.mAsyncLineCount; + break; + } } } @@ -1651,24 +1657,20 @@ void TextLabel::AsyncSizeComputed(Text::AsyncTextRenderInfo renderInfo) { case Async::COMPUTE_NATURAL_SIZE: { - DALI_LOG_RELEASE_INFO("Natural size : %f, %f\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height); + DALI_LOG_RELEASE_INFO("Natural size : %f, %f, line count : %d\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height, renderInfo.lineCount); + mAsyncLineCount = renderInfo.lineCount; EmitAsyncNaturalSizeComputedSignal(renderInfo.renderedSize.width, renderInfo.renderedSize.height); } break; case Async::COMPUTE_HEIGHT_FOR_WIDTH: { - DALI_LOG_RELEASE_INFO("Height for width : %f, %f\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height); + DALI_LOG_RELEASE_INFO("Height for width : %f, %f, line count : %d\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height, renderInfo.lineCount); + mAsyncLineCount = renderInfo.lineCount; EmitAsyncHeightForWidthComputedSignal(renderInfo.renderedSize.width, renderInfo.renderedSize.height); } break; - case Async::COMPUTE_LINE_COUNT: - { - // TODO - } - break; - default: { DALI_LOG_ERROR("Unexpected request type recieved : %d\n", renderInfo.requestType); @@ -1680,7 +1682,7 @@ void TextLabel::AsyncSizeComputed(Text::AsyncTextRenderInfo renderInfo) void TextLabel::AsyncLoadComplete(Text::AsyncTextRenderInfo renderInfo) { // Pure Virtual from AsyncTextInterface - DALI_LOG_RELEASE_INFO("Rendered size : %f, %f\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height); + DALI_LOG_RELEASE_INFO("Rendered size : %f, %f, line count : %d\n", renderInfo.renderedSize.width, renderInfo.renderedSize.height, renderInfo.lineCount); // To avoid flickering issues, enable/disable the background visual when async load is completed. EnableControlBackground(!mController->IsTextCutout()); @@ -1697,6 +1699,7 @@ void TextLabel::AsyncLoadComplete(Text::AsyncTextRenderInfo renderInfo) } mManualRendered = renderInfo.manualRendered; + mAsyncLineCount = renderInfo.lineCount; EmitAsyncTextRenderedSignal(renderInfo.renderedSize.width + (padding.start + padding.end), renderInfo.renderedSize.height + (padding.top + padding.bottom)); } @@ -1758,6 +1761,7 @@ TextLabel::TextLabel(ControlBehaviour additionalBehaviour) mLocale(std::string()), mSize(), mRenderingBackend(DEFAULT_RENDERING_BACKEND), + mAsyncLineCount(0), mTextUpdateNeeded(false), mLastAutoScrollEnabled(false), mControlBackgroundEnabeld(true), diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index 9cb16c4..3a82155 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -488,6 +488,7 @@ private: // Data Vector2 mSize; int mRenderingBackend; + int mAsyncLineCount; bool mTextUpdateNeeded : 1; bool mLastAutoScrollEnabled : 1; bool mControlBackgroundEnabeld : 1; diff --git a/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp b/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp index 14aaff2..3bda360 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp +++ b/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp @@ -1054,6 +1054,7 @@ AsyncTextRenderInfo AsyncTextLoader::Render(AsyncTextParameters& parameters) renderInfo.styleEnabled = styleEnabled; renderInfo.isOverlayStyle = isOverlayStyle; renderInfo.manualRendered = parameters.manualRender; + renderInfo.lineCount = mTextModel->GetNumberOfLines(); if(cutoutEnabled) { @@ -1172,7 +1173,8 @@ AsyncTextRenderInfo AsyncTextLoader::GetHeightForWidth(AsyncTextParameters& para AsyncTextRenderInfo renderInfo; renderInfo.renderedSize.width = parameters.textWidth; renderInfo.renderedSize.height = height; - renderInfo.requestType = Async::COMPUTE_HEIGHT_FOR_WIDTH; + renderInfo.requestType = Async::COMPUTE_HEIGHT_FOR_WIDTH; + renderInfo.lineCount = mTextModel->GetNumberOfLines(); return renderInfo; } @@ -1183,6 +1185,7 @@ AsyncTextRenderInfo AsyncTextLoader::GetNaturalSize(AsyncTextParameters& paramet AsyncTextRenderInfo renderInfo; renderInfo.renderedSize = textNaturalSize; renderInfo.requestType = Async::COMPUTE_NATURAL_SIZE; + renderInfo.lineCount = mTextModel->GetNumberOfLines(); return renderInfo; } diff --git a/dali-toolkit/internal/text/async-text/async-text-loader.h b/dali-toolkit/internal/text/async-text/async-text-loader.h index 4935b9b..4f8974b 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader.h +++ b/dali-toolkit/internal/text/async-text/async-text-loader.h @@ -52,7 +52,6 @@ namespace Async RENDER_CONSTRAINT, COMPUTE_NATURAL_SIZE, COMPUTE_HEIGHT_FOR_WIDTH, - COMPUTE_LINE_COUNT }; } // namespace Async @@ -228,6 +227,7 @@ struct AsyncTextRenderInfo isTextDirectionRTL(false), isCutout(false), manualRendered(false), + lineCount(0), requestType(Async::RENDER_FIXED_SIZE) { } @@ -253,6 +253,7 @@ struct AsyncTextRenderInfo bool isTextDirectionRTL; bool isCutout; bool manualRendered; + int lineCount; Async::RequestType requestType; }; diff --git a/dali-toolkit/internal/text/async-text/text-loading-task.cpp b/dali-toolkit/internal/text/async-text/text-loading-task.cpp index ef62f33..5c74869 100644 --- a/dali-toolkit/internal/text/async-text/text-loading-task.cpp +++ b/dali-toolkit/internal/text/async-text/text-loading-task.cpp @@ -127,12 +127,6 @@ void TextLoadingTask::Load() } break; - case Text::Async::COMPUTE_LINE_COUNT: - { - // TODO - } - break; - default: { DALI_LOG_ERROR("Unexpected request type recieved : %d\n", mParameters.requestType); diff --git a/dali-toolkit/internal/visuals/text/text-visual.cpp b/dali-toolkit/internal/visuals/text/text-visual.cpp index c4c3c77..82b3c67 100644 --- a/dali-toolkit/internal/visuals/text/text-visual.cpp +++ b/dali-toolkit/internal/visuals/text/text-visual.cpp @@ -729,9 +729,7 @@ void TextVisual::LoadComplete(bool loadingSuccess, TextInformation textInformati Text::AsyncTextRenderInfo renderInfo = textInformation.renderInfo; Text::AsyncTextParameters parameters = textInformation.parameters; - if(parameters.requestType == Text::Async::COMPUTE_NATURAL_SIZE || - parameters.requestType == Text::Async::COMPUTE_HEIGHT_FOR_WIDTH || - parameters.requestType == Text::Async::COMPUTE_LINE_COUNT) + if(parameters.requestType == Text::Async::COMPUTE_NATURAL_SIZE || parameters.requestType == Text::Async::COMPUTE_HEIGHT_FOR_WIDTH) { if(mAsyncTextInterface) {