From cacced7e507f7603bacc03ae2616e58f0ede122a Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Thu, 24 Aug 2017 22:58:51 +0200 Subject: Convert Object::cast_to() to the static version Currently we rely on some undefined behavior when Object->cast_to() gets called with a Null pointer. This used to work fine with GCC < 6 but newer versions of GCC remove all codepaths in which the this pointer is Null. However, the non-static cast_to() was supposed to be null safe. This patch makes cast_to() Null safe and removes the now redundant Null checks where they existed. It is explained in this article: https://www.viva64.com/en/b/0226/ --- editor/plugins/canvas_item_editor_plugin.cpp | 252 +++++++++++++-------------- 1 file changed, 120 insertions(+), 132 deletions(-) (limited to 'editor/plugins/canvas_item_editor_plugin.cpp') diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 79bf68b06..0dcabb177 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -175,7 +175,7 @@ void CanvasItemEditor::_edit_set_pivot(const Vector2 &mouse_pos) { for (List::Element *E = selection.front(); E; E = E->next()) { - Node2D *n2d = E->get()->cast_to(); + Node2D *n2d = Object::cast_to(E->get()); if (n2d && n2d->edit_has_pivot()) { Vector2 offset = n2d->edit_get_pivot(); @@ -190,7 +190,7 @@ void CanvasItemEditor::_edit_set_pivot(const Vector2 &mouse_pos) { undo_redo->add_undo_method(n2d, "set_global_position", gpos); undo_redo->add_undo_method(n2d, "edit_set_pivot", offset); for (int i = 0; i < n2d->get_child_count(); i++) { - Node2D *n2dc = n2d->get_child(i)->cast_to(); + Node2D *n2dc = Object::cast_to(n2d->get_child(i)); if (!n2dc) continue; @@ -199,7 +199,7 @@ void CanvasItemEditor::_edit_set_pivot(const Vector2 &mouse_pos) { } } - Control *cnt = E->get()->cast_to(); + Control *cnt = Object::cast_to(E->get()); if (cnt) { Vector2 old_pivot = cnt->get_pivot_offset(); @@ -265,7 +265,7 @@ void CanvasItemEditor::_tool_select(int p_index) { Object *CanvasItemEditor::_get_editor_data(Object *p_what) { - CanvasItem *ci = p_what->cast_to(); + CanvasItem *ci = Object::cast_to(p_what); if (!ci) return NULL; @@ -413,7 +413,7 @@ void CanvasItemEditor::_visibility_changed(ObjectID p_canvas_item) { Object *c = ObjectDB::get_instance(p_canvas_item); if (!c) return; - CanvasItem *ct = c->cast_to(); + CanvasItem *ct = Object::cast_to(c); if (!ct) return; canvas_items.erase(ct); @@ -451,17 +451,17 @@ bool CanvasItemEditor::_is_part_of_subscene(CanvasItem *p_item) { void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_node, const Transform2D &p_parent_xform, const Transform2D &p_canvas_xform, Vector<_SelectResult> &r_items, unsigned int limit) { if (!p_node) return; - if (p_node->cast_to()) + if (Object::cast_to(p_node)) return; - CanvasItem *c = p_node->cast_to(); + CanvasItem *c = Object::cast_to(p_node); for (int i = p_node->get_child_count() - 1; i >= 0; i--) { if (c && !c->is_set_as_toplevel()) _find_canvas_items_at_pos(p_pos, p_node->get_child(i), p_parent_xform * c->get_transform(), p_canvas_xform, r_items); else { - CanvasLayer *cl = p_node->cast_to(); + CanvasLayer *cl = Object::cast_to(p_node); _find_canvas_items_at_pos(p_pos, p_node->get_child(i), transform, cl ? cl->get_transform() : p_canvas_xform, r_items); //use base transform } @@ -469,13 +469,13 @@ void CanvasItemEditor::_find_canvas_items_at_pos(const Point2 &p_pos, Node *p_no return; } - if (c && c->is_visible_in_tree() && !c->has_meta("_edit_lock_") && !c->cast_to()) { + if (c && c->is_visible_in_tree() && !c->has_meta("_edit_lock_") && !Object::cast_to(c)) { Rect2 rect = c->get_item_rect(); Point2 local_pos = (p_parent_xform * p_canvas_xform * c->get_transform()).affine_inverse().xform(p_pos); if (rect.has_point(local_pos)) { - Node2D *node = c->cast_to(); + Node2D *node = Object::cast_to(c); _SelectResult res; res.item = c; @@ -492,10 +492,10 @@ void CanvasItemEditor::_find_canvas_items_at_rect(const Rect2 &p_rect, Node *p_n if (!p_node) return; - if (p_node->cast_to()) + if (Object::cast_to(p_node)) return; - CanvasItem *c = p_node->cast_to(); + CanvasItem *c = Object::cast_to(p_node); bool inherited = p_node != get_tree()->get_edited_scene_root() && p_node->get_filename() != ""; bool editable = false; @@ -509,13 +509,13 @@ void CanvasItemEditor::_find_canvas_items_at_rect(const Rect2 &p_rect, Node *p_n if (c && !c->is_set_as_toplevel()) _find_canvas_items_at_rect(p_rect, p_node->get_child(i), p_parent_xform * c->get_transform(), p_canvas_xform, r_items); else { - CanvasLayer *cl = p_node->cast_to(); + CanvasLayer *cl = Object::cast_to(p_node); _find_canvas_items_at_rect(p_rect, p_node->get_child(i), transform, cl ? cl->get_transform() : p_canvas_xform, r_items); } } } - if (c && c->is_visible_in_tree() && !c->has_meta("_edit_lock_") && !c->cast_to()) { + if (c && c->is_visible_in_tree() && !c->has_meta("_edit_lock_") && !Object::cast_to(c)) { Rect2 rect = c->get_item_rect(); Transform2D xform = p_parent_xform * p_canvas_xform * c->get_transform(); @@ -590,7 +590,7 @@ void CanvasItemEditor::_key_move(const Vector2 &p_dir, bool p_snap, KeyMoveMODE for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -619,7 +619,7 @@ void CanvasItemEditor::_key_move(const Vector2 &p_dir, bool p_snap, KeyMoveMODE } else { // p_move_mode==MOVE_LOCAL_BASE || p_move_mode==MOVE_LOCAL_WITH_ROT - if (Node2D *node_2d = canvas_item->cast_to()) { + if (Node2D *node_2d = Object::cast_to(canvas_item)) { if (p_move_mode == MOVE_LOCAL_WITH_ROT) { Transform2D m; @@ -628,7 +628,7 @@ void CanvasItemEditor::_key_move(const Vector2 &p_dir, bool p_snap, KeyMoveMODE } node_2d->set_position(node_2d->get_position() + drag); - } else if (Control *control = canvas_item->cast_to()) { + } else if (Control *control = Object::cast_to(canvas_item)) { control->set_position(control->get_position() + drag); } @@ -648,7 +648,7 @@ Point2 CanvasItemEditor::_find_topleftmost_point() { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -673,7 +673,7 @@ int CanvasItemEditor::get_item_count() { int ic = 0; for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; @@ -694,7 +694,7 @@ CanvasItem *CanvasItemEditor::get_single_item() { for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->key()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->key()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -822,7 +822,7 @@ CanvasItemEditor::DragType CanvasItemEditor::_get_anchor_handle_drag_type(const CanvasItem *canvas_item = get_single_item(); ERR_FAIL_COND_V(!canvas_item, DRAG_NONE); - Control *control = canvas_item->cast_to(); + Control *control = Object::cast_to(canvas_item); ERR_FAIL_COND_V(!control, DRAG_NONE); Vector2 anchor_pos[4]; @@ -865,7 +865,7 @@ void CanvasItemEditor::_prepare_drag(const Point2 &p_click_pos) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -876,15 +876,15 @@ void CanvasItemEditor::_prepare_drag(const Point2 &p_click_pos) { continue; se->undo_state = canvas_item->edit_get_state(); - if (canvas_item->cast_to()) - se->undo_pivot = canvas_item->cast_to()->edit_get_pivot(); - if (canvas_item->cast_to()) - se->undo_pivot = canvas_item->cast_to()->get_pivot_offset(); + if (Object::cast_to(canvas_item)) + se->undo_pivot = Object::cast_to(canvas_item)->edit_get_pivot(); + if (Object::cast_to(canvas_item)) + se->undo_pivot = Object::cast_to(canvas_item)->get_pivot_offset(); } - if (selection.size() == 1 && selection[0]->cast_to()) { + if (selection.size() == 1 && Object::cast_to(selection[0])) { drag = DRAG_NODE_2D; - drag_point_from = selection[0]->cast_to()->get_global_position(); + drag_point_from = Object::cast_to(selection[0])->get_global_position(); } else { drag = DRAG_ALL; drag_point_from = _find_topleftmost_point(); @@ -1169,7 +1169,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { List &selection = editor_selection->get_selected_node_list(); for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -1180,10 +1180,10 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { continue; canvas_item->edit_set_state(se->undo_state); - if (canvas_item->cast_to()) - canvas_item->cast_to()->edit_set_pivot(se->undo_pivot); - if (canvas_item->cast_to()) - canvas_item->cast_to()->set_pivot_offset(se->undo_pivot); + if (Object::cast_to(canvas_item)) + Object::cast_to(canvas_item)->edit_set_pivot(se->undo_pivot); + if (Object::cast_to(canvas_item)) + Object::cast_to(canvas_item)->set_pivot_offset(se->undo_pivot); } } @@ -1251,7 +1251,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -1265,13 +1265,13 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { undo_redo->add_do_method(canvas_item, "edit_set_state", state); undo_redo->add_undo_method(canvas_item, "edit_set_state", se->undo_state); { - Node2D *pvt = canvas_item->cast_to(); + Node2D *pvt = Object::cast_to(canvas_item); if (pvt && pvt->edit_has_pivot()) { undo_redo->add_do_method(canvas_item, "edit_set_pivot", pvt->edit_get_pivot()); undo_redo->add_undo_method(canvas_item, "edit_set_pivot", se->undo_pivot); } - Control *cnt = canvas_item->cast_to(); + Control *cnt = Object::cast_to(canvas_item); if (cnt) { undo_redo->add_do_method(canvas_item, "set_pivot_offset", cnt->get_pivot_offset()); undo_redo->add_undo_method(canvas_item, "set_pivot_offset", se->undo_pivot); @@ -1341,10 +1341,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { } if (Cbone) { - Node2D *b = NULL; - Object *obj = ObjectDB::get_instance(Cbone->get().bone); - if (obj) - b = obj->cast_to(); + Node2D *b = Object::cast_to(ObjectDB::get_instance(Cbone->get().bone)); if (b) { @@ -1359,7 +1356,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { break; float len = pi->get_global_transform().get_origin().distance_to(b->get_global_position()); - b = pi->cast_to(); + b = Object::cast_to(pi); if (!b) break; @@ -1405,10 +1402,10 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { drag = DRAG_ROTATE; drag_from = transform.affine_inverse().xform(click); se->undo_state = canvas_item->edit_get_state(); - if (canvas_item->cast_to()) - se->undo_pivot = canvas_item->cast_to()->edit_get_pivot(); - if (canvas_item->cast_to()) - se->undo_pivot = canvas_item->cast_to()->get_pivot_offset(); + if (Object::cast_to(canvas_item)) + se->undo_pivot = Object::cast_to(canvas_item)->edit_get_pivot(); + if (Object::cast_to(canvas_item)) + se->undo_pivot = Object::cast_to(canvas_item)->get_pivot_offset(); return; } @@ -1426,15 +1423,15 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { if (drag != DRAG_NONE) { drag_from = transform.affine_inverse().xform(click); se->undo_state = canvas_item->edit_get_state(); - if (canvas_item->cast_to()) - se->undo_pivot = canvas_item->cast_to()->edit_get_pivot(); - if (canvas_item->cast_to()) - se->undo_pivot = canvas_item->cast_to()->get_pivot_offset(); + if (Object::cast_to(canvas_item)) + se->undo_pivot = Object::cast_to(canvas_item)->edit_get_pivot(); + if (Object::cast_to(canvas_item)) + se->undo_pivot = Object::cast_to(canvas_item)->get_pivot_offset(); return; } // Drag anchor handles - if (canvas_item->cast_to()) { + if (Object::cast_to(canvas_item)) { drag = _get_anchor_handle_drag_type(click, drag_point_from); if (drag != DRAG_NONE) { drag_from = transform.affine_inverse().xform(click); @@ -1457,9 +1454,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { CanvasItem *c = NULL; if (Cbone) { - Object *obj = ObjectDB::get_instance(Cbone->get().bone); - if (obj) - c = obj->cast_to(); + c = Object::cast_to(ObjectDB::get_instance(Cbone->get().bone)); if (c) c = c->get_parent_item(); } @@ -1489,7 +1484,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { }; if (n) { - c = n->cast_to(); + c = Object::cast_to(n); } else { c = NULL; } @@ -1537,7 +1532,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { List &selection = editor_selection->get_selected_node_list(); for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -1551,10 +1546,10 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { if (!dragging_bone) { canvas_item->edit_set_state(se->undo_state); //reset state and reapply - if (canvas_item->cast_to()) - canvas_item->cast_to()->edit_set_pivot(se->undo_pivot); - if (canvas_item->cast_to()) - canvas_item->cast_to()->set_pivot_offset(se->undo_pivot); + if (Object::cast_to(canvas_item)) + Object::cast_to(canvas_item)->edit_set_pivot(se->undo_pivot); + if (Object::cast_to(canvas_item)) + Object::cast_to(canvas_item)->set_pivot_offset(se->undo_pivot); } Vector2 dfrom = drag_from; @@ -1566,7 +1561,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { // Rotate the node Vector2 center = canvas_item->get_global_transform_with_canvas().get_origin(); { - Node2D *node = canvas_item->cast_to(); + Node2D *node = Object::cast_to(canvas_item); if (node) { real_t angle = node->get_rotation(); @@ -1578,7 +1573,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { } { - Control *node = canvas_item->cast_to(); + Control *node = Object::cast_to(canvas_item); if (node) { real_t angle = node->get_rotation(); @@ -1592,7 +1587,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { continue; } - Control *control = canvas_item->cast_to(); + Control *control = Object::cast_to(canvas_item); if (control) { // Drag and snap the anchor Vector2 anchor = _position_to_anchor(control, canvas_item->get_global_transform_with_canvas().affine_inverse().xform(dto - drag_from + drag_point_from)); @@ -1728,19 +1723,19 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { case DRAG_PIVOT: - if (canvas_item->cast_to()) { - Node2D *n2d = canvas_item->cast_to(); + if (Object::cast_to(canvas_item)) { + Node2D *n2d = Object::cast_to(canvas_item); n2d->edit_set_pivot(se->undo_pivot + drag_vector); } - if (canvas_item->cast_to()) { - canvas_item->cast_to()->set_pivot_offset(se->undo_pivot + drag_vector); + if (Object::cast_to(canvas_item)) { + Object::cast_to(canvas_item)->set_pivot_offset(se->undo_pivot + drag_vector); } continue; break; case DRAG_NODE_2D: - ERR_FAIL_COND(!canvas_item->cast_to()); - canvas_item->cast_to()->set_global_position(dto); + ERR_FAIL_COND(!Object::cast_to(canvas_item)); + Object::cast_to(canvas_item)->set_global_position(dto); continue; break; } @@ -1754,7 +1749,7 @@ void CanvasItemEditor::_viewport_gui_input(const Ref &p_event) { } else { //ok, all that had to be done was done, now solve IK - Node2D *n2d = canvas_item->cast_to(); + Node2D *n2d = Object::cast_to(canvas_item); Transform2D final_xform = bone_orig_xform; if (n2d) { @@ -1981,7 +1976,7 @@ void CanvasItemEditor::_viewport_draw() { for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->key()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->key()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) @@ -2013,16 +2008,16 @@ void CanvasItemEditor::_viewport_draw() { if (single && (tool == TOOL_SELECT || tool == TOOL_MOVE || tool == TOOL_ROTATE || tool == TOOL_EDIT_PIVOT)) { //kind of sucks - if (canvas_item->cast_to()) { + if (Object::cast_to(canvas_item)) { - if (canvas_item->cast_to()->edit_has_pivot()) { + if (Object::cast_to(canvas_item)->edit_has_pivot()) { viewport->draw_texture(pivot, xform.get_origin() + (-pivot->get_size() / 2).floor()); can_move_pivot = true; pivot_found = true; } } - Control *control = canvas_item->cast_to(); + Control *control = Object::cast_to(canvas_item); if (control) { Vector2 pivot_ofs = control->get_pivot_offset(); if (pivot_ofs != Vector2()) { @@ -2214,11 +2209,7 @@ void CanvasItemEditor::_viewport_draw() { E->get().from = Vector2(); E->get().to = Vector2(); - Object *obj = ObjectDB::get_instance(E->get().bone); - if (!obj) - continue; - - Node2D *n2d = obj->cast_to(); + Node2D *n2d = Object::cast_to(ObjectDB::get_instance(E->get().bone)); if (!n2d) continue; @@ -2227,7 +2218,7 @@ void CanvasItemEditor::_viewport_draw() { CanvasItem *pi = n2d->get_parent_item(); - Node2D *pn2d = n2d->get_parent()->cast_to(); + Node2D *pn2d = Object::cast_to(n2d->get_parent()); if (!pn2d) continue; @@ -2283,14 +2274,14 @@ void CanvasItemEditor::_notification(int p_what) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; - if (canvas_item->cast_to()) + if (Object::cast_to(canvas_item)) has_control = true; else all_control = false; @@ -2304,12 +2295,12 @@ void CanvasItemEditor::_notification(int p_what) { float anchors[4]; Vector2 pivot; - if (canvas_item->cast_to()) { - pivot = canvas_item->cast_to()->get_pivot_offset(); - anchors[MARGIN_LEFT] = canvas_item->cast_to()->get_anchor(MARGIN_LEFT); - anchors[MARGIN_RIGHT] = canvas_item->cast_to()->get_anchor(MARGIN_RIGHT); - anchors[MARGIN_TOP] = canvas_item->cast_to()->get_anchor(MARGIN_TOP); - anchors[MARGIN_BOTTOM] = canvas_item->cast_to()->get_anchor(MARGIN_BOTTOM); + if (Object::cast_to(canvas_item)) { + pivot = Object::cast_to(canvas_item)->get_pivot_offset(); + anchors[MARGIN_LEFT] = Object::cast_to(canvas_item)->get_anchor(MARGIN_LEFT); + anchors[MARGIN_RIGHT] = Object::cast_to(canvas_item)->get_anchor(MARGIN_RIGHT); + anchors[MARGIN_TOP] = Object::cast_to(canvas_item)->get_anchor(MARGIN_TOP); + anchors[MARGIN_BOTTOM] = Object::cast_to(canvas_item)->get_anchor(MARGIN_BOTTOM); } if (r != se->prev_rect || xform != se->prev_xform || pivot != se->prev_pivot || anchors[MARGIN_LEFT] != se->prev_anchors[MARGIN_LEFT] || anchors[MARGIN_RIGHT] != se->prev_anchors[MARGIN_RIGHT] || anchors[MARGIN_TOP] != se->prev_anchors[MARGIN_TOP] || anchors[MARGIN_BOTTOM] != se->prev_anchors[MARGIN_BOTTOM]) { @@ -2338,7 +2329,7 @@ void CanvasItemEditor::_notification(int p_what) { break; } - Node2D *b2 = b->cast_to(); + Node2D *b2 = Object::cast_to(b); if (!b2) { continue; } @@ -2426,7 +2417,7 @@ void CanvasItemEditor::_find_canvas_items_span(Node *p_node, Rect2 &r_rect, cons if (!p_node) return; - CanvasItem *c = p_node->cast_to(); + CanvasItem *c = Object::cast_to(p_node); for (int i = p_node->get_child_count() - 1; i >= 0; i--) { @@ -2587,7 +2578,7 @@ void CanvasItemEditor::_set_anchors_preset(Control::LayoutPreset p_preset) { undo_redo->create_action(TTR("Change Anchors")); for (List::Element *E = selection.front(); E; E = E->next()) { - Control *c = E->get()->cast_to(); + Control *c = Object::cast_to(E->get()); undo_redo->add_do_method(c, "set_anchors_preset", p_preset); undo_redo->add_undo_method(c, "set_anchor", MARGIN_LEFT, c->get_anchor(MARGIN_LEFT)); @@ -2605,7 +2596,7 @@ void CanvasItemEditor::_set_full_rect() { undo_redo->create_action(TTR("Change Anchors")); for (List::Element *E = selection.front(); E; E = E->next()) { - Control *c = E->get()->cast_to(); + Control *c = Object::cast_to(E->get()); undo_redo->add_do_method(c, "set_anchors_preset", PRESET_WIDE); undo_redo->add_do_method(c, "set_margin", MARGIN_LEFT, 0); @@ -2713,7 +2704,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; @@ -2731,7 +2722,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; @@ -2751,7 +2742,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; @@ -2769,7 +2760,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; @@ -2888,15 +2879,15 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->key()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->key()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; - if (canvas_item->cast_to()) { - Node2D *n2d = canvas_item->cast_to(); + if (Object::cast_to(canvas_item)) { + Node2D *n2d = Object::cast_to(canvas_item); if (key_pos) AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(n2d, "position", n2d->get_position(), existing); @@ -2909,7 +2900,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { //look for an IK chain List ik_chain; - Node2D *n = n2d->get_parent_item()->cast_to(); + Node2D *n = Object::cast_to(n2d->get_parent_item()); bool has_chain = false; while (n) { @@ -2922,7 +2913,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { if (!n->get_parent_item()) break; - n = n->get_parent_item()->cast_to(); + n = Object::cast_to(n->get_parent_item()); } if (has_chain && ik_chain.size()) { @@ -2939,9 +2930,9 @@ void CanvasItemEditor::_popup_callback(int p_op) { } } - } else if (canvas_item->cast_to()) { + } else if (Object::cast_to(canvas_item)) { - Control *ctrl = canvas_item->cast_to(); + Control *ctrl = Object::cast_to(canvas_item); if (key_pos) AnimationPlayerEditor::singleton->get_key_editor()->insert_node_value_key(ctrl, "rect_position", ctrl->get_position(), existing); @@ -2998,16 +2989,16 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->key()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->key()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; - if (canvas_item->cast_to()) { + if (Object::cast_to(canvas_item)) { - Node2D *n2d = canvas_item->cast_to(); + Node2D *n2d = Object::cast_to(canvas_item); PoseClipboard pc; pc.pos = n2d->get_position(); pc.rot = n2d->get_rotation(); @@ -3026,10 +3017,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { undo_redo->create_action(TTR("Paste Pose")); for (List::Element *E = pose_clipboard.front(); E; E = E->next()) { - Object *o = ObjectDB::get_instance(E->get().id); - if (!o) - continue; - Node2D *n2d = o->cast_to(); + Node2D *n2d = Object::cast_to(ObjectDB::get_instance(E->get().id)); if (!n2d) continue; undo_redo->add_do_method(n2d, "set_position", E->get().pos); @@ -3048,15 +3036,15 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->key()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->key()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; - if (canvas_item->cast_to()) { - Node2D *n2d = canvas_item->cast_to(); + if (Object::cast_to(canvas_item)) { + Node2D *n2d = Object::cast_to(canvas_item); if (key_pos) n2d->set_position(Vector2()); @@ -3064,9 +3052,9 @@ void CanvasItemEditor::_popup_callback(int p_op) { n2d->set_rotation(0); if (key_scale) n2d->set_scale(Vector2(1, 1)); - } else if (canvas_item->cast_to()) { + } else if (Object::cast_to(canvas_item)) { - Control *ctrl = canvas_item->cast_to(); + Control *ctrl = Object::cast_to(canvas_item); if (key_pos) ctrl->set_position(Point2()); @@ -3090,7 +3078,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (Map::Element *E = selection.front(); E; E = E->next()) { - Node2D *n2d = E->key()->cast_to(); + Node2D *n2d = Object::cast_to(E->key()); if (!n2d) continue; if (!n2d->is_visible_in_tree()) @@ -3111,7 +3099,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (Map::Element *E = selection.front(); E; E = E->next()) { - Node2D *n2d = E->key()->cast_to(); + Node2D *n2d = Object::cast_to(E->key()); if (!n2d) continue; if (!n2d->is_visible_in_tree()) @@ -3130,7 +3118,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (List::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->get()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->get()); if (!canvas_item || !canvas_item->is_visible_in_tree()) continue; @@ -3151,7 +3139,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *n2d = E->key()->cast_to(); + CanvasItem *n2d = Object::cast_to(E->key()); if (!n2d) continue; if (!n2d->is_visible_in_tree()) @@ -3202,7 +3190,7 @@ void CanvasItemEditor::_focus_selection(int p_op) { Map &selection = editor_selection->get_selection(); for (Map::Element *E = selection.front(); E; E = E->next()) { - CanvasItem *canvas_item = E->key()->cast_to(); + CanvasItem *canvas_item = Object::cast_to(E->key()); if (!canvas_item) continue; if (canvas_item->get_viewport() != EditorNode::get_singleton()->get_scene_root()) continue; @@ -3302,7 +3290,7 @@ void CanvasItemEditor::box_selection_start( Point2 &click ) { bool CanvasItemEditor::box_selection_end() { print_line( "box selection end" ); - Node* scene = get_scene()->get_root_node()->cast_to()->get_edited_scene(); + Node* scene = Object::cast_to(get_scene()->get_root_node())->get_edited_scene(); if (scene) { List selitems; @@ -3651,7 +3639,7 @@ CanvasItemEditor *CanvasItemEditor::singleton = NULL; void CanvasItemEditorPlugin::edit(Object *p_object) { canvas_item_editor->set_undo_redo(&get_undo_redo()); - canvas_item_editor->edit(p_object->cast_to()); + canvas_item_editor->edit(Object::cast_to(p_object)); } bool CanvasItemEditorPlugin::handles(Object *p_object) const { @@ -3704,7 +3692,7 @@ void CanvasItemEditorViewport::_on_mouse_exit() { } void CanvasItemEditorViewport::_on_select_type(Object *selected) { - CheckBox *check = selected->cast_to(); + CheckBox *check = Object::cast_to(selected); String type = check->get_text(); selector_label->set_text(vformat(TTR("Add %s"), type)); label->set_text(vformat(TTR("Adding %s..."), type)); @@ -3714,7 +3702,7 @@ void CanvasItemEditorViewport::_on_change_type() { if (!button_group->get_pressed_button()) return; - CheckBox *check = button_group->get_pressed_button()->cast_to(); + CheckBox *check = Object::cast_to(button_group->get_pressed_button()); default_type = check->get_text(); _perform_drop_data(); selector->hide(); @@ -3726,8 +3714,8 @@ void CanvasItemEditorViewport::_create_preview(const Vector &files) cons for (int i = 0; i < files.size(); i++) { String path = files[i]; RES res = ResourceLoader::load(path); - Ref texture = Ref(res->cast_to()); - Ref scene = Ref(res->cast_to()); + Ref texture = Ref(Object::cast_to(*res)); + Ref scene = Ref(Object::cast_to(*res)); if (texture != NULL || scene != NULL) { if (texture != NULL) { Sprite *sprite = memnew(Sprite); @@ -3778,7 +3766,7 @@ bool CanvasItemEditorViewport::_cyclical_dependency_exists(const String &p_targe void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &path, const Point2 &p_point) { child->set_name(path.get_file().get_basename()); - Ref texture = Ref(ResourceCache::get(path)->cast_to()); + Ref texture = Object::cast_to(Ref(ResourceCache::get(path)).ptr()); Size2 texture_size = texture->get_size(); editor_data->get_undo_redo().add_do_method(parent, "add_child", child); @@ -3867,11 +3855,11 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons editor_data->get_undo_redo().add_undo_method(sed, "live_debug_remove_node", NodePath(String(editor->get_edited_scene()->get_path_to(parent)) + "/" + new_name)); Point2 pos; - Node2D *parent_node2d = parent->cast_to(); + Node2D *parent_node2d = Object::cast_to(parent); if (parent_node2d) { pos = parent_node2d->get_global_position(); } else { - Control *parent_control = parent->cast_to(); + Control *parent_control = Object::cast_to(parent); if (parent_control) { pos = parent_control->get_global_position(); } @@ -3879,7 +3867,7 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons Transform2D trans = canvas->get_canvas_transform(); Vector2 target_pos = (p_point - trans.get_origin()) / trans.get_scale().x - pos; // in relative snapping it may be useful for the user to take the original node position into account - Vector2 start_pos = instanced_scene->cast_to() ? instanced_scene->cast_to()->get_position() : target_pos; + Vector2 start_pos = Object::cast_to(instanced_scene) ? Object::cast_to(instanced_scene)->get_position() : target_pos; target_pos = canvas->snap_point(target_pos, start_pos); editor_data->get_undo_redo().add_do_method(instanced_scene, "set_position", target_pos); @@ -3899,8 +3887,8 @@ void CanvasItemEditorViewport::_perform_drop_data() { if (res.is_null()) { continue; } - Ref texture = Ref(res->cast_to()); - Ref scene = Ref(res->cast_to()); + Ref texture = Ref(Object::cast_to(*res)); + Ref scene = Ref(Object::cast_to(*res)); if (texture != NULL) { Node *child; if (default_type == "Light2D") @@ -4016,7 +4004,7 @@ void CanvasItemEditorViewport::drop_data(const Point2 &p_point, const Variant &p button_group->get_buttons(&btn_list); for (int i = 0; i < btn_list.size(); i++) { - CheckBox *check = btn_list[i]->cast_to(); + CheckBox *check = Object::cast_to(btn_list[i]); check->set_pressed(check->get_text() == default_type); } selector_label->set_text(vformat(TTR("Add %s"), default_type)); -- cgit v1.2.3-70-g09d2