summaryrefslogtreecommitdiffstats
path: root/scene/2d/node_2d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/2d/node_2d.cpp')
-rw-r--r--scene/2d/node_2d.cpp50
1 files changed, 31 insertions, 19 deletions
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp
index 24478fd847..a0eab67f28 100644
--- a/scene/2d/node_2d.cpp
+++ b/scene/2d/node_2d.cpp
@@ -112,12 +112,24 @@ void Node2D::_edit_set_rect(const Rect2 &p_edit_rect) {
}
#endif
-void Node2D::_update_xform_values() {
+void Node2D::_set_xform_dirty(bool p_dirty) const {
+ if (is_group_processing()) {
+ if (p_dirty) {
+ xform_dirty.mt.set();
+ } else {
+ xform_dirty.mt.clear();
+ }
+ } else {
+ xform_dirty.st = p_dirty;
+ }
+}
+
+void Node2D::_update_xform_values() const {
rotation = transform.get_rotation();
skew = transform.get_skew();
position = transform.columns[2];
scale = transform.get_scale();
- xform_dirty.clear();
+ _set_xform_dirty(false);
}
void Node2D::_update_transform() {
@@ -144,8 +156,8 @@ void Node2D::reparent(Node *p_parent, bool p_keep_global_transform) {
void Node2D::set_position(const Point2 &p_pos) {
ERR_THREAD_GUARD;
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
position = p_pos;
_update_transform();
@@ -153,8 +165,8 @@ void Node2D::set_position(const Point2 &p_pos) {
void Node2D::set_rotation(real_t p_radians) {
ERR_THREAD_GUARD;
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
rotation = p_radians;
_update_transform();
@@ -167,8 +179,8 @@ void Node2D::set_rotation_degrees(real_t p_degrees) {
void Node2D::set_skew(real_t p_radians) {
ERR_THREAD_GUARD;
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
skew = p_radians;
_update_transform();
@@ -176,8 +188,8 @@ void Node2D::set_skew(real_t p_radians) {
void Node2D::set_scale(const Size2 &p_scale) {
ERR_THREAD_GUARD;
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
scale = p_scale;
// Avoid having 0 scale values, can lead to errors in physics and rendering.
@@ -192,8 +204,8 @@ void Node2D::set_scale(const Size2 &p_scale) {
Point2 Node2D::get_position() const {
ERR_READ_THREAD_GUARD_V(Point2());
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
return position;
@@ -201,8 +213,8 @@ Point2 Node2D::get_position() const {
real_t Node2D::get_rotation() const {
ERR_READ_THREAD_GUARD_V(0);
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
return rotation;
@@ -215,8 +227,8 @@ real_t Node2D::get_rotation_degrees() const {
real_t Node2D::get_skew() const {
ERR_READ_THREAD_GUARD_V(0);
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
return skew;
@@ -224,8 +236,8 @@ real_t Node2D::get_skew() const {
Size2 Node2D::get_scale() const {
ERR_READ_THREAD_GUARD_V(Size2());
- if (xform_dirty.is_set()) {
- const_cast<Node2D *>(this)->_update_xform_values();
+ if (_is_xform_dirty()) {
+ _update_xform_values();
}
return scale;
@@ -362,7 +374,7 @@ void Node2D::set_global_scale(const Size2 &p_scale) {
void Node2D::set_transform(const Transform2D &p_transform) {
ERR_THREAD_GUARD;
transform = p_transform;
- xform_dirty.set();
+ _set_xform_dirty(true);
RenderingServer::get_singleton()->canvas_item_set_transform(get_canvas_item(), transform);