Merge "CanvasRenderer::Drawable: Add GetBoundingBox api" into devel/master
authorjunsu choi <jsuya.choi@samsung.com>
Tue, 25 May 2021 01:43:05 +0000 (01:43 +0000)
committerGerrit Code Review <gerrit@review>
Tue, 25 May 2021 01:43:05 +0000 (01:43 +0000)
dali/devel-api/adaptor-framework/canvas-renderer-drawable.cpp
dali/devel-api/adaptor-framework/canvas-renderer-drawable.h
dali/internal/canvas-renderer/common/drawable-impl.cpp
dali/internal/canvas-renderer/common/drawable-impl.h
dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp
dali/internal/canvas-renderer/generic/drawable-impl-generic.h
dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp
dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h
dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h

index 4d606e7..1529b42 100644 (file)
@@ -69,6 +69,11 @@ bool CanvasRenderer::Drawable::Transform(const Dali::Matrix3& matrix)
   return GetImplementation(*this).Transform(matrix);
 }
 
+Rect<float> CanvasRenderer::Drawable::GetBoundingBox() const
+{
+  return GetImplementation(*this).GetBoundingBox();
+}
+
 CanvasRenderer::Drawable CanvasRenderer::Drawable::DownCast(BaseHandle handle)
 {
   return CanvasRenderer::Drawable(dynamic_cast<Internal::Adaptor::Drawable*>(handle.GetObjectPtr()));
index a1ec2db..d9f0dd3 100644 (file)
@@ -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<float> GetBoundingBox() const;
+
+  /**
    * @brief Downcast a handle to Drawable handle.
    *
    * If handle points to an InputMethodContext the downcast produces valid
index 27e6e05..46ec161 100644 (file)
@@ -97,6 +97,15 @@ bool Drawable::Transform(const Dali::Matrix3& matrix)
   return pImpl->Transform(matrix);
 }
 
+Rect<float> Drawable::GetBoundingBox() const
+{
+  if(!pImpl)
+  {
+    return Rect<float>(0, 0, 0, 0);
+  }
+  return pImpl->GetBoundingBox();
+}
+
 void Drawable::SetDrawableAdded(bool added)
 {
   if(!pImpl)
index ed302d3..b6f404b 100644 (file)
@@ -86,6 +86,11 @@ public:
   virtual bool Transform(const Dali::Matrix3& matrix);
 
   /**
+   * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox
+   */
+  virtual Rect<float> GetBoundingBox() const;
+
+  /**
    * @brief Set whether drawable added to the other object(canvas or drawable) or not.
    * @param[in] added Ture if added, false otherwise.
    */
index b9755a6..04975a1 100644 (file)
@@ -83,6 +83,11 @@ bool DrawableGeneric::Transform(const Dali::Matrix3& matrix)
   return false;
 }
 
+Rect<float> DrawableGeneric::GetBoundingBox() const
+{
+  return Rect<float>(0, 0, 0, 0);
+}
+
 void DrawableGeneric::SetDrawableAdded(bool added)
 {
 }
index e5af808..4a5e61d 100644 (file)
@@ -78,6 +78,11 @@ public:
   bool Transform(const Dali::Matrix3& matrix) override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox
+   */
+  Rect<float> GetBoundingBox() const override;
+
+  /**
    * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded
    */
   void SetDrawableAdded(bool added) override;
index a3b453e..d8705da 100644 (file)
@@ -186,6 +186,29 @@ bool DrawableTizen::Transform(const Dali::Matrix3& matrix)
 #endif
 }
 
+Rect<float> DrawableTizen::GetBoundingBox() const
+{
+#ifdef THORVG_SUPPORT
+  if(!mTvgPaint)
+  {
+    DALI_LOG_ERROR("Drawable is null\n");
+    return Rect<float>(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<float>(0, 0, 0, 0);
+  }
+  return Rect<float>(x, y, width, height);
+#else
+  return Rect<float>(0, 0, 0, 0);
+#endif
+}
+
 void DrawableTizen::SetDrawableAdded(bool added)
 {
   mAdded = !!added;
index 836dd57..dd1a6be 100644 (file)
@@ -79,6 +79,11 @@ public:
   bool Transform(const Dali::Matrix3& matrix) override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox
+   */
+  Rect<float> GetBoundingBox() const override;
+
+  /**
    * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded
    */
   void SetDrawableAdded(bool added) override;
index cc3de91..4c8a411 100644 (file)
@@ -186,6 +186,29 @@ bool DrawableUbuntu::Transform(const Dali::Matrix3& matrix)
 #endif
 }
 
+Rect<float> DrawableUbuntu::GetBoundingBox() const
+{
+#ifdef THORVG_SUPPORT
+  if(!mTvgPaint)
+  {
+    DALI_LOG_ERROR("Drawable is null\n");
+    return Rect<float>(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<float>(0, 0, 0, 0);
+  }
+  return Rect<float>(x, y, width, height);
+#else
+  return Rect<float>(0, 0, 0, 0);
+#endif
+}
+
 void DrawableUbuntu::SetDrawableAdded(bool added)
 {
   mAdded = !!added;
index 10451e8..81a11df 100644 (file)
@@ -79,7 +79,12 @@ public:
   bool Transform(const Dali::Matrix3& matrix) override;
 
   /**
-   * @copydoc Internal::Adaptor::Drawable::SetdrawableAdded
+   * @copydoc Dali::CanvasRenderer::Drawable::GetBoundingBox
+   */
+  Rect<float> GetBoundingBox() const override;
+
+  /**
+   * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded
    */
   void SetDrawableAdded(bool added) override;