From 781b3ff5fdaa7f761a235aa5abf42d6e55981945 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 4 May 2021 13:51:33 +0900 Subject: [PATCH] CanvasRenderer::Drawable: Add GetBoundingBox api Add GetBoundingBox api that uses thorvg's tvg::paint::bounds() api. Change-Id: I7faaef2d7ce3e151f22278d76a2a4d491afe62dc --- .../adaptor-framework/canvas-renderer-drawable.cpp | 5 +++++ .../adaptor-framework/canvas-renderer-drawable.h | 7 +++++++ .../canvas-renderer/common/drawable-impl.cpp | 9 +++++++++ .../canvas-renderer/common/drawable-impl.h | 5 +++++ .../generic/drawable-impl-generic.cpp | 5 +++++ .../generic/drawable-impl-generic.h | 5 +++++ .../canvas-renderer/tizen/drawable-impl-tizen.cpp | 23 ++++++++++++++++++++++ .../canvas-renderer/tizen/drawable-impl-tizen.h | 5 +++++ .../ubuntu/drawable-impl-ubuntu.cpp | 23 ++++++++++++++++++++++ .../canvas-renderer/ubuntu/drawable-impl-ubuntu.h | 7 ++++++- 10 files changed, 93 insertions(+), 1 deletion(-) diff --git a/dali/devel-api/adaptor-framework/canvas-renderer-drawable.cpp b/dali/devel-api/adaptor-framework/canvas-renderer-drawable.cpp index 4d606e7..1529b42 100644 --- a/dali/devel-api/adaptor-framework/canvas-renderer-drawable.cpp +++ b/dali/devel-api/adaptor-framework/canvas-renderer-drawable.cpp @@ -69,6 +69,11 @@ bool CanvasRenderer::Drawable::Transform(const Dali::Matrix3& matrix) return GetImplementation(*this).Transform(matrix); } +Rect CanvasRenderer::Drawable::GetBoundingBox() const +{ + return GetImplementation(*this).GetBoundingBox(); +} + CanvasRenderer::Drawable CanvasRenderer::Drawable::DownCast(BaseHandle handle) { return CanvasRenderer::Drawable(dynamic_cast(handle.GetObjectPtr())); diff --git a/dali/devel-api/adaptor-framework/canvas-renderer-drawable.h b/dali/devel-api/adaptor-framework/canvas-renderer-drawable.h index a1ec2db..d9f0dd3 100644 --- a/dali/devel-api/adaptor-framework/canvas-renderer-drawable.h +++ b/dali/devel-api/adaptor-framework/canvas-renderer-drawable.h @@ -108,6 +108,13 @@ public: bool Transform(const Dali::Matrix3& matrix); /** + * @brief Gets the bounding box of the drawable object before any transformation. + * @note The bounding box doesn't indicate the rendering region in the result but primitive region of the object. + * @return Returns the bounding box information. + */ + Rect GetBoundingBox() const; + + /** * @brief Downcast a handle to Drawable handle. * * If handle points to an InputMethodContext the downcast produces valid diff --git a/dali/internal/canvas-renderer/common/drawable-impl.cpp b/dali/internal/canvas-renderer/common/drawable-impl.cpp index 27e6e05..46ec161 100644 --- a/dali/internal/canvas-renderer/common/drawable-impl.cpp +++ b/dali/internal/canvas-renderer/common/drawable-impl.cpp @@ -97,6 +97,15 @@ bool Drawable::Transform(const Dali::Matrix3& matrix) return pImpl->Transform(matrix); } +Rect Drawable::GetBoundingBox() const +{ + if(!pImpl) + { + return Rect(0, 0, 0, 0); + } + return pImpl->GetBoundingBox(); +} + void Drawable::SetDrawableAdded(bool added) { if(!pImpl) diff --git a/dali/internal/canvas-renderer/common/drawable-impl.h b/dali/internal/canvas-renderer/common/drawable-impl.h index ed302d3..b6f404b 100644 --- a/dali/internal/canvas-renderer/common/drawable-impl.h +++ b/dali/internal/canvas-renderer/common/drawable-impl.h @@ -86,6 +86,11 @@ public: virtual bool Transform(const Dali::Matrix3& matrix); /** + * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox + */ + virtual Rect GetBoundingBox() const; + + /** * @brief Set whether drawable added to the other object(canvas or drawable) or not. * @param[in] added Ture if added, false otherwise. */ diff --git a/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp b/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp index b9755a6..04975a1 100644 --- a/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp +++ b/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp @@ -83,6 +83,11 @@ bool DrawableGeneric::Transform(const Dali::Matrix3& matrix) return false; } +Rect DrawableGeneric::GetBoundingBox() const +{ + return Rect(0, 0, 0, 0); +} + void DrawableGeneric::SetDrawableAdded(bool added) { } diff --git a/dali/internal/canvas-renderer/generic/drawable-impl-generic.h b/dali/internal/canvas-renderer/generic/drawable-impl-generic.h index e5af808..4a5e61d 100644 --- a/dali/internal/canvas-renderer/generic/drawable-impl-generic.h +++ b/dali/internal/canvas-renderer/generic/drawable-impl-generic.h @@ -78,6 +78,11 @@ public: bool Transform(const Dali::Matrix3& matrix) override; /** + * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox + */ + Rect GetBoundingBox() const override; + + /** * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded */ void SetDrawableAdded(bool added) override; diff --git a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp index a3b453e..d8705da 100644 --- a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp @@ -186,6 +186,29 @@ bool DrawableTizen::Transform(const Dali::Matrix3& matrix) #endif } +Rect DrawableTizen::GetBoundingBox() const +{ +#ifdef THORVG_SUPPORT + if(!mTvgPaint) + { + DALI_LOG_ERROR("Drawable is null\n"); + return Rect(0, 0, 0, 0); + } + + float x, y, width, height; + x = y = width = height = 0; + + if(mTvgPaint->bounds(&x, &y, &width, &height) != tvg::Result::Success) + { + DALI_LOG_ERROR("Get bounds fail.\n"); + return Rect(0, 0, 0, 0); + } + return Rect(x, y, width, height); +#else + return Rect(0, 0, 0, 0); +#endif +} + void DrawableTizen::SetDrawableAdded(bool added) { mAdded = !!added; diff --git a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h index 836dd57..dd1a6be 100644 --- a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h +++ b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h @@ -79,6 +79,11 @@ public: bool Transform(const Dali::Matrix3& matrix) override; /** + * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox + */ + Rect GetBoundingBox() const override; + + /** * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded */ void SetDrawableAdded(bool added) override; diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp index cc3de91..4c8a411 100644 --- a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp +++ b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp @@ -186,6 +186,29 @@ bool DrawableUbuntu::Transform(const Dali::Matrix3& matrix) #endif } +Rect DrawableUbuntu::GetBoundingBox() const +{ +#ifdef THORVG_SUPPORT + if(!mTvgPaint) + { + DALI_LOG_ERROR("Drawable is null\n"); + return Rect(0, 0, 0, 0); + } + + float x, y, width, height; + x = y = width = height = 0; + + if(mTvgPaint->bounds(&x, &y, &width, &height) != tvg::Result::Success) + { + DALI_LOG_ERROR("Get bounds fail.\n"); + return Rect(0, 0, 0, 0); + } + return Rect(x, y, width, height); +#else + return Rect(0, 0, 0, 0); +#endif +} + void DrawableUbuntu::SetDrawableAdded(bool added) { mAdded = !!added; diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h index 10451e8..81a11df 100644 --- a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h +++ b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h @@ -79,7 +79,12 @@ public: bool Transform(const Dali::Matrix3& matrix) override; /** - * @copydoc Internal::Adaptor::Drawable::SetdrawableAdded + * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox + */ + Rect GetBoundingBox() const override; + + /** + * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded */ void SetDrawableAdded(bool added) override; -- 2.7.4