Ver código fonte

Merge branch 'master' of https://github.com/godotengine/godot

Juan Linietsky 9 anos atrás
pai
commit
5245adcf81

+ 5 - 0
SConstruct

@@ -1,5 +1,6 @@
 EnsureSConsVersion(0,14);
 
+
 import string
 import os
 import os.path
@@ -77,6 +78,9 @@ env_base.android_permission_chunk=""
 env_base.android_appattributes_chunk=""
 env_base.disabled_modules=[]
 
+env_base.split_drivers=False
+
+
 
 env_base.__class__.android_add_maven_repository=methods.android_add_maven_repository
 env_base.__class__.android_add_dependency=methods.android_add_dependency
@@ -90,6 +94,7 @@ env_base.__class__.android_add_to_attributes = methods.android_add_to_attributes
 env_base.__class__.disable_module = methods.disable_module
 
 env_base.__class__.add_source_files = methods.add_source_files
+env_base.__class__.use_windows_spawn_fix = methods.use_windows_spawn_fix
 
 env_base["x86_opt_gcc"]=False
 env_base["x86_opt_vc"]=False

+ 1 - 1
core/globals.cpp

@@ -1419,7 +1419,7 @@ Globals::Globals() {
 
 	set("application/name","" );
 	set("application/main_scene","");
-	custom_prop_info["application/main_scene"]=PropertyInfo(Variant::STRING,"application/main_scene",PROPERTY_HINT_FILE,"scn,res,xscn,xml");
+	custom_prop_info["application/main_scene"]=PropertyInfo(Variant::STRING,"application/main_scene",PROPERTY_HINT_FILE,"scn,res,xscn,xml,tscn");
 	set("application/disable_stdout",false);
 	set("application/use_shared_user_dir",true);
 

+ 1 - 1
core/io/packet_peer.cpp

@@ -243,7 +243,7 @@ int PacketPeerStream::get_max_packet_size() const {
 
 void PacketPeerStream::set_stream_peer(const Ref<StreamPeer> &p_peer) {
 
-	ERR_FAIL_COND(p_peer.is_null());
+	//ERR_FAIL_COND(p_peer.is_null());
 
 	if (p_peer.ptr() != peer.ptr()) {
 		ring_buffer.advance_read(ring_buffer.data_left()); // reset the ring buffer

+ 1 - 1
core/os/os.h

@@ -76,7 +76,7 @@ public:
 		bool fullscreen;
 		bool resizable;
 		float get_aspect() const { return (float)width/(float)height; }
-		VideoMode(int p_width=1280,int p_height=720,bool p_fullscreen=false, bool p_resizable = true) {width=p_width; height=p_height; fullscreen=p_fullscreen; resizable = p_resizable; }
+		VideoMode(int p_width=1024,int p_height=600,bool p_fullscreen=false, bool p_resizable = true) {width=p_width; height=p_height; fullscreen=p_fullscreen; resizable = p_resizable; }
 	};
 protected:
 friend class Main;

+ 5 - 4
doc/base/classes.xml

@@ -13724,7 +13724,7 @@ returns:= "username=user&amp;password=pass"
 			<argument index="1" name="button" type="int">
 			</argument>
 			<description>
-			Returns true if the joystick button at the given index is currently pressed. Returns false otherwise. (see JOY_* constans in [InputEvent])
+			Returns if the joystick button at the given index is currently pressed. (see JOY_* constans in [@Global Scope])
 			</description>
 		</method>
 		<method name="is_action_pressed">
@@ -13757,7 +13757,7 @@ returns:= "username=user&amp;password=pass"
 			<argument index="0" name="device" type="int">
 			</argument>
 			<description>
-			Returns true if the specified device is known by the system. This means that it sets all button and axis indices exactly as defined in [InputEvent]. Unknown joysticks are not expected to match these constants, but you can still retrieve events from them.
+			Returns if the specified device is known by the system. This means that it sets all button and axis indices exactly as defined in the JOY_* constants (see [@Global Scope]). Unknown joysticks are not expected to match these constants, but you can still retrieve events from them.
 			</description>
 		</method>
 		<method name="get_joy_axis">
@@ -13768,7 +13768,7 @@ returns:= "username=user&amp;password=pass"
 			<argument index="1" name="axis" type="int">
 			</argument>
 			<description>
-			Returns the current value of the joystick axis at given index (see JOY_* enum in [InputEvent])
+			Returns the current value of the joystick axis at given index (see JOY_* constants in [@Global Scope])
 			</description>
 		</method>
 		<method name="get_joy_name">
@@ -13853,6 +13853,7 @@ returns:= "username=user&amp;password=pass"
 			<argument index="1" name="connected" type="bool">
 			</argument>
 			<description>
+				Emitted when a joystick device has been connected or disconnected
 			</description>
 		</signal>
 	</signals>
@@ -20232,7 +20233,7 @@ returns:= "username=user&amp;password=pass"
 			<argument index="1" name="arguments" type="Array" default="Array()">
 			</argument>
 			<description>
-			Add a user signal (can be added anytime). Arguments are optional, but can be added as an array of dictionaries, each containing "name" and "type" (from [@GlobalScope] TYPE_*).
+			Add a user signal (can be added anytime). Arguments are optional, but can be added as an array of dictionaries, each containing "name" and "type" (from [@Global Scope] TYPE_*).
 			</description>
 		</method>
 		<method name="has_user_signal" qualifiers="const">

+ 1 - 1
drivers/SCsub

@@ -63,7 +63,7 @@ import string
 if env['vsproj']=="yes":
 	env.AddToVSProject(env.drivers_sources)
 
-if (False): #split drivers, this used to be needed for windows until separate builders for windows were created
+if (env.split_drivers): #split drivers, this used to be needed for windows until separate builders for windows were created
 
 	for f in env.drivers_sources:
 		fname = ""

+ 44 - 1
methods.py

@@ -1309,7 +1309,50 @@ def android_add_to_attributes(self,file):
 
 def disable_module(self):
 	self.disabled_modules.append(self.current_module)
-	
+
+def use_windows_spawn_fix(self):
+
+    if (os.name!="nt"):
+	return #not needed, only for windows
+
+    self.split_drivers=True
+
+    import subprocess
+
+    def mySubProcess(cmdline,env):
+	    #print "SPAWNED : " + cmdline
+	    startupinfo = subprocess.STARTUPINFO()
+	    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+	    proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+		    stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False, env = env)
+	    data, err = proc.communicate()
+	    rv = proc.wait()
+	    if rv:
+		    print "====="
+		    print err
+		    print "====="
+	    return rv
+
+    def mySpawn(sh, escape, cmd, args, env):
+
+	    newargs = ' '.join(args[1:])
+	    cmdline = cmd + " " + newargs
+
+	    rv=0
+	    if len(cmdline) > 32000 and cmd.endswith("ar") :
+		    cmdline = cmd + " " + args[1] + " " + args[2] + " "
+		    for i in range(3,len(args)) :
+			    rv = mySubProcess( cmdline + args[i], env )
+			    if rv :
+				    break
+	    else:
+		    rv = mySubProcess( cmdline, env )
+
+	    return rv
+
+    self['SPAWN'] = mySpawn
+
+
 def save_active_platforms(apnames,ap):
 
 	for x in ap:

+ 15 - 7
modules/gdscript/gd_parser.cpp

@@ -283,13 +283,23 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
 				return NULL;
 			}
 			tokenizer->advance();
-			if (tokenizer->get_token()!=GDTokenizer::TK_CONSTANT || tokenizer->get_token_constant().get_type()!=Variant::STRING) {
-				_set_error("Expected string constant as 'preload' argument.");
+
+			String path;
+			bool valid = false;
+			Node *subexpr = _parse_and_reduce_expression(p_parent, p_static);
+			if (subexpr) {
+				if (subexpr->type == Node::TYPE_CONSTANT) {
+					ConstantNode *cn = static_cast<ConstantNode*>(subexpr);
+					if (cn->value.get_type() == Variant::STRING) {
+						valid = true;
+						path = (String) cn->value;
+					}
+				}
+			}
+			if (!valid) {
+				_set_error("expected string constant as 'preload' argument.");
 				return NULL;
 			}
-
-
-			String path = tokenizer->get_token_constant();
 			if (!path.is_abs_path() && base_path!="")
 				path=base_path+"/"+path;
 			path = path.replace("///","//").simplify_path();
@@ -322,8 +332,6 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
 				}
 			}
 
