Add ability to send drag events to another object
will be documented/tested later
This commit is contained in:
parent
5bb7cef836
commit
c7e8def446
|
@ -652,8 +652,24 @@ bool Control::has_point(const Point2& p_point) const {
|
||||||
return Rect2( Point2(), get_size() ).has_point(p_point);
|
return Rect2( Point2(), get_size() ).has_point(p_point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Control::set_drag_forwarding(Control* p_target) {
|
||||||
|
|
||||||
|
if (p_target)
|
||||||
|
data.drag_owner=p_target->get_instance_ID();
|
||||||
|
else
|
||||||
|
data.drag_owner=0;
|
||||||
|
}
|
||||||
|
|
||||||
Variant Control::get_drag_data(const Point2& p_point) {
|
Variant Control::get_drag_data(const Point2& p_point) {
|
||||||
|
|
||||||
|
if (data.drag_owner) {
|
||||||
|
Object *obj = ObjectDB::get_instance(data.drag_owner);
|
||||||
|
if (obj) {
|
||||||
|
Control *c = obj->cast_to<Control>();
|
||||||
|
return c->call("get_drag_data_fw",p_point,this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (get_script_instance()) {
|
if (get_script_instance()) {
|
||||||
Variant v=p_point;
|
Variant v=p_point;
|
||||||
const Variant *p=&v;
|
const Variant *p=&v;
|
||||||
|
@ -669,6 +685,14 @@ Variant Control::get_drag_data(const Point2& p_point) {
|
||||||
|
|
||||||
bool Control::can_drop_data(const Point2& p_point,const Variant& p_data) const {
|
bool Control::can_drop_data(const Point2& p_point,const Variant& p_data) const {
|
||||||
|
|
||||||
|
if (data.drag_owner) {
|
||||||
|
Object *obj = ObjectDB::get_instance(data.drag_owner);
|
||||||
|
if (obj) {
|
||||||
|
Control *c = obj->cast_to<Control>();
|
||||||
|
return c->call("can_drop_data_fw",p_point,p_data,this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (get_script_instance()) {
|
if (get_script_instance()) {
|
||||||
Variant v=p_point;
|
Variant v=p_point;
|
||||||
const Variant *p[2]={&v,&p_data};
|
const Variant *p[2]={&v,&p_data};
|
||||||
|
@ -683,6 +707,15 @@ bool Control::can_drop_data(const Point2& p_point,const Variant& p_data) const {
|
||||||
}
|
}
|
||||||
void Control::drop_data(const Point2& p_point,const Variant& p_data){
|
void Control::drop_data(const Point2& p_point,const Variant& p_data){
|
||||||
|
|
||||||
|
if (data.drag_owner) {
|
||||||
|
Object *obj = ObjectDB::get_instance(data.drag_owner);
|
||||||
|
if (obj) {
|
||||||
|
Control *c = obj->cast_to<Control>();
|
||||||
|
c->call("drop_data_fw",p_point,p_data,this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (get_script_instance()) {
|
if (get_script_instance()) {
|
||||||
Variant v=p_point;
|
Variant v=p_point;
|
||||||
const Variant *p[2]={&v,&p_data};
|
const Variant *p[2]={&v,&p_data};
|
||||||
|
@ -711,7 +744,6 @@ void Control::set_drag_preview(Control *p_control) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool Control::is_window_modal_on_top() const {
|
bool Control::is_window_modal_on_top() const {
|
||||||
|
|
||||||
if (!is_inside_tree())
|
if (!is_inside_tree())
|
||||||
|
@ -2273,6 +2305,7 @@ void Control::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("grab_click_focus"),&Control::grab_click_focus);
|
ObjectTypeDB::bind_method(_MD("grab_click_focus"),&Control::grab_click_focus);
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("set_drag_forwarding;","target:Control"),&Control::set_drag_forwarding);
|
||||||
ObjectTypeDB::bind_method(_MD("set_drag_preview","control:Control"),&Control::set_drag_preview);
|
ObjectTypeDB::bind_method(_MD("set_drag_preview","control:Control"),&Control::set_drag_preview);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("warp_mouse","to_pos"),&Control::warp_mouse);
|
ObjectTypeDB::bind_method(_MD("warp_mouse","to_pos"),&Control::warp_mouse);
|
||||||
|
@ -2380,6 +2413,7 @@ Control::Control() {
|
||||||
data.rotation=0;
|
data.rotation=0;
|
||||||
data.parent_canvas_item=NULL;
|
data.parent_canvas_item=NULL;
|
||||||
data.scale=Vector2(1,1);
|
data.scale=Vector2(1,1);
|
||||||
|
data.drag_owner=0;
|
||||||
|
|
||||||
|
|
||||||
for (int i=0;i<4;i++) {
|
for (int i=0;i<4;i++) {
|
||||||
|
|
|
@ -129,6 +129,7 @@ private:
|
||||||
bool stop_mouse;
|
bool stop_mouse;
|
||||||
|
|
||||||
Control *parent;
|
Control *parent;
|
||||||
|
ObjectID drag_owner;
|
||||||
bool modal;
|
bool modal;
|
||||||
bool modal_exclusive;
|
bool modal_exclusive;
|
||||||
Ref<Theme> theme;
|
Ref<Theme> theme;
|
||||||
|
@ -229,6 +230,7 @@ public:
|
||||||
virtual Size2 get_combined_minimum_size() const;
|
virtual Size2 get_combined_minimum_size() const;
|
||||||
virtual bool has_point(const Point2& p_point) const;
|
virtual bool has_point(const Point2& p_point) const;
|
||||||
virtual bool clips_input() const;
|
virtual bool clips_input() const;
|
||||||
|
virtual void set_drag_forwarding(Control* p_target);
|
||||||
virtual Variant get_drag_data(const Point2& p_point);
|
virtual Variant get_drag_data(const Point2& p_point);
|
||||||
virtual bool can_drop_data(const Point2& p_point,const Variant& p_data) const;
|
virtual bool can_drop_data(const Point2& p_point,const Variant& p_data) const;
|
||||||
virtual void drop_data(const Point2& p_point,const Variant& p_data);
|
virtual void drop_data(const Point2& p_point,const Variant& p_data);
|
||||||
|
|
|
@ -69,6 +69,7 @@ protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
void add_item(const String& p_item,const Ref<Texture>& p_texture=Ref<Texture>(),bool p_selectable=true);
|
void add_item(const String& p_item,const Ref<Texture>& p_texture=Ref<Texture>(),bool p_selectable=true);
|
||||||
void add_icon_item(const Ref<Texture>& p_item,bool p_selectable=true);
|
void add_icon_item(const Ref<Texture>& p_item,bool p_selectable=true);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue