Adds a function to set Anchors with a layout preset
This commit is contained in:
parent
e76b535a1a
commit
c26af6f2b7
|
@ -2584,7 +2584,7 @@ void CanvasItemEditor::_update_scroll(float) {
|
|||
viewport->update();
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_set_anchor(float p_left, float p_top, float p_right, float p_bottom) {
|
||||
void CanvasItemEditor::_set_anchors_preset(Control::LayoutPreset p_preset) {
|
||||
List<Node *> &selection = editor_selection->get_selected_node_list();
|
||||
|
||||
undo_redo->create_action(TTR("Change Anchors"));
|
||||
|
@ -2592,10 +2592,7 @@ void CanvasItemEditor::_set_anchor(float p_left, float p_top, float p_right, flo
|
|||
|
||||
Control *c = E->get()->cast_to<Control>();
|
||||
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_LEFT, p_left);
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_TOP, p_top);
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_RIGHT, p_right);
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_BOTTOM, p_bottom);
|
||||
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));
|
||||
undo_redo->add_undo_method(c, "set_anchor", MARGIN_TOP, c->get_anchor(MARGIN_TOP));
|
||||
undo_redo->add_undo_method(c, "set_anchor", MARGIN_RIGHT, c->get_anchor(MARGIN_RIGHT));
|
||||
|
@ -2613,10 +2610,7 @@ void CanvasItemEditor::_set_full_rect() {
|
|||
|
||||
Control *c = E->get()->cast_to<Control>();
|
||||
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_LEFT, ANCHOR_BEGIN);
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_TOP, ANCHOR_BEGIN);
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_RIGHT, ANCHOR_END);
|
||||
undo_redo->add_do_method(c, "set_anchor", MARGIN_BOTTOM, ANCHOR_END);
|
||||
undo_redo->add_do_method(c, "set_anchors_preset", PRESET_WIDE);
|
||||
undo_redo->add_do_method(c, "set_margin", MARGIN_LEFT, 0);
|
||||
undo_redo->add_do_method(c, "set_margin", MARGIN_TOP, 0);
|
||||
undo_redo->add_do_method(c, "set_margin", MARGIN_RIGHT, 0);
|
||||
|
@ -2837,53 +2831,52 @@ void CanvasItemEditor::_popup_callback(int p_op) {
|
|||
//space_selected_items< proj_vector2_y, compare_items_y >();
|
||||
} break;
|
||||
case ANCHOR_ALIGN_TOP_LEFT: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_BEGIN);
|
||||
_set_anchors_preset(PRESET_TOP_LEFT);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_TOP_RIGHT: {
|
||||
_set_anchor(ANCHOR_END, ANCHOR_BEGIN, ANCHOR_END, ANCHOR_BEGIN);
|
||||
_set_anchors_preset(PRESET_TOP_RIGHT);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_BOTTOM_LEFT: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_END, ANCHOR_BEGIN, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_BOTTOM_LEFT);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_BOTTOM_RIGHT: {
|
||||
_set_anchor(ANCHOR_END, ANCHOR_END, ANCHOR_END, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_BOTTOM_RIGHT);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_CENTER_LEFT: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_CENTER, ANCHOR_BEGIN, ANCHOR_CENTER);
|
||||
_set_anchors_preset(PRESET_CENTER_LEFT);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_CENTER_RIGHT: {
|
||||
|
||||
_set_anchor(ANCHOR_END, ANCHOR_CENTER, ANCHOR_END, ANCHOR_CENTER);
|
||||
_set_anchors_preset(PRESET_CENTER_RIGHT);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_CENTER_TOP: {
|
||||
_set_anchor(ANCHOR_CENTER, ANCHOR_BEGIN, ANCHOR_CENTER, ANCHOR_BEGIN);
|
||||
_set_anchors_preset(PRESET_CENTER_TOP);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_CENTER_BOTTOM: {
|
||||
_set_anchor(ANCHOR_CENTER, ANCHOR_END, ANCHOR_CENTER, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_CENTER_BOTTOM);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_CENTER: {
|
||||
_set_anchor(ANCHOR_CENTER, ANCHOR_CENTER, ANCHOR_CENTER, ANCHOR_CENTER);
|
||||
_set_anchors_preset(PRESET_CENTER);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_TOP_WIDE: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_END, ANCHOR_BEGIN);
|
||||
_set_anchors_preset(PRESET_TOP_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_LEFT_WIDE: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_LEFT_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_RIGHT_WIDE: {
|
||||
_set_anchor(ANCHOR_END, ANCHOR_BEGIN, ANCHOR_END, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_RIGHT_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_BOTTOM_WIDE: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_END, ANCHOR_END, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_BOTTOM_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_VCENTER_WIDE: {
|
||||
_set_anchor(ANCHOR_CENTER, ANCHOR_BEGIN, ANCHOR_CENTER, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_VCENTER_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_HCENTER_WIDE: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_CENTER, ANCHOR_END, ANCHOR_CENTER);
|
||||
_set_anchors_preset(PRESET_HCENTER_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_WIDE: {
|
||||
_set_anchor(ANCHOR_BEGIN, ANCHOR_BEGIN, ANCHOR_END, ANCHOR_END);
|
||||
_set_anchors_preset(PRESET_WIDE);
|
||||
} break;
|
||||
case ANCHOR_ALIGN_WIDE_FIT: {
|
||||
_set_full_rect();
|
||||
|
|
|
@ -373,7 +373,7 @@ class CanvasItemEditor : public VBoxContainer {
|
|||
|
||||
void _focus_selection(int p_op);
|
||||
|
||||
void _set_anchor(float p_left, float p_top, float p_right, float p_bottom);
|
||||
void _set_anchors_preset(Control::LayoutPreset p_preset);
|
||||
void _set_full_rect();
|
||||
|
||||
HSplitContainer *palette_split;
|
||||
|
|
|
@ -1337,6 +1337,120 @@ void Control::set_anchor_and_margin(Margin p_margin, float p_anchor, float p_pos
|
|||
set_margin(p_margin, p_pos);
|
||||
}
|
||||
|
||||
void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin) {
|
||||
//Left
|
||||
switch (p_preset) {
|
||||
case PRESET_TOP_LEFT:
|
||||
case PRESET_BOTTOM_LEFT:
|
||||
case PRESET_CENTER_LEFT:
|
||||
case PRESET_TOP_WIDE:
|
||||
case PRESET_BOTTOM_WIDE:
|
||||
case PRESET_LEFT_WIDE:
|
||||
case PRESET_HCENTER_WIDE:
|
||||
case PRESET_WIDE:
|
||||
set_anchor(MARGIN_LEFT, ANCHOR_BEGIN, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_CENTER_TOP:
|
||||
case PRESET_CENTER_BOTTOM:
|
||||
case PRESET_CENTER:
|
||||
case PRESET_VCENTER_WIDE:
|
||||
set_anchor(MARGIN_LEFT, ANCHOR_CENTER, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_TOP_RIGHT:
|
||||
case PRESET_BOTTOM_RIGHT:
|
||||
case PRESET_CENTER_RIGHT:
|
||||
case PRESET_RIGHT_WIDE:
|
||||
set_anchor(MARGIN_LEFT, ANCHOR_END, p_keep_margin);
|
||||
break;
|
||||
}
|
||||
|
||||
// Top
|
||||
switch (p_preset) {
|
||||
case PRESET_TOP_LEFT:
|
||||
case PRESET_TOP_RIGHT:
|
||||
case PRESET_CENTER_TOP:
|
||||
case PRESET_LEFT_WIDE:
|
||||
case PRESET_RIGHT_WIDE:
|
||||
case PRESET_TOP_WIDE:
|
||||
case PRESET_VCENTER_WIDE:
|
||||
case PRESET_WIDE:
|
||||
set_anchor(MARGIN_TOP, ANCHOR_BEGIN, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_CENTER_LEFT:
|
||||
case PRESET_CENTER_RIGHT:
|
||||
case PRESET_CENTER:
|
||||
case PRESET_HCENTER_WIDE:
|
||||
set_anchor(MARGIN_TOP, ANCHOR_CENTER, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_BOTTOM_LEFT:
|
||||
case PRESET_BOTTOM_RIGHT:
|
||||
case PRESET_CENTER_BOTTOM:
|
||||
case PRESET_BOTTOM_WIDE:
|
||||
set_anchor(MARGIN_TOP, ANCHOR_END, p_keep_margin);
|
||||
break;
|
||||
}
|
||||
|
||||
// Right
|
||||
switch (p_preset) {
|
||||
case PRESET_TOP_LEFT:
|
||||
case PRESET_BOTTOM_LEFT:
|
||||
case PRESET_CENTER_LEFT:
|
||||
case PRESET_LEFT_WIDE:
|
||||
set_anchor(MARGIN_RIGHT, ANCHOR_BEGIN, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_CENTER_TOP:
|
||||
case PRESET_CENTER_BOTTOM:
|
||||
case PRESET_CENTER:
|
||||
case PRESET_VCENTER_WIDE:
|
||||
set_anchor(MARGIN_RIGHT, ANCHOR_CENTER, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_TOP_RIGHT:
|
||||
case PRESET_BOTTOM_RIGHT:
|
||||
case PRESET_CENTER_RIGHT:
|
||||
case PRESET_TOP_WIDE:
|
||||
case PRESET_RIGHT_WIDE:
|
||||
case PRESET_BOTTOM_WIDE:
|
||||
case PRESET_HCENTER_WIDE:
|
||||
case PRESET_WIDE:
|
||||
set_anchor(MARGIN_RIGHT, ANCHOR_END, p_keep_margin);
|
||||
break;
|
||||
}
|
||||
|
||||
// Bottom
|
||||
switch (p_preset) {
|
||||
case PRESET_TOP_LEFT:
|
||||
case PRESET_TOP_RIGHT:
|
||||
case PRESET_CENTER_TOP:
|
||||
case PRESET_TOP_WIDE:
|
||||
set_anchor(MARGIN_BOTTOM, ANCHOR_BEGIN, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_CENTER_LEFT:
|
||||
case PRESET_CENTER_RIGHT:
|
||||
case PRESET_CENTER:
|
||||
case PRESET_HCENTER_WIDE:
|
||||
set_anchor(MARGIN_BOTTOM, ANCHOR_CENTER, p_keep_margin);
|
||||
break;
|
||||
|
||||
case PRESET_BOTTOM_LEFT:
|
||||
case PRESET_BOTTOM_RIGHT:
|
||||
case PRESET_CENTER_BOTTOM:
|
||||
case PRESET_LEFT_WIDE:
|
||||
case PRESET_RIGHT_WIDE:
|
||||
case PRESET_BOTTOM_WIDE:
|
||||
case PRESET_VCENTER_WIDE:
|
||||
case PRESET_WIDE:
|
||||
set_anchor(MARGIN_BOTTOM, ANCHOR_END, p_keep_margin);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
float Control::get_anchor(Margin p_margin) const {
|
||||
|
||||
return data.anchor[p_margin];
|
||||
|
@ -2343,6 +2457,7 @@ void Control::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_combined_minimum_size"), &Control::get_combined_minimum_size);
|
||||
ClassDB::bind_method(D_METHOD("set_anchor", "margin", "anchor", "keep_margin"), &Control::set_anchor, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("_set_anchor", "margin", "anchor"), &Control::_set_anchor);
|
||||
ClassDB::bind_method(D_METHOD("set_anchors_preset", "preset", "keep_margin"), &Control::set_anchors_preset, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("get_anchor", "margin"), &Control::get_anchor);
|
||||
ClassDB::bind_method(D_METHOD("set_margin", "margin", "offset"), &Control::set_margin);
|
||||
ClassDB::bind_method(D_METHOD("set_anchor_and_margin", "margin", "anchor", "offset"), &Control::set_anchor_and_margin);
|
||||
|
@ -2541,6 +2656,23 @@ void Control::_bind_methods() {
|
|||
BIND_CONSTANT(CURSOR_HSPLIT);
|
||||
BIND_CONSTANT(CURSOR_HELP);
|
||||
|
||||
BIND_CONSTANT(PRESET_TOP_LEFT);
|
||||
BIND_CONSTANT(PRESET_TOP_RIGHT);
|
||||
BIND_CONSTANT(PRESET_BOTTOM_LEFT);
|
||||
BIND_CONSTANT(PRESET_BOTTOM_RIGHT);
|
||||
BIND_CONSTANT(PRESET_CENTER_LEFT);
|
||||
BIND_CONSTANT(PRESET_CENTER_TOP);
|
||||
BIND_CONSTANT(PRESET_CENTER_RIGHT);
|
||||
BIND_CONSTANT(PRESET_CENTER_BOTTOM);
|
||||
BIND_CONSTANT(PRESET_CENTER);
|
||||
BIND_CONSTANT(PRESET_LEFT_WIDE);
|
||||
BIND_CONSTANT(PRESET_TOP_WIDE);
|
||||
BIND_CONSTANT(PRESET_RIGHT_WIDE);
|
||||
BIND_CONSTANT(PRESET_BOTTOM_WIDE);
|
||||
BIND_CONSTANT(PRESET_VCENTER_WIDE);
|
||||
BIND_CONSTANT(PRESET_HCENTER_WIDE);
|
||||
BIND_CONSTANT(PRESET_WIDE);
|
||||
|
||||
BIND_CONSTANT(SIZE_EXPAND);
|
||||
BIND_CONSTANT(SIZE_FILL);
|
||||
BIND_CONSTANT(SIZE_EXPAND_FILL);
|
||||
|
|
|
@ -103,6 +103,25 @@ public:
|
|||
CURSOR_MAX
|
||||
};
|
||||
|
||||
enum LayoutPreset {
|
||||
PRESET_TOP_LEFT,
|
||||
PRESET_TOP_RIGHT,
|
||||
PRESET_BOTTOM_LEFT,
|
||||
PRESET_BOTTOM_RIGHT,
|
||||
PRESET_CENTER_LEFT,
|
||||
PRESET_CENTER_TOP,
|
||||
PRESET_CENTER_RIGHT,
|
||||
PRESET_CENTER_BOTTOM,
|
||||
PRESET_CENTER,
|
||||
PRESET_LEFT_WIDE,
|
||||
PRESET_TOP_WIDE,
|
||||
PRESET_RIGHT_WIDE,
|
||||
PRESET_BOTTOM_WIDE,
|
||||
PRESET_VCENTER_WIDE,
|
||||
PRESET_HCENTER_WIDE,
|
||||
PRESET_WIDE
|
||||
};
|
||||
|
||||
private:
|
||||
struct CComparator {
|
||||
|
||||
|
@ -275,6 +294,7 @@ public:
|
|||
|
||||
void set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin = false);
|
||||
void set_anchor_and_margin(Margin p_margin, float p_anchor, float p_pos);
|
||||
void set_anchors_preset(LayoutPreset p_preset, bool p_keep_margin = false);
|
||||
|
||||
float get_anchor(Margin p_margin) const;
|
||||
|
||||
|
@ -426,6 +446,7 @@ public:
|
|||
VARIANT_ENUM_CAST(Control::FocusMode);
|
||||
VARIANT_ENUM_CAST(Control::SizeFlags);
|
||||
VARIANT_ENUM_CAST(Control::CursorShape);
|
||||
VARIANT_ENUM_CAST(Control::LayoutPreset);
|
||||
VARIANT_ENUM_CAST(Control::MouseFilter);
|
||||
VARIANT_ENUM_CAST(Control::GrowDirection);
|
||||
|
||||
|
|
Loading…
Reference in New Issue