Add scrolling to Tree control in Drag and Drop mode
This commit is contained in:
parent
c05ff0577f
commit
9e5aaa27bc
|
@ -32,6 +32,7 @@
|
||||||
#include "os/keyboard.h"
|
#include "os/keyboard.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
#include "os/input.h"
|
#include "os/input.h"
|
||||||
|
#include "scene/main/viewport.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -829,6 +830,8 @@ void Tree::update_cache() {
|
||||||
cache.guide_width=get_constant("guide_width");
|
cache.guide_width=get_constant("guide_width");
|
||||||
cache.draw_relationship_lines=get_constant("draw_relationship_lines");
|
cache.draw_relationship_lines=get_constant("draw_relationship_lines");
|
||||||
cache.relationship_line_color=get_color("relationship_line_color");
|
cache.relationship_line_color=get_color("relationship_line_color");
|
||||||
|
cache.scroll_border=get_constant("scroll_border");
|
||||||
|
cache.scroll_speed=get_constant("scroll_speed");
|
||||||
|
|
||||||
cache.title_button = get_stylebox("title_button_normal");
|
cache.title_button = get_stylebox("title_button_normal");
|
||||||
cache.title_button_pressed = get_stylebox("title_button_pressed");
|
cache.title_button_pressed = get_stylebox("title_button_pressed");
|
||||||
|
@ -2681,11 +2684,17 @@ void Tree::_notification(int p_what) {
|
||||||
if (p_what==NOTIFICATION_DRAG_END) {
|
if (p_what==NOTIFICATION_DRAG_END) {
|
||||||
|
|
||||||
drop_mode_flags=0;
|
drop_mode_flags=0;
|
||||||
|
scrolling = false;
|
||||||
|
set_fixed_process(false);
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
if (p_what==NOTIFICATION_DRAG_BEGIN) {
|
if (p_what==NOTIFICATION_DRAG_BEGIN) {
|
||||||
|
|
||||||
single_select_defer=NULL;
|
single_select_defer=NULL;
|
||||||
|
if (cache.scroll_speed > 0 && get_rect().has_point(get_viewport()->get_mouse_pos() - get_global_pos())) {
|
||||||
|
scrolling = true;
|
||||||
|
set_fixed_process(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (p_what==NOTIFICATION_FIXED_PROCESS) {
|
if (p_what==NOTIFICATION_FIXED_PROCESS) {
|
||||||
|
|
||||||
|
@ -2731,6 +2740,28 @@ void Tree::_notification(int p_what) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (scrolling) {
|
||||||
|
Point2 point = get_viewport()->get_mouse_pos() - get_global_pos();
|
||||||
|
if (point.x < cache.scroll_border) {
|
||||||
|
point.x -= cache.scroll_border;
|
||||||
|
} else if (point.x > get_size().width - cache.scroll_border) {
|
||||||
|
point.x -= get_size().width - cache.scroll_border;
|
||||||
|
} else {
|
||||||
|
point.x = 0;
|
||||||
|
}
|
||||||
|
if (point.y < cache.scroll_border) {
|
||||||
|
point.y -= cache.scroll_border;
|
||||||
|
} else if (point.y > get_size().height - cache.scroll_border) {
|
||||||
|
point.y -= get_size().height - cache.scroll_border;
|
||||||
|
} else {
|
||||||
|
point.y = 0;
|
||||||
|
}
|
||||||
|
point *= cache.scroll_speed * get_fixed_process_delta_time();
|
||||||
|
point += get_scroll();
|
||||||
|
h_scroll->set_val(point.x);
|
||||||
|
v_scroll->set_val(point.y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_what==NOTIFICATION_DRAW) {
|
if (p_what==NOTIFICATION_DRAW) {
|
||||||
|
|
|
@ -390,6 +390,8 @@ friend class TreeItem;
|
||||||
int button_margin;
|
int button_margin;
|
||||||
Point2 offset;
|
Point2 offset;
|
||||||
int draw_relationship_lines;
|
int draw_relationship_lines;
|
||||||
|
int scroll_border;
|
||||||
|
int scroll_speed;
|
||||||
|
|
||||||
enum ClickType {
|
enum ClickType {
|
||||||
CLICK_NONE,
|
CLICK_NONE,
|
||||||
|
@ -448,6 +450,7 @@ friend class TreeItem;
|
||||||
bool drag_touching_deaccel;
|
bool drag_touching_deaccel;
|
||||||
bool click_handled;
|
bool click_handled;
|
||||||
bool allow_rmb_select;
|
bool allow_rmb_select;
|
||||||
|
bool scrolling;
|
||||||
|
|
||||||
bool force_select_on_already_selected;
|
bool force_select_on_already_selected;
|
||||||
|
|
||||||
|
|
|
@ -714,6 +714,8 @@ void fill_default_theme(Ref<Theme>& t, const Ref<Font> & default_font, const Ref
|
||||||
t->set_constant("item_margin","Tree",12 *scale);
|
t->set_constant("item_margin","Tree",12 *scale);
|
||||||
t->set_constant("button_margin","Tree",4 *scale);
|
t->set_constant("button_margin","Tree",4 *scale);
|
||||||
t->set_constant("draw_relationship_lines", "Tree", 0);
|
t->set_constant("draw_relationship_lines", "Tree", 0);
|
||||||
|
t->set_constant("scroll_border", "Tree", 4);
|
||||||
|
t->set_constant("scroll_speed", "Tree", 12);
|
||||||
|
|
||||||
|
|
||||||
// ItemList
|
// ItemList
|
||||||
|
|
Loading…
Reference in New Issue