Merge pull request #25298 from groud/fix_separation_update
Updates containers minimum size when some constants are modified
This commit is contained in:
commit
6ad4f16b1d
6 changed files with 124 additions and 98 deletions
|
@ -255,6 +255,10 @@ void BoxContainer::_notification(int p_what) {
|
||||||
|
|
||||||
_resort();
|
_resort();
|
||||||
} break;
|
} break;
|
||||||
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
|
||||||
|
minimum_size_changed();
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,97 +192,104 @@ bool GraphNode::has_point(const Point2 &p_point) const {
|
||||||
|
|
||||||
void GraphNode::_notification(int p_what) {
|
void GraphNode::_notification(int p_what) {
|
||||||
|
|
||||||
if (p_what == NOTIFICATION_DRAW) {
|
switch (p_what) {
|
||||||
|
case NOTIFICATION_DRAW: {
|
||||||
|
|
||||||
Ref<StyleBox> sb;
|
Ref<StyleBox> sb;
|
||||||
|
|
||||||
if (comment) {
|
if (comment) {
|
||||||
sb = get_stylebox(selected ? "commentfocus" : "comment");
|
sb = get_stylebox(selected ? "commentfocus" : "comment");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
sb = get_stylebox(selected ? "selectedframe" : "frame");
|
sb = get_stylebox(selected ? "selectedframe" : "frame");
|
||||||
}
|
|
||||||
|
|
||||||
//sb=sb->duplicate();
|
|
||||||
//sb->call("set_modulate",modulate);
|
|
||||||
Ref<Texture> port = get_icon("port");
|
|
||||||
Ref<Texture> close = get_icon("close");
|
|
||||||
Ref<Texture> resizer = get_icon("resizer");
|
|
||||||
int close_offset = get_constant("close_offset");
|
|
||||||
int close_h_offset = get_constant("close_h_offset");
|
|
||||||
Color close_color = get_color("close_color");
|
|
||||||
Ref<Font> title_font = get_font("title_font");
|
|
||||||
int title_offset = get_constant("title_offset");
|
|
||||||
int title_h_offset = get_constant("title_h_offset");
|
|
||||||
Color title_color = get_color("title_color");
|
|
||||||
Point2i icofs = -port->get_size() * 0.5;
|
|
||||||
int edgeofs = get_constant("port_offset");
|
|
||||||
icofs.y += sb->get_margin(MARGIN_TOP);
|
|
||||||
|
|
||||||
draw_style_box(sb, Rect2(Point2(), get_size()));
|
|
||||||
|
|
||||||
switch (overlay) {
|
|
||||||
case OVERLAY_DISABLED: {
|
|
||||||
|
|
||||||
} break;
|
|
||||||
case OVERLAY_BREAKPOINT: {
|
|
||||||
|
|
||||||
draw_style_box(get_stylebox("breakpoint"), Rect2(Point2(), get_size()));
|
|
||||||
} break;
|
|
||||||
case OVERLAY_POSITION: {
|
|
||||||
draw_style_box(get_stylebox("position"), Rect2(Point2(), get_size()));
|
|
||||||
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
|
|
||||||
int w = get_size().width - sb->get_minimum_size().x;
|
|
||||||
|
|
||||||
if (show_close)
|
|
||||||
w -= close->get_width();
|
|
||||||
|
|
||||||
draw_string(title_font, Point2(sb->get_margin(MARGIN_LEFT) + title_h_offset, -title_font->get_height() + title_font->get_ascent() + title_offset), title, title_color, w);
|
|
||||||
if (show_close) {
|
|
||||||
Vector2 cpos = Point2(w + sb->get_margin(MARGIN_LEFT) + close_h_offset, -close->get_height() + close_offset);
|
|
||||||
draw_texture(close, cpos, close_color);
|
|
||||||
close_rect.position = cpos;
|
|
||||||
close_rect.size = close->get_size();
|
|
||||||
} else {
|
|
||||||
close_rect = Rect2();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Map<int, Slot>::Element *E = slot_info.front(); E; E = E->next()) {
|
|
||||||
|
|
||||||
if (E->key() < 0 || E->key() >= cache_y.size())
|
|
||||||
continue;
|
|
||||||
if (!slot_info.has(E->key()))
|
|
||||||
continue;
|
|
||||||
const Slot &s = slot_info[E->key()];
|
|
||||||
//left
|
|
||||||
if (s.enable_left) {
|
|
||||||
Ref<Texture> p = port;
|
|
||||||
if (s.custom_slot_left.is_valid()) {
|
|
||||||
p = s.custom_slot_left;
|
|
||||||
}
|
|
||||||
p->draw(get_canvas_item(), icofs + Point2(edgeofs, cache_y[E->key()]), s.color_left);
|
|
||||||
}
|
}
|
||||||
if (s.enable_right) {
|
|
||||||
Ref<Texture> p = port;
|
//sb=sb->duplicate();
|
||||||
if (s.custom_slot_right.is_valid()) {
|
//sb->call("set_modulate",modulate);
|
||||||
p = s.custom_slot_right;
|
Ref<Texture> port = get_icon("port");
|
||||||
}
|
Ref<Texture> close = get_icon("close");
|
||||||
p->draw(get_canvas_item(), icofs + Point2(get_size().x - edgeofs, cache_y[E->key()]), s.color_right);
|
Ref<Texture> resizer = get_icon("resizer");
|
||||||
|
int close_offset = get_constant("close_offset");
|
||||||
|
int close_h_offset = get_constant("close_h_offset");
|
||||||
|
Color close_color = get_color("close_color");
|
||||||
|
Ref<Font> title_font = get_font("title_font");
|
||||||
|
int title_offset = get_constant("title_offset");
|
||||||
|
int title_h_offset = get_constant("title_h_offset");
|
||||||
|
Color title_color = get_color("title_color");
|
||||||
|
Point2i icofs = -port->get_size() * 0.5;
|
||||||
|
int edgeofs = get_constant("port_offset");
|
||||||
|
icofs.y += sb->get_margin(MARGIN_TOP);
|
||||||
|
|
||||||
|
draw_style_box(sb, Rect2(Point2(), get_size()));
|
||||||
|
|
||||||
|
switch (overlay) {
|
||||||
|
case OVERLAY_DISABLED: {
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case OVERLAY_BREAKPOINT: {
|
||||||
|
|
||||||
|
draw_style_box(get_stylebox("breakpoint"), Rect2(Point2(), get_size()));
|
||||||
|
} break;
|
||||||
|
case OVERLAY_POSITION: {
|
||||||
|
draw_style_box(get_stylebox("position"), Rect2(Point2(), get_size()));
|
||||||
|
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (resizable) {
|
int w = get_size().width - sb->get_minimum_size().x;
|
||||||
draw_texture(resizer, get_size() - resizer->get_size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p_what == NOTIFICATION_SORT_CHILDREN) {
|
if (show_close)
|
||||||
|
w -= close->get_width();
|
||||||
|
|
||||||
_resort();
|
draw_string(title_font, Point2(sb->get_margin(MARGIN_LEFT) + title_h_offset, -title_font->get_height() + title_font->get_ascent() + title_offset), title, title_color, w);
|
||||||
|
if (show_close) {
|
||||||
|
Vector2 cpos = Point2(w + sb->get_margin(MARGIN_LEFT) + close_h_offset, -close->get_height() + close_offset);
|
||||||
|
draw_texture(close, cpos, close_color);
|
||||||
|
close_rect.position = cpos;
|
||||||
|
close_rect.size = close->get_size();
|
||||||
|
} else {
|
||||||
|
close_rect = Rect2();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Map<int, Slot>::Element *E = slot_info.front(); E; E = E->next()) {
|
||||||
|
|
||||||
|
if (E->key() < 0 || E->key() >= cache_y.size())
|
||||||
|
continue;
|
||||||
|
if (!slot_info.has(E->key()))
|
||||||
|
continue;
|
||||||
|
const Slot &s = slot_info[E->key()];
|
||||||
|
//left
|
||||||
|
if (s.enable_left) {
|
||||||
|
Ref<Texture> p = port;
|
||||||
|
if (s.custom_slot_left.is_valid()) {
|
||||||
|
p = s.custom_slot_left;
|
||||||
|
}
|
||||||
|
p->draw(get_canvas_item(), icofs + Point2(edgeofs, cache_y[E->key()]), s.color_left);
|
||||||
|
}
|
||||||
|
if (s.enable_right) {
|
||||||
|
Ref<Texture> p = port;
|
||||||
|
if (s.custom_slot_right.is_valid()) {
|
||||||
|
p = s.custom_slot_right;
|
||||||
|
}
|
||||||
|
p->draw(get_canvas_item(), icofs + Point2(get_size().x - edgeofs, cache_y[E->key()]), s.color_right);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (resizable) {
|
||||||
|
draw_texture(resizer, get_size() - resizer->get_size());
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case NOTIFICATION_SORT_CHILDREN: {
|
||||||
|
|
||||||
|
_resort();
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
|
||||||
|
minimum_size_changed();
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,10 @@ void GridContainer::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
|
||||||
|
minimum_size_changed();
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,27 +64,33 @@ Size2 MarginContainer::get_minimum_size() const {
|
||||||
|
|
||||||
void MarginContainer::_notification(int p_what) {
|
void MarginContainer::_notification(int p_what) {
|
||||||
|
|
||||||
if (p_what == NOTIFICATION_SORT_CHILDREN) {
|
switch (p_what) {
|
||||||
|
case NOTIFICATION_SORT_CHILDREN: {
|
||||||
|
|
||||||
int margin_left = get_constant("margin_left");
|
int margin_left = get_constant("margin_left");
|
||||||
int margin_top = get_constant("margin_top");
|
int margin_top = get_constant("margin_top");
|
||||||
int margin_right = get_constant("margin_right");
|
int margin_right = get_constant("margin_right");
|
||||||
int margin_bottom = get_constant("margin_bottom");
|
int margin_bottom = get_constant("margin_bottom");
|
||||||
|
|
||||||
Size2 s = get_size();
|
Size2 s = get_size();
|
||||||
|
|
||||||
for (int i = 0; i < get_child_count(); i++) {
|
for (int i = 0; i < get_child_count(); i++) {
|
||||||
|
|
||||||
Control *c = Object::cast_to<Control>(get_child(i));
|
Control *c = Object::cast_to<Control>(get_child(i));
|
||||||
if (!c)
|
if (!c)
|
||||||
continue;
|
continue;
|
||||||
if (c->is_set_as_toplevel())
|
if (c->is_set_as_toplevel())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int w = s.width - margin_left - margin_right;
|
int w = s.width - margin_left - margin_right;
|
||||||
int h = s.height - margin_top - margin_bottom;
|
int h = s.height - margin_top - margin_bottom;
|
||||||
fit_child_in_rect(c, Rect2(margin_left, margin_top, w, h));
|
fit_child_in_rect(c, Rect2(margin_left, margin_top, w, h));
|
||||||
}
|
}
|
||||||
|
} break;
|
||||||
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
|
||||||
|
minimum_size_changed();
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,6 +193,10 @@ void SplitContainer::_notification(int p_what) {
|
||||||
draw_texture(tex, Point2i(middle_sep + (sep - tex->get_width()) / 2, (size.y - tex->get_height()) / 2));
|
draw_texture(tex, Point2i(middle_sep + (sep - tex->get_width()) / 2, (size.y - tex->get_height()) / 2));
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
|
||||||
|
minimum_size_changed();
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,6 +338,7 @@ void TabContainer::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_THEME_CHANGED: {
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
|
minimum_size_changed();
|
||||||
call_deferred("_on_theme_changed"); //wait until all changed theme
|
call_deferred("_on_theme_changed"); //wait until all changed theme
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue