fixes for dock motion
This commit is contained in:
parent
8228fea02f
commit
7674bad6c4
2 changed files with 62 additions and 2 deletions
|
@ -3339,6 +3339,10 @@ void EditorNode::_bind_methods() {
|
|||
ObjectTypeDB::bind_method("_dock_pre_popup",&EditorNode::_dock_pre_popup);
|
||||
ObjectTypeDB::bind_method("_dock_split_dragged",&EditorNode::_dock_split_dragged);
|
||||
ObjectTypeDB::bind_method("_save_docks",&EditorNode::_save_docks);
|
||||
ObjectTypeDB::bind_method("_dock_popup_exit",&EditorNode::_dock_popup_exit);
|
||||
ObjectTypeDB::bind_method("_dock_move_left",&EditorNode::_dock_move_left);
|
||||
ObjectTypeDB::bind_method("_dock_move_right",&EditorNode::_dock_move_right);
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -3427,7 +3431,6 @@ void EditorNode::_dock_select_input(const InputEvent& p_input) {
|
|||
|
||||
Vector2 point(p_input.mouse_motion.x,p_input.mouse_motion.y);
|
||||
|
||||
dock_select_rect_over=-1;
|
||||
int nrect = -1;
|
||||
for(int i=0;i<DOCK_SLOT_MAX;i++) {
|
||||
if (dock_select_rect[i].has_point(point)) {
|
||||
|
@ -3435,11 +3438,18 @@ void EditorNode::_dock_select_input(const InputEvent& p_input) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (nrect!=dock_select_rect_over) {
|
||||
dock_select->update();
|
||||
dock_select_rect_over=nrect;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (nrect==-1)
|
||||
return;
|
||||
|
||||
if (p_input.type==InputEvent::MOUSE_BUTTON && p_input.mouse_button.button_index==1 && p_input.mouse_button.pressed && dock_popup_selected!=nrect) {
|
||||
Control *dock = dock_slot[dock_popup_selected]->get_current_tab_control();
|
||||
if (dock) {
|
||||
|
@ -3476,12 +3486,46 @@ void EditorNode::_dock_select_input(const InputEvent& p_input) {
|
|||
}
|
||||
}
|
||||
|
||||
void EditorNode::_dock_popup_exit() {
|
||||
|
||||
dock_select_rect_over=-1;
|
||||
dock_select->update();
|
||||
}
|
||||
|
||||
void EditorNode::_dock_pre_popup(int p_which) {
|
||||
|
||||
print_line("pre popup? "+itos(p_which));
|
||||
|
||||
dock_popup_selected=p_which;
|
||||
}
|
||||
|
||||
void EditorNode::_dock_move_left() {
|
||||
|
||||
if (dock_popup_selected<0 || dock_popup_selected>=DOCK_SLOT_MAX)
|
||||
return;
|
||||
Control *current = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab() );
|
||||
Control *prev = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab()-1 );
|
||||
if (!current || !prev)
|
||||
return;
|
||||
dock_slot[dock_popup_selected]->move_child(current,prev->get_index());
|
||||
dock_slot[dock_popup_selected]->set_current_tab( dock_slot[dock_popup_selected]->get_current_tab()-1 );
|
||||
dock_select->update();
|
||||
_save_docks();
|
||||
|
||||
|
||||
}
|
||||
|
||||
void EditorNode::_dock_move_right() {
|
||||
|
||||
Control *current = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab() );
|
||||
Control *next = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab()+1 );
|
||||
if (!current || !next)
|
||||
return;
|
||||
dock_slot[dock_popup_selected]->move_child(next,current->get_index());
|
||||
dock_slot[dock_popup_selected]->set_current_tab( dock_slot[dock_popup_selected]->get_current_tab()+1 );
|
||||
dock_select->update();
|
||||
_save_docks();
|
||||
}
|
||||
|
||||
void EditorNode::_dock_select_draw(){
|
||||
Size2 s = dock_select->get_size();
|
||||
s.y/=2.0;
|
||||
|
@ -3552,6 +3596,7 @@ void EditorNode::_dock_select_draw(){
|
|||
r.pos+=Vector2(2,5);
|
||||
r.size-=Vector2(4,7);
|
||||
|
||||
|
||||
if (i==dock_select_rect_over) {
|
||||
dock_select->draw_rect(r,used_selected);
|
||||
} else if (dock_slot[i]->get_child_count()==0) {
|
||||
|
@ -3690,6 +3735,14 @@ void EditorNode::_load_docks() {
|
|||
else
|
||||
splits[i]->hide();
|
||||
}
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX;i++) {
|
||||
|
||||
if (!dock_slot[i]->is_hidden() && dock_slot[i]->get_tab_count()) {
|
||||
dock_slot[i]->set_current_tab(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
EditorNode::EditorNode() {
|
||||
|
@ -3865,12 +3918,15 @@ EditorNode::EditorNode() {
|
|||
dock_tab_move_left = memnew( ToolButton );
|
||||
dock_tab_move_left->set_icon(theme->get_icon("Back","EditorIcons"));
|
||||
dock_tab_move_left->set_focus_mode(Control::FOCUS_NONE);
|
||||
dock_tab_move_left->connect("pressed",this,"_dock_move_left");
|
||||
//dock_tab_move_left->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
dock_hb->add_child(dock_tab_move_left);
|
||||
dock_hb->add_spacer();
|
||||
dock_tab_move_right = memnew( ToolButton );
|
||||
dock_tab_move_right->set_icon(theme->get_icon("Forward","EditorIcons"));
|
||||
dock_tab_move_right->set_focus_mode(Control::FOCUS_NONE);
|
||||
dock_tab_move_right->connect("pressed",this,"_dock_move_right");
|
||||
|
||||
//dock_tab_move_right->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
dock_hb->add_child(dock_tab_move_right);
|
||||
dock_vb->add_child(dock_hb);
|
||||
|
@ -3879,6 +3935,7 @@ EditorNode::EditorNode() {
|
|||
dock_select->set_custom_minimum_size(Size2(128,64));
|
||||
dock_select->connect("input_event",this,"_dock_select_input");
|
||||
dock_select->connect("draw",this,"_dock_select_draw");
|
||||
dock_select->connect("mouse_exit",this,"_dock_popup_exit");
|
||||
dock_select->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
dock_vb->add_child(dock_select);
|
||||
|
||||
|
|
|
@ -455,9 +455,12 @@ class EditorNode : public Node {
|
|||
bool _find_scene_in_use(Node* p_node,const String& p_path) const;
|
||||
|
||||
void _dock_select_input(const InputEvent& p_input);
|
||||
void _dock_move_left();
|
||||
void _dock_move_right();
|
||||
void _dock_select_draw();
|
||||
void _dock_pre_popup(int p_which);
|
||||
void _dock_split_dragged(int ofs);
|
||||
void _dock_popup_exit();
|
||||
|
||||
void _save_docks();
|
||||
void _load_docks();
|
||||
|
|
Loading…
Reference in a new issue