From 5850b6b58a4ca80d2c3c6e7b8a8bf94c0ecdc5f9 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 24 Aug 2015 01:00:39 -0300 Subject: [PATCH] beautiful visual menu to change anchors will you dare to try it? :) because, I'd check previous commit msgs if I were you.. --- tools/editor/icons/icon_anchor.png | Bin 0 -> 428 bytes .../icon_control_align_bottom_center.png | Bin 0 -> 174 bytes .../icons/icon_control_align_bottom_left.png | Bin 0 -> 172 bytes .../icons/icon_control_align_bottom_right.png | Bin 0 -> 174 bytes .../icons/icon_control_align_bottom_wide.png | Bin 0 -> 174 bytes .../icons/icon_control_align_center.png | Bin 0 -> 181 bytes .../icons/icon_control_align_center_left.png | Bin 0 -> 172 bytes .../icons/icon_control_align_center_right.png | Bin 0 -> 171 bytes .../icons/icon_control_align_left_center.png | Bin 0 -> 183 bytes .../icons/icon_control_align_left_wide.png | Bin 0 -> 166 bytes .../icons/icon_control_align_right_center.png | Bin 0 -> 181 bytes .../icons/icon_control_align_right_wide.png | Bin 0 -> 167 bytes .../icons/icon_control_align_top_center.png | Bin 0 -> 181 bytes .../icons/icon_control_align_top_left.png | Bin 0 -> 176 bytes .../icons/icon_control_align_top_right.png | Bin 0 -> 183 bytes .../icons/icon_control_align_top_wide.png | Bin 0 -> 179 bytes .../editor/icons/icon_control_align_wide.png | Bin 0 -> 165 bytes .../icons/icon_control_hcenter_wide.png | Bin 0 -> 182 bytes .../icons/icon_control_vcenter_wide.png | Bin 0 -> 171 bytes .../plugins/canvas_item_editor_plugin.cpp | 120 ++++++++++++++++++ .../plugins/canvas_item_editor_plugin.h | 20 +++ 21 files changed, 140 insertions(+) create mode 100644 tools/editor/icons/icon_anchor.png create mode 100644 tools/editor/icons/icon_control_align_bottom_center.png create mode 100644 tools/editor/icons/icon_control_align_bottom_left.png create mode 100644 tools/editor/icons/icon_control_align_bottom_right.png create mode 100644 tools/editor/icons/icon_control_align_bottom_wide.png create mode 100644 tools/editor/icons/icon_control_align_center.png create mode 100644 tools/editor/icons/icon_control_align_center_left.png create mode 100644 tools/editor/icons/icon_control_align_center_right.png create mode 100644 tools/editor/icons/icon_control_align_left_center.png create mode 100644 tools/editor/icons/icon_control_align_left_wide.png create mode 100644 tools/editor/icons/icon_control_align_right_center.png create mode 100644 tools/editor/icons/icon_control_align_right_wide.png create mode 100644 tools/editor/icons/icon_control_align_top_center.png create mode 100644 tools/editor/icons/icon_control_align_top_left.png create mode 100644 tools/editor/icons/icon_control_align_top_right.png create mode 100644 tools/editor/icons/icon_control_align_top_wide.png create mode 100644 tools/editor/icons/icon_control_align_wide.png create mode 100644 tools/editor/icons/icon_control_hcenter_wide.png create mode 100644 tools/editor/icons/icon_control_vcenter_wide.png diff --git a/tools/editor/icons/icon_anchor.png b/tools/editor/icons/icon_anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..1f9f9fa13963e57d15dbc2f7abc98aeadd6443b6 GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lYs~Qk%{`&6?ob z5Hdegphci5aIIDfI;+LGrRZen^>frBX|IJ$9Fw9bT}Gg_aXpIF*w zIQh((eczv*{WSmMlRU-iM!hZKKc+aXdCX8HyH!@_0ndH;pbM-92lD4U`gw#w^N4NE zBbjXB$_d$#2iW%<5@^5SuQ;zabVBybQ(Mm@EITzhk5Un z&zg}f`H*G*2exWm{e=n4w>6LGe~(kVzNx1_;)vlmB^yq;j4vG?{30D{@yjlmB^yq;j4vG?{30D{@yxzQje_SgvBEmxGP{YJaZ+IA1Z{}{F UEZ+Zvfq{X+)78&qol`;+0J8-&>;M1& literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_bottom_right.png b/tools/editor/icons/icon_control_align_bottom_right.png new file mode 100644 index 0000000000000000000000000000000000000000..8857f4e940477ed71727b5293e127a0a74806365 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lCpp6926x?6Rt2+c&V`b`u%%j*ZX^Wt1Vg>m6zU>WYE9D WliGIlHwOa)1B0ilpUXO@geCw)pf(l& literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_bottom_wide.png b/tools/editor/icons/icon_control_align_bottom_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..56f009b8e45e67c97e08c423b412bfa4473acb47 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lmB^yq;j4vG?{30D{@yxzQjukQW%-QC^oz7lWl?VX*&%wWHX W`?=lmB^yq;j4vG?NY#S1U-@Jc+eASK(8w!rJFq-Y>dtBl$*Wt^j ePfE8L7>+P8 literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_center_left.png b/tools/editor/icons/icon_control_align_center_left.png new file mode 100644 index 0000000000000000000000000000000000000000..997074b0974d9949234812c7c954b51f63208c47 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lgTe~DWM4fwzw_a literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_center_right.png b/tools/editor/icons/icon_control_align_center_right.png new file mode 100644 index 0000000000000000000000000000000000000000..b5cae63f7a0a16d76f30dc0dd96254fdf812b362 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lQF@%AASB=MVT$>WLkSO<1sQzoxWqQ! T+Ly$@z`)??>gTe~DWM4fg1R#} literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_left_center.png b/tools/editor/icons/icon_control_align_left_center.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb4dfb5673f43e324b7b553fc9e045dfafee5c1 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lCpp6926zk*ftm#7#Mu{{yllBj*gCuVWLA%e0!lpfV#lm fJ$p`=F)(mCaC7r8OSCdDFfe$!`njxgN@xNA&XF`_ literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_left_wide.png b/tools/editor/icons/icon_control_align_left_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0a6cff958c9d8e80ae91eb85d82f607d482729 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>l|gv3O}z*&3u?2(uup~144tw+iri-E-;Xx3cDZ>=1y@oZKJ3=9km Mp00i_>zopr073~W82|tP literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_right_center.png b/tools/editor/icons/icon_control_align_right_center.png new file mode 100644 index 0000000000000000000000000000000000000000..cf12d44c6a9c633d628d957665ff46723a8ac958 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lc6Yg$dU|?|aba4!^IGsGlqVQ2Y z8y5pNGc)tyZMnBkTzd2L>Cpp6926zk*ft0(Ua^0_{OTX??(TN?kq{9R>r+#4YJBnZ esp~dIhM8eJ$Ne5xcQY_BFnGH9xvXlSx;TbdoKBu&QTV8y zjf;VsnVI?Uw%pqtL3i%o?>}^ZZ?!qIFmr3dm4-lOH{J#YH?Pgc47aqnTUD}`=rJ%b OFnGH9xvXll~lZOsD?U}WA&mM^x5*jSb`3&5Kb+UKjBupC;Z!B@q*Vo^~%fO(q Xn}d_j%Hjb70|SGntDnm{r-UW|de<(s literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_top_right.png b/tools/editor/icons/icon_control_align_top_right.png new file mode 100644 index 0000000000000000000000000000000000000000..3b58eead9c4d2c2fd19da7eba133bff114be837b GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lgTe~DWM4f!Ob>! literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_align_top_wide.png b/tools/editor/icons/icon_control_align_top_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..869ae26134a874e06ce743ca49e11f4daedd4cb6 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>llebqjv&!G!JA2@WgQA3K!j*lU|?|eba4!^IQ@3gMqUO( zjw5rzm+j7-!LpHu_wdv52EDG|#ff*jIu1ARPMEoNql#TyjKU3uclV^iubT3nc_W)C f6&Mu#f%#_`&++V~!kZWv7#KWV{an^LB{Ts5H$FL* literal 0 HcmV?d00001 diff --git a/tools/editor/icons/icon_control_vcenter_wide.png b/tools/editor/icons/icon_control_vcenter_wide.png new file mode 100644 index 0000000000000000000000000000000000000000..44cbb8f3444ac68221e8160b6386e61a9445c637 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7*pj^6T^Rm@;DWu&Co?cG za29w(7Bet#3xhBt!>lV+Pu6{1-oD!M<(l0J1 literal 0 HcmV?d00001 diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp index f2738f0a62..8fc2945450 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.cpp +++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp @@ -1910,12 +1910,20 @@ void CanvasItemEditor::_notification(int p_what) { List &selection = editor_selection->get_selected_node_list(); + bool all_control=true; + bool has_control=false; + for(List::Element *E=selection.front();E;E=E->next()) { CanvasItem *canvas_item = E->get()->cast_to(); if (!canvas_item || !canvas_item->is_visible()) continue; + if (canvas_item->cast_to()) + has_control=true; + else + all_control=false; + CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data(canvas_item); if (!se) continue; @@ -1932,6 +1940,13 @@ void CanvasItemEditor::_notification(int p_what) { } + bool show_anchor = all_control && has_control; + if (show_anchor != !anchor_menu->is_hidden()) { + if (show_anchor) + anchor_menu->show(); + else + anchor_menu->hide(); + } for(Map::Element *E=bone_list.front();E;E=E->next()) { @@ -1974,6 +1989,32 @@ void CanvasItemEditor::_notification(int p_what) { ungroup_button->set_icon(get_icon("Ungroup","EditorIcons")); key_insert_button->set_icon(get_icon("Key","EditorIcons")); + + //anchor_menu->add_icon_override("Align Top Left"); + anchor_menu->set_icon(get_icon("Anchor","EditorIcons")); + PopupMenu *p=anchor_menu->get_popup(); + + p->add_icon_item(get_icon("ControlAlignTopLeft","EditorIcons"),"Top Left",ANCHOR_ALIGN_TOP_LEFT); + p->add_icon_item(get_icon("ControlAlignTopRight","EditorIcons"),"Top Right",ANCHOR_ALIGN_TOP_RIGHT); + p->add_icon_item(get_icon("ControlAlignBottomRight","EditorIcons"),"Bottom Right",ANCHOR_ALIGN_BOTTOM_RIGHT); + p->add_icon_item(get_icon("ControlAlignBottomLeft","EditorIcons"),"Bottom Left",ANCHOR_ALIGN_BOTTOM_LEFT); + p->add_separator(); + p->add_icon_item(get_icon("ControlAlignLeftCenter","EditorIcons"),"Center Left",ANCHOR_ALIGN_CENTER_LEFT); + p->add_icon_item(get_icon("ControlAlignTopCenter","EditorIcons"),"Center Top",ANCHOR_ALIGN_CENTER_TOP); + p->add_icon_item(get_icon("ControlAlignRightCenter","EditorIcons"),"Center Right",ANCHOR_ALIGN_CENTER_RIGHT); + p->add_icon_item(get_icon("ControlAlignBottomCenter","EditorIcons"),"Center Bottom",ANCHOR_ALIGN_CENTER_BOTTOM); + p->add_icon_item(get_icon("ControlAlignCenter","EditorIcons"),"Center",ANCHOR_ALIGN_CENTER); + p->add_separator(); + p->add_icon_item(get_icon("ControlAlignLeftWide","EditorIcons"),"Left Wide",ANCHOR_ALIGN_LEFT_WIDE); + p->add_icon_item(get_icon("ControlAlignTopWide","EditorIcons"),"Top Wide",ANCHOR_ALIGN_TOP_WIDE); + p->add_icon_item(get_icon("ControlAlignRightWide","EditorIcons"),"Right Wide",ANCHOR_ALIGN_RIGHT_WIDE); + p->add_icon_item(get_icon("ControlAlignBottomWide","EditorIcons"),"Bottom Wide",ANCHOR_ALIGN_BOTTOM_WIDE); + p->add_icon_item(get_icon("ControlVcenterWide","EditorIcons"),"VCenter Wide ",ANCHOR_ALIGN_VCENTER_WIDE); + p->add_icon_item(get_icon("ControlHcenterWide","EditorIcons"),"HCenter Wide ",ANCHOR_ALIGN_HCENTER_WIDE); + p->add_separator(); + p->add_icon_item(get_icon("ControlAlignWide","EditorIcons"),"Full Rect",ANCHOR_ALIGN_WIDE); + + } if (p_what==NOTIFICATION_READY) { @@ -2179,6 +2220,27 @@ void CanvasItemEditor::_update_scroll(float) { } +void CanvasItemEditor::_set_anchor(Control::AnchorType p_left,Control::AnchorType p_top,Control::AnchorType p_right,Control::AnchorType p_bottom) { + List &selection = editor_selection->get_selected_node_list(); + + undo_redo->create_action("Change Anchors"); + for(List::Element *E=selection.front();E;E=E->next()) { + + Control *c = E->get()->cast_to(); + + 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_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)); + undo_redo->add_undo_method(c,"set_anchor",MARGIN_BOTTOM,c->get_anchor(MARGIN_BOTTOM)); + } + + undo_redo->commit_action(); + +} void CanvasItemEditor::_popup_callback(int p_op) { @@ -2381,6 +2443,56 @@ void CanvasItemEditor::_popup_callback(int p_op) { case SPACE_VERTICAL: { //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); + } break; + case ANCHOR_ALIGN_TOP_RIGHT: { + _set_anchor(ANCHOR_END,ANCHOR_BEGIN,ANCHOR_END,ANCHOR_BEGIN); + } break; + case ANCHOR_ALIGN_BOTTOM_LEFT: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_END,ANCHOR_BEGIN,ANCHOR_END); + } break; + case ANCHOR_ALIGN_BOTTOM_RIGHT: { + _set_anchor(ANCHOR_END,ANCHOR_END,ANCHOR_END,ANCHOR_END); + } break; + case ANCHOR_ALIGN_CENTER_LEFT: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_CENTER,ANCHOR_BEGIN,ANCHOR_CENTER); + } break; + case ANCHOR_ALIGN_CENTER_RIGHT: { + + _set_anchor(ANCHOR_END,ANCHOR_CENTER,ANCHOR_END,ANCHOR_CENTER); + } break; + case ANCHOR_ALIGN_CENTER_TOP: { + _set_anchor(ANCHOR_CENTER,ANCHOR_BEGIN,ANCHOR_CENTER,ANCHOR_BEGIN); + } break; + case ANCHOR_ALIGN_CENTER_BOTTOM: { + _set_anchor(ANCHOR_CENTER,ANCHOR_END,ANCHOR_CENTER,ANCHOR_END); + } break; + case ANCHOR_ALIGN_CENTER: { + _set_anchor(ANCHOR_CENTER,ANCHOR_CENTER,ANCHOR_CENTER,ANCHOR_CENTER); + } break; + case ANCHOR_ALIGN_TOP_WIDE: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_BEGIN,ANCHOR_END,ANCHOR_BEGIN); + } break; + case ANCHOR_ALIGN_LEFT_WIDE: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_BEGIN,ANCHOR_BEGIN,ANCHOR_END); + } break; + case ANCHOR_ALIGN_RIGHT_WIDE: { + _set_anchor(ANCHOR_END,ANCHOR_BEGIN,ANCHOR_END,ANCHOR_END); + } break; + case ANCHOR_ALIGN_BOTTOM_WIDE: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_END,ANCHOR_END,ANCHOR_END); + } break; + case ANCHOR_ALIGN_VCENTER_WIDE: { + _set_anchor(ANCHOR_CENTER,ANCHOR_BEGIN,ANCHOR_CENTER,ANCHOR_END); + } break; + case ANCHOR_ALIGN_HCENTER_WIDE: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_CENTER,ANCHOR_END,ANCHOR_CENTER); + } break; + case ANCHOR_ALIGN_WIDE: { + _set_anchor(ANCHOR_BEGIN,ANCHOR_BEGIN,ANCHOR_END,ANCHOR_END); + } break; + case ANIM_INSERT_KEY: case ANIM_INSERT_KEY_EXISTING: { @@ -2999,6 +3111,14 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p->add_item("Center Selection", VIEW_CENTER_TO_SELECTION, KEY_F); p->add_item("Frame Selection", VIEW_FRAME_TO_SELECTION, KEY_MASK_CMD|KEY_F); + anchor_menu = memnew( MenuButton ); + anchor_menu->set_text("Anchor"); + hb->add_child(anchor_menu); + anchor_menu->get_popup()->connect("item_pressed", this,"_popup_callback"); + anchor_menu->hide(); + + //p = anchor_menu->get_popup(); + animation_hb = memnew( HBoxContainer ); diff --git a/tools/editor/plugins/canvas_item_editor_plugin.h b/tools/editor/plugins/canvas_item_editor_plugin.h index 48a34e2d07..485422028e 100644 --- a/tools/editor/plugins/canvas_item_editor_plugin.h +++ b/tools/editor/plugins/canvas_item_editor_plugin.h @@ -90,6 +90,23 @@ class CanvasItemEditor : public VBoxContainer { UNGROUP_SELECTED, ALIGN_HORIZONTAL, ALIGN_VERTICAL, + ANCHOR_ALIGN_TOP_LEFT, + ANCHOR_ALIGN_TOP_RIGHT, + ANCHOR_ALIGN_BOTTOM_LEFT, + ANCHOR_ALIGN_BOTTOM_RIGHT, + ANCHOR_ALIGN_CENTER_LEFT, + ANCHOR_ALIGN_CENTER_RIGHT, + ANCHOR_ALIGN_CENTER_TOP, + ANCHOR_ALIGN_CENTER_BOTTOM, + ANCHOR_ALIGN_CENTER, + ANCHOR_ALIGN_TOP_WIDE, + ANCHOR_ALIGN_LEFT_WIDE, + ANCHOR_ALIGN_RIGHT_WIDE, + ANCHOR_ALIGN_BOTTOM_WIDE, + ANCHOR_ALIGN_VCENTER_WIDE, + ANCHOR_ALIGN_HCENTER_WIDE, + ANCHOR_ALIGN_WIDE, + SPACE_HORIZONTAL, SPACE_VERTICAL, EXPAND_TO_PARENT, @@ -225,6 +242,7 @@ class CanvasItemEditor : public VBoxContainer { MenuButton *view_menu; HBoxContainer *animation_hb; MenuButton *animation_menu; + MenuButton *anchor_menu; Button *key_loc_button; Button *key_rot_button; @@ -305,6 +323,8 @@ class CanvasItemEditor : public VBoxContainer { void _viewport_input_event(const InputEvent& p_event); void _viewport_draw(); + void _set_anchor(Control::AnchorType p_left,Control::AnchorType p_top,Control::AnchorType p_right,Control::AnchorType p_bottom); + HSplitContainer *palette_split; VSplitContainer *bottom_split;