void Node2D::_edit_set_rect(const Rect2 &p_edit_rect) { ERR_FAIL_COND(!_edit_use_rect()); Rect2 r = _edit_get_rect(); Vector2 zero_offset; if (r.size.x != 0) zero_offset.x = -r.position.x / r.size.x; if (r.size.y != 0) zero_offset.y = -r.position.y / r.size.y; Size2 new_scale(1, 1); if (r.size.x != 0) new_scale.x = p_edit_rect.size.x / r.size.x; if (r.size.y != 0) new_scale.y = p_edit_rect.size.y / r.size.y; Point2 new_pos = p_edit_rect.position + p_edit_rect.size * zero_offset; Transform2D postxf; postxf.set_rotation_and_scale(angle, _scale); new_pos = postxf.xform(new_pos); pos += new_pos; _scale *= new_scale; _update_transform(); _change_notify("scale"); _change_notify("position"); }
Rect2 CanvasItem::_edit_get_item_and_children_rect() const { Rect2 rect = _edit_get_rect(); for (int i = 0; i < get_child_count(); i++) { CanvasItem *c = Object::cast_to<CanvasItem>(get_child(i)); if (c) { Rect2 sir = c->get_transform().xform(c->_edit_get_item_and_children_rect()); rect = rect.merge(sir); } } return rect; }