소스 검색

-Take in consideration canvas layers for GUI input

Juan Linietsky 9 년 전
부모
커밋
35a28f3442
4개의 변경된 파일17개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 0
      scene/2d/canvas_item.cpp
  2. 1 0
      scene/2d/canvas_item.h
  3. 2 0
      scene/gui/control.cpp
  4. 6 1
      scene/gui/control.h

+ 8 - 0
scene/2d/canvas_item.cpp

@@ -1193,6 +1193,14 @@ bool CanvasItem::is_local_transform_notification_enabled() const {
 	return notify_local_transform;
 }
 
+int CanvasItem::get_canvas_layer() const {
+
+	if (canvas_layer)
+		return canvas_layer->get_layer();
+	else
+		return 0;
+}
+
 CanvasItem::CanvasItem() : xform_change(this) {
 
 

+ 1 - 0
scene/2d/canvas_item.h

@@ -268,6 +268,7 @@ public:
 	void set_notify_local_transform(bool p_enable);
 	bool is_local_transform_notification_enabled() const;
 
+	int get_canvas_layer() const;
 
 	CanvasItem();
 	~CanvasItem();

+ 2 - 0
scene/gui/control.cpp

@@ -2071,6 +2071,8 @@ Control *Control::get_root_parent_control() const {
 	return const_cast<Control*>(root);
 }
 
+
+
 void Control::_bind_methods() {
 
 

+ 6 - 1
scene/gui/control.h

@@ -97,7 +97,12 @@ private:
 
 	struct CComparator {
 
-		bool operator()(const Control* p_a, const Control* p_b) const { return p_b->is_greater_than(p_a); }
+		bool operator()(const Control* p_a, const Control* p_b) const {
+			if (p_a->get_canvas_layer()==p_b->get_canvas_layer())
+				return p_b->is_greater_than(p_a);
+			else
+				return p_a->get_canvas_layer() < p_b->get_canvas_layer();
+		}
 	};
 
 	struct Data {