-			tokenizer->advance();
-
 			if (tokenizer->get_token()!=GDTokenizer::TK_PARENTHESIS_CLOSE) {
 				_set_error("Expected ')' after 'preload' path");
 				return NULL;

+ 2 - 0
platform/android/detect.py

@@ -247,3 +247,5 @@ def configure(env):
 	env.Append( BUILDERS = { 'GLSL120' : env.Builder(action = methods.build_legacygl_headers, suffix = 'glsl.h',src_suffix = '.glsl') } )
 	env.Append( BUILDERS = { 'GLSL' : env.Builder(action = methods.build_glsl_headers, suffix = 'glsl.h',src_suffix = '.glsl') } )
 	env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } )
+
+	env.use_windows_spawn_fix()

+ 1 - 1
platform/osx/os_osx.mm

@@ -839,7 +839,7 @@ const char * OS_OSX::get_video_driver_name(int p_driver) const {
 OS::VideoMode OS_OSX::get_default_video_mode() const {
 
 	VideoMode vm;
-	vm.width=800;
+	vm.width=1024;
 	vm.height=600;
 	vm.fullscreen=false;
 	vm.resizable=true;

+ 1 - 35
platform/windows/detect.py

@@ -267,41 +267,7 @@ def configure(env):
 
 		# Workaround for MinGW. See:
 		# http://www.scons.org/wiki/LongCmdLinesOnWin32
-		if (os.name=="nt"):
-			import subprocess
-			
-			def mySubProcess(cmdline,env):
-				#print "SPAWNED : " + cmdline
-				startupinfo = subprocess.STARTUPINFO()
-				startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
-				proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-					stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False, env = env)
-				data, err = proc.communicate()
-				rv = proc.wait()
-				if rv:
-					print "====="
-					print err
-					print "====="
-				return rv
-				
-			def mySpawn(sh, escape, cmd, args, env):
-								
-				newargs = ' '.join(args[1:])
-				cmdline = cmd + " " + newargs
-				
-				rv=0
-				if len(cmdline) > 32000 and cmd.endswith("ar") :
-					cmdline = cmd + " " + args[1] + " " + args[2] + " "
-					for i in range(3,len(args)) :
-						rv = mySubProcess( cmdline + args[i], env )
-						if rv :
-							break	
-				else:				
-					rv = mySubProcess( cmdline, env )
-					
-				return rv
-				
-			env['SPAWN'] = mySpawn
+		env.use_windows_spawn_fix()
 
 		#build using mingw
 		if (os.name=="nt"):

+ 1 - 1
platform/windows/os_windows.cpp

@@ -149,7 +149,7 @@ const char * OS_Windows::get_video_driver_name(int p_driver) const {
 
 OS::VideoMode OS_Windows::get_default_video_mode() const {
 
-	return VideoMode(1280,720,false);
+	return VideoMode(1024,600,false);
 }
 
 int OS_Windows::get_audio_driver_count() const {

+ 1 - 1
platform/x11/os_x11.cpp

@@ -78,7 +78,7 @@ const char * OS_X11::get_video_driver_name(int p_driver) const {
 }
 
 OS::VideoMode OS_X11::get_default_video_mode() const {
-	return OS::VideoMode(1280,720,false);
+	return OS::VideoMode(1024,600,false);
 }
 
 int OS_X11::get_audio_driver_count() const {

+ 10 - 3
scene/resources/scene_format_text.cpp

@@ -85,8 +85,7 @@ Error ResourceInteractiveLoaderText::_parse_ext_resource(VariantParser::Stream*
 	r_res=ResourceLoader::load(path,type);
 
 	if (r_res.is_null()) {
-		r_err_str="Couldn't load external resource: "+path;
-		return ERR_PARSE_ERROR;
+		WARN_PRINT(String("Couldn't load external resource: "+path).utf8().get_data());
 	}
 
 	VariantParser::get_token(p_stream,token,line,r_err_str);
@@ -394,6 +393,13 @@ Error ResourceInteractiveLoaderText::poll() {
 
 		int node_id = packed_scene->get_state()->add_node(parent,owner,type,name,instance);
 
+		if (next_tag.fields.has("groups")) {
+
+			Array groups = next_tag.fields["groups"];
+			for (int i=0;i<groups.size();i++) {
+				packed_scene->get_state()->add_node_group(node_id,packed_scene->get_state()->add_name(groups[i]));
+			}
+		}
 
 		while(true) {
 
@@ -1374,9 +1380,10 @@ bool ResourceFormatSaverText::recognize(const RES& p_resource) const {
 }
 void ResourceFormatSaverText::get_recognized_extensions(const RES& p_resource,List<String> *p_extensions) const {
 
-	p_extensions->push_back("tres"); //text resource
 	if (p_resource->get_type()=="PackedScene")
 		p_extensions->push_back("tscn"); //text scene
+	else
+		p_extensions->push_back("tres"); //text resource
 
 }
 

+ 10 - 0
tools/editor/editor_node.cpp

@@ -4592,6 +4592,16 @@ ToolButton *EditorNode::add_bottom_panel_item(String p_text,Control *p_item) {
 
 }
 
+bool EditorNode::are_bottom_panels_hidden() const {
+
+	for(int i=0;i<bottom_panel_items.size();i++) {
+		if (bottom_panel_items[i].button->is_pressed())
+			return false;
+	}
+
+	return true;
+}
+
 void EditorNode::hide_bottom_panel() {
 
 	_bottom_panel_switch(false,0);

+ 1 - 0
tools/editor/editor_node.h

@@ -670,6 +670,7 @@ public:
 
 
 	ToolButton* add_bottom_panel_item(String p_text,Control *p_item);
+	bool are_bottom_panels_hidden() const;
 	void make_bottom_panel_item_visible(Control *p_item);
 	void raise_bottom_panel_item(Control *p_item);
 	void hide_bottom_panel();

+ 2 - 0
tools/editor/groups_editor.cpp

@@ -51,6 +51,8 @@ void GroupsEditor::_add_group(const String& p_group) {
 	undo_redo->add_undo_method(this,"update_tree");
 
 	undo_redo->commit_action();
+
+	group_name->clear();
 }
 
 void GroupsEditor::_remove_group(Object *p_item, int p_column, int p_id) {

+ 59 - 0
tools/editor/plugins/canvas_item_editor_plugin.cpp

@@ -603,6 +603,9 @@ bool CanvasItemEditor::_select(CanvasItem *item, Point2 p_click_pos, bool p_appe
 				CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 				if (!se)
 					continue;
@@ -643,6 +646,9 @@ void CanvasItemEditor::_key_move(const Vector2& p_dir, bool p_snap, KeyMoveMODE
 		CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 		if (!canvas_item || !canvas_item->is_visible())
 			continue;
+		if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+			continue;
+
 		CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 		if (!se)
 			continue;
@@ -702,6 +708,9 @@ Point2 CanvasItemEditor::_find_topleftmost_point() {
 		CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 		if (!canvas_item || !canvas_item->is_visible())
 			continue;
+		if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+			continue;
+
 
 
 
@@ -731,6 +740,9 @@ int CanvasItemEditor::get_item_count() {
 		if (!canvas_item || !canvas_item->is_visible())
 			continue;
 
+		if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+			continue;
+
 		ic++;
 	};
 
@@ -749,6 +761,8 @@ CanvasItem *CanvasItemEditor::get_single_item() {
 		CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>();
 		if (!canvas_item || !canvas_item->is_visible())
 			continue;
+		if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+			continue;
 
 		if (single_item)
 			return NULL; //morethan one
@@ -1102,6 +1116,9 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) {
 						CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 						if (!canvas_item || !canvas_item->is_visible())
 							continue;
+						if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+							continue;
+
 
 						CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 						if (!se)
@@ -1194,6 +1211,9 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) {
 							CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 							if (!canvas_item || !canvas_item->is_visible())
 								continue;
+							if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+								continue;
+
 							CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 							if (!se)
 								continue;
@@ -1400,6 +1420,9 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) {
 				CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 				if (!se)
 					continue;
@@ -1507,6 +1530,9 @@ void CanvasItemEditor::_viewport_input_event(const InputEvent& p_event) {
 			CanvasItem *canvas_item = E->get()->cast_to<CanvasItem>();
 			if (!canvas_item || !canvas_item->is_visible())
 				continue;
+			if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+				continue;
+
 			CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 			if (!se)
 				continue;
@@ -1881,6 +1907,8 @@ void CanvasItemEditor::_viewport_draw() {
 		CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>();
 		if (!canvas_item || !canvas_item->is_visible())
 			continue;
+		if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+			continue;
 		CanvasItemEditorSelectedItem *se=editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(canvas_item);
 		if (!se)
 			continue;
@@ -2104,6 +2132,9 @@ void CanvasItemEditor::_notification(int p_what) {
 			if (!canvas_item || !canvas_item->is_visible())
 				continue;
 
+			if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+				continue;
+
 			if (canvas_item->cast_to<Control>())
 				has_control=true;
 			else
@@ -2509,6 +2540,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				canvas_item->set_meta("_edit_lock_",true);
 				emit_signal("item_lock_status_changed");
 			}
@@ -2524,6 +2558,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 
 				canvas_item->set_meta("_edit_lock_",Variant());
 				emit_signal("item_lock_status_changed");
@@ -2542,6 +2579,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				canvas_item->set_meta("_edit_group_",true);
 				emit_signal("item_group_status_changed");
 			}
@@ -2557,6 +2597,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				canvas_item->set_meta("_edit_group_",Variant());
 				emit_signal("item_group_status_changed");
 			}
@@ -2575,6 +2618,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 
 				Control *c = canvas_item->cast_to<Control>();
 				if (!c)
@@ -2693,6 +2739,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				if (canvas_item->cast_to<Node2D>()) {
 					Node2D *n2d = canvas_item->cast_to<Node2D>();
 
@@ -2803,6 +2852,8 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
 
 
 				if (canvas_item->cast_to<Node2D>()) {
@@ -2853,6 +2904,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 				if (canvas_item->cast_to<Node2D>()) {
 					Node2D *n2d = canvas_item->cast_to<Node2D>();
 
@@ -2887,6 +2941,9 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 			for(Map<Node*,Object*>::Element *E=selection.front();E;E=E->next()) {
 				CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>();
 				if (!canvas_item) continue;
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
+
 
 				// counting invisible items, for now
 				//if (!canvas_item->is_visible()) continue;
@@ -2979,6 +3036,8 @@ void CanvasItemEditor::_popup_callback(int p_op) {
 				if (!canvas_item || !canvas_item->is_visible())
 					continue;
 
+				if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+					continue;
 
 				canvas_item->set_meta("_edit_ik_",true);
 

+ 18 - 1
tools/editor/plugins/tile_map_editor_plugin.cpp

@@ -533,6 +533,8 @@ void TileMapEditor::_canvas_draw() {
 
 		if (node->get_half_offset()!=TileMap::HALF_OFFSET_X) {
 
+			int max_lines=2000; //avoid crash if size too smal
+
 			for(int i=(si.pos.x)-1;i<=(si.pos.x+si.size.x);i++) {
 
 				Vector2 from = xform.xform(node->map_to_world(Vector2(i,si.pos.y)));
@@ -540,10 +542,12 @@ void TileMapEditor::_canvas_draw() {
 
 				Color col=i==0?Color(1,0.8,0.2,0.5):Color(1,0.3,0.1,0.2);
 				canvas_item_editor->draw_line(from,to,col,1);
-
+				if (max_lines--==0)
+					break;
 			}
 		} else {
 
+			int max_lines=10000; //avoid crash if size too smal
 
 			for(int i=(si.pos.x)-1;i<=(si.pos.x+si.size.x);i++) {
 
@@ -558,11 +562,17 @@ void TileMapEditor::_canvas_draw() {
 					Vector2 to = xform.xform(node->map_to_world(Vector2(i,j+1),true)+ofs);
 					Color col=i==0?Color(1,0.8,0.2,0.5):Color(1,0.3,0.1,0.2);
 					canvas_item_editor->draw_line(from,to,col,1);
+
+					if (max_lines--==0)
+						break;
+
 				}
 
 			}
 		}
 
+		int max_lines=10000; //avoid crash if size too smal
+
 		if (node->get_half_offset()!=TileMap::HALF_OFFSET_Y) {
 
 			for(int i=(si.pos.y)-1;i<=(si.pos.y+si.size.y);i++) {
@@ -573,6 +583,9 @@ void TileMapEditor::_canvas_draw() {
 				Color col=i==0?Color(1,0.8,0.2,0.5):Color(1,0.3,0.1,0.2);
 				canvas_item_editor->draw_line(from,to,col,1);
 
+				if (max_lines--==0)
+					break;
+
 			}
 		} else {
 
@@ -590,6 +603,10 @@ void TileMapEditor::_canvas_draw() {
 					Vector2 to = xform.xform(node->map_to_world(Vector2(j+1,i),true)+ofs);
 					Color col=i==0?Color(1,0.8,0.2,0.5):Color(1,0.3,0.1,0.2);
 					canvas_item_editor->draw_line(from,to,col,1);
+
+					if (max_lines--==0)
+						break;
+
 				}
 
 			}

+ 3 - 19
tools/editor/script_editor_debugger.cpp

@@ -360,7 +360,9 @@ void ScriptEditorDebugger::_parse_message(const String& p_msg,const Array& p_dat
 
 			if (EditorNode::get_log()->is_hidden()) {
 				log_forced_visible=true;
-				EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
+				if (EditorNode::get_singleton()->are_bottom_panels_hidden()) {
+					EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
+				}
 			}
 			EditorNode::get_log()->add_message(t);
 
@@ -538,9 +540,6 @@ void ScriptEditorDebugger::_notification(int p_what) {
 			forward->set_icon( get_icon("Forward","EditorIcons"));
 			dobreak->set_icon( get_icon("Pause","EditorIcons"));
 			docontinue->set_icon( get_icon("DebugContinue","EditorIcons"));
-			tb->set_normal_texture( get_icon("Close","EditorIcons"));
-			tb->set_hover_texture( get_icon("CloseHover","EditorIcons"));
-			tb->set_pressed_texture( get_icon("Close","EditorIcons"));
 			scene_tree_refresh->set_icon( get_icon("Reload","EditorIcons"));
 			le_set->connect("pressed",this,"_live_edit_set");
 			le_clear->connect("pressed",this,"_live_edit_clear");
@@ -781,13 +780,6 @@ void ScriptEditorDebugger::_stack_dump_frame_selected() {
 
 }
 
-void ScriptEditorDebugger::_hide_request() {
-
-	if (EditorNode::get_log()->is_visible())
-		EditorNode::get_singleton()->hide_bottom_panel();
-	emit_signal("show_debugger",false);
-}
-
 void ScriptEditorDebugger::_output_clear() {
 
 	//output->clear();
@@ -1188,7 +1180,6 @@ void ScriptEditorDebugger::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("debug_break"),&ScriptEditorDebugger::debug_break);
 	ObjectTypeDB::bind_method(_MD("debug_continue"),&ScriptEditorDebugger::debug_continue);
 	ObjectTypeDB::bind_method(_MD("_output_clear"),&ScriptEditorDebugger::_output_clear);
-	ObjectTypeDB::bind_method(_MD("_hide_request"),&ScriptEditorDebugger::_hide_request);
 	ObjectTypeDB::bind_method(_MD("_performance_draw"),&ScriptEditorDebugger::_performance_draw);
 	ObjectTypeDB::bind_method(_MD("_performance_select"),&ScriptEditorDebugger::_performance_select);
 	ObjectTypeDB::bind_method(_MD("_scene_tree_request"),&ScriptEditorDebugger::_scene_tree_request);
@@ -1224,13 +1215,6 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor){
 	tabs->set_area_as_parent_rect();
 	add_child(tabs);
 
-	tb = memnew( TextureButton );
-	tb->connect("pressed",this,"_hide_request");
-	tb->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,20);
-	tb->set_margin(MARGIN_TOP,2);
-	add_child(tb);
-
-
 
 	VBoxContainer *vbc = memnew( VBoxContainer );
 	vbc->set_name("Debugger");

+ 0 - 4
tools/editor/script_editor_debugger.h

@@ -76,9 +76,6 @@ class ScriptEditorDebugger : public Control {
 
 
 
-	TextureButton *tb;
-
-
 	TabContainer *tabs;
 
 	LineEdit *reason;
@@ -129,7 +126,6 @@ class ScriptEditorDebugger : public Control {
 	void _performance_select(Object *, int, bool);
 	void _stack_dump_frame_selected();
 	void _output_clear();
-	void _hide_request();
 
 	void _scene_tree_request();
 	void _parse_message(const String& p_msg,const Array& p_data);