From 1036a23d4a1f348a782f308d9581ca34a776c0c2 Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Sun, 17 Mar 2024 16:24:10 +0300 Subject: [PATCH] Editor: Actor have two transforms after adding UI component. #698 --- engine/includes/components/actor.h | 1 + engine/src/components/actor.cpp | 8 +++++++- modules/uikit/src/components/widget.cpp | 14 +++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/engine/includes/components/actor.h b/engine/includes/components/actor.h index a95203723..9b4752259 100644 --- a/engine/includes/components/actor.h +++ b/engine/includes/components/actor.h @@ -39,6 +39,7 @@ class ENGINE_EXPORT Actor : public Object { ~Actor(); Transform *transform(); + void setTransform(Transform *transform); Scene *scene() const; diff --git a/engine/src/components/actor.cpp b/engine/src/components/actor.cpp index 35d3563a7..dba9a939f 100644 --- a/engine/src/components/actor.cpp +++ b/engine/src/components/actor.cpp @@ -199,10 +199,16 @@ void Actor::setLayers(const int layers) { Transform *Actor::transform() { PROFILE_FUNCTION(); if(m_transform == nullptr) { - m_transform = static_cast(component(gTransform)); + setTransform(static_cast(component(gTransform))); } return m_transform; } +/*! + Replaces an existant \a transform with new one. +*/ +void Actor::setTransform(Transform *transform) { + m_transform = transform; +} /*! Returns the scene where actor attached to. */ diff --git a/modules/uikit/src/components/widget.cpp b/modules/uikit/src/components/widget.cpp index 01ddac9f7..e08834312 100644 --- a/modules/uikit/src/components/widget.cpp +++ b/modules/uikit/src/components/widget.cpp @@ -290,7 +290,19 @@ void Widget::actorParentChanged() { Internal method to compose the widget component, creating and setting the RectTransform. */ void Widget::composeComponent() { - setRectTransform(Engine::objectCreate("RectTransform", actor())); + Actor *a = actor(); + + if(a) { + Transform *transform = a->transform(); + if(transform) { + delete transform; + } + + RectTransform *rect = Engine::objectCreate("RectTransform", a); + a->setTransform(rect); + + setRectTransform(rect); + } } /*! \internal