mirror of
https://github.com/godotengine/godot.git
synced 2025-02-16 15:50:45 +00:00
Add as_sortable_control() to unify Container checks
This commit is contained in:
parent
17a81260cb
commit
5c28814b39
@ -72,16 +72,10 @@ Size2 EditorProperty::get_minimum_size() const {
|
||||
ms.height = label.is_empty() ? 0 : font->get_height(font_size) + 4 * EDSCALE;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (c == bottom_editor) {
|
||||
continue;
|
||||
}
|
||||
@ -143,16 +137,10 @@ void EditorProperty::_notification(int p_what) {
|
||||
|
||||
//compute room needed
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (c == bottom_editor) {
|
||||
continue;
|
||||
}
|
||||
@ -218,13 +206,10 @@ void EditorProperty::_notification(int p_what) {
|
||||
|
||||
//set children
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (c == bottom_editor) {
|
||||
continue;
|
||||
}
|
||||
@ -1347,14 +1332,10 @@ void EditorInspectorSection::_notification(int p_what) {
|
||||
int header_height = _get_header_height();
|
||||
Vector2 offset = Vector2(is_layout_rtl() ? 0 : inspector_margin, header_height);
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fit_child_in_rect(c, Rect2(offset, size));
|
||||
}
|
||||
} break;
|
||||
@ -1503,16 +1484,10 @@ void EditorInspectorSection::_notification(int p_what) {
|
||||
Size2 EditorInspectorSection::get_minimum_size() const {
|
||||
Size2 ms;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
Size2 minsize = c->get_combined_minimum_size();
|
||||
ms = ms.max(minsize);
|
||||
}
|
||||
|
@ -35,16 +35,10 @@
|
||||
Size2 AspectRatioContainer::get_minimum_size() const {
|
||||
Size2 ms;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
Size2 minsize = c->get_combined_minimum_size();
|
||||
ms = ms.max(minsize);
|
||||
}
|
||||
@ -107,13 +101,10 @@ void AspectRatioContainer::_notification(int p_what) {
|
||||
bool rtl = is_layout_rtl();
|
||||
Size2 size = get_size();
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Temporary fix for editor crash.
|
||||
TextureRect *trect = Object::cast_to<TextureRect>(c);
|
||||
|
@ -55,11 +55,8 @@ void BoxContainer::_resort() {
|
||||
HashMap<Control *, _MinSizeCache> min_size_cache;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible_in_tree()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -109,11 +106,8 @@ void BoxContainer::_resort() {
|
||||
float error = 0.0; // Keep track of accumulated error in pixels
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible_in_tree()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -201,11 +195,8 @@ void BoxContainer::_resort() {
|
||||
}
|
||||
|
||||
for (int i = start; i != end; i += delta) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible_in_tree()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -252,17 +243,10 @@ Size2 BoxContainer::get_minimum_size() const {
|
||||
bool first = true;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Size2i size = c->get_combined_minimum_size();
|
||||
|
||||
|
@ -36,16 +36,10 @@ Size2 CenterContainer::get_minimum_size() const {
|
||||
}
|
||||
Size2 ms;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
Size2 minsize = c->get_combined_minimum_size();
|
||||
ms = ms.max(minsize);
|
||||
}
|
||||
@ -81,14 +75,10 @@ void CenterContainer::_notification(int p_what) {
|
||||
case NOTIFICATION_SORT_CHILDREN: {
|
||||
Size2 size = get_size();
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Size2 minsize = c->get_combined_minimum_size();
|
||||
Point2 ofs = use_top_left ? (-minsize * 0.5).floor() : ((size - minsize) / 2.0).floor();
|
||||
fit_child_in_rect(c, Rect2(ofs, minsize));
|
||||
|
@ -141,6 +141,14 @@ void Container::queue_sort() {
|
||||
pending_sort = true;
|
||||
}
|
||||
|
||||
Control *Container::as_sortable_control(Node *p_node) const {
|
||||
Control *c = Object::cast_to<Control>(p_node);
|
||||
if (!c || !c->is_visible_in_tree() || c->is_set_as_top_level()) {
|
||||
return nullptr;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
Vector<int> Container::get_allowed_size_flags_horizontal() const {
|
||||
Vector<int> flags;
|
||||
if (GDVIRTUAL_CALL(_get_allowed_size_flags_horizontal, flags)) {
|
||||
|
@ -42,6 +42,8 @@ class Container : public Control {
|
||||
|
||||
protected:
|
||||
void queue_sort();
|
||||
Control *as_sortable_control(Node *p_node) const;
|
||||
|
||||
virtual void add_child_notify(Node *p_child) override;
|
||||
virtual void move_child_notify(Node *p_child) override;
|
||||
virtual void remove_child_notify(Node *p_child) override;
|
||||
|
@ -63,11 +63,8 @@ void FlowContainer::_resort() {
|
||||
|
||||
// First pass for line wrapping and minimum size calculation.
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i));
|
||||
if (!child || !child->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -138,11 +135,8 @@ void FlowContainer::_resort() {
|
||||
ofs.y = 0;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i));
|
||||
if (!child || !child->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
Size2i child_size = children_minsize_cache[child];
|
||||
@ -256,17 +250,10 @@ Size2 FlowContainer::get_minimum_size() const {
|
||||
Size2i minimum;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Size2i size = c->get_combined_minimum_size();
|
||||
|
||||
|
@ -49,14 +49,10 @@ void GraphElement::_resort() {
|
||||
Size2 size = get_size();
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i));
|
||||
if (!child || !child->is_visible_in_tree()) {
|
||||
Control *child = as_sortable_control(get_child(i));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
if (child->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fit_child_in_rect(child, Rect2(Point2(), size));
|
||||
}
|
||||
}
|
||||
@ -65,10 +61,7 @@ Size2 GraphElement::get_minimum_size() const {
|
||||
Size2 minsize;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
if (child->is_set_as_top_level()) {
|
||||
if (!child || child->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -160,14 +160,10 @@ void GraphFrame::_resort() {
|
||||
Point2 offset = Point2(sb_panel->get_margin(SIDE_LEFT), sb_panel->get_margin(SIDE_TOP) + titlebar_min_size.height + sb_titlebar->get_minimum_size().height);
|
||||
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i, false));
|
||||
if (!child || !child->is_visible_in_tree()) {
|
||||
Control *child = as_sortable_control(get_child(i, false));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
if (child->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fit_child_in_rect(child, Rect2(offset, size));
|
||||
}
|
||||
}
|
||||
@ -325,8 +321,8 @@ Size2 GraphFrame::get_minimum_size() const {
|
||||
Size2 minsize = titlebar_hbox->get_minimum_size() + sb_titlebar->get_minimum_size();
|
||||
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i, false));
|
||||
if (!child || !child->is_visible() || child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i, false));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -175,9 +175,8 @@ void GraphNode::_resort() {
|
||||
HashMap<Control *, _MinSizeCache> min_size_cache;
|
||||
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i, false));
|
||||
|
||||
if (!child || !child->is_visible_in_tree() || child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i, false));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -218,8 +217,8 @@ void GraphNode::_resort() {
|
||||
bool refit_successful = true;
|
||||
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i, false));
|
||||
if (!child || !child->is_visible_in_tree() || child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i, false));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -256,8 +255,8 @@ void GraphNode::_resort() {
|
||||
int width = new_size.width - sb_panel->get_minimum_size().width;
|
||||
int valid_children_idx = 0;
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i, false));
|
||||
if (!child || !child->is_visible_in_tree() || child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i, false));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -614,8 +613,8 @@ Size2 GraphNode::get_minimum_size() const {
|
||||
Size2 minsize = titlebar_hbox->get_minimum_size() + sb_titlebar->get_minimum_size();
|
||||
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *child = Object::cast_to<Control>(get_child(i, false));
|
||||
if (!child || !child->is_visible() || child->is_set_as_top_level()) {
|
||||
Control *child = as_sortable_control(get_child(i, false));
|
||||
if (!child) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -44,11 +44,8 @@ void GridContainer::_notification(int p_what) {
|
||||
// Compute the per-column/per-row data.
|
||||
int valid_controls_index = 0;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible_in_tree()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -186,8 +183,8 @@ void GridContainer::_notification(int p_what) {
|
||||
|
||||
valid_controls_index = 0;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible_in_tree()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
int row = valid_controls_index / columns;
|
||||
@ -282,8 +279,8 @@ Size2 GridContainer::get_minimum_size() const {
|
||||
|
||||
int valid_controls_index = 0;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
int row = valid_controls_index / columns;
|
||||
|
@ -36,16 +36,10 @@ Size2 MarginContainer::get_minimum_size() const {
|
||||
Size2 max;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (!c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Size2 s = c->get_combined_minimum_size();
|
||||
if (s.width > max.width) {
|
||||
@ -103,13 +97,10 @@ void MarginContainer::_notification(int p_what) {
|
||||
Size2 s = get_size();
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int w = s.width - theme_cache.margin_left - theme_cache.margin_right;
|
||||
int h = s.height - theme_cache.margin_top - theme_cache.margin_bottom;
|
||||
|
@ -35,11 +35,8 @@
|
||||
Size2 PanelContainer::get_minimum_size() const {
|
||||
Size2 ms;
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -87,11 +84,8 @@ void PanelContainer::_notification(int p_what) {
|
||||
}
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible_in_tree()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -43,11 +43,8 @@ Size2 ScrollContainer::get_minimum_size() const {
|
||||
largest_child_min_size = Size2();
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c == h_scroll || c == v_scroll) {
|
||||
@ -308,11 +305,8 @@ void ScrollContainer::_reposition_children() {
|
||||
}
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
if (!c || !c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c == h_scroll || c == v_scroll) {
|
||||
@ -542,13 +536,10 @@ PackedStringArray ScrollContainer::get_configuration_warnings() const {
|
||||
int found = 0;
|
||||
|
||||
for (int i = 0; i < get_child_count(); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i));
|
||||
Control *c = as_sortable_control(get_child(i));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
continue;
|
||||
}
|
||||
if (c == h_scroll || c == v_scroll) {
|
||||
continue;
|
||||
}
|
||||
|
@ -126,11 +126,8 @@ Control *SplitContainer::get_containable_child(int p_idx) const {
|
||||
int idx = 0;
|
||||
|
||||
for (int i = 0; i < get_child_count(false); i++) {
|
||||
Control *c = Object::cast_to<Control>(get_child(i, false));
|
||||
if (!c || !c->is_visible()) {
|
||||
continue;
|
||||
}
|
||||
if (c->is_set_as_top_level()) {
|
||||
Control *c = as_sortable_control(get_child(i, false));
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user