Quellcode durchsuchen

tools: reduce flickering when EditorView gets created

Daniele Bartolini vor 2 Jahren
Ursprung
Commit
d8e9bbca4d
2 geänderte Dateien mit 20 neuen und 17 gelöschten Zeilen
  1. 8 7
      tools/level_editor/editor_view.vala
  2. 12 10
      tools/level_editor/level_editor.vala

+ 8 - 7
tools/level_editor/editor_view.vala

@@ -31,16 +31,12 @@ public class EditorView : Gtk.EventBox
 	private bool _mouse_right;
 
 	private uint _window_id;
-
-	public uint window_id
-	{
-		get { return (uint)_window_id; }
-	}
+	private uint _last_window_id;
 
 	private HashMap<uint, bool> _keys;
 
 	// Signals
-	public signal void realized();
+	public signal void native_window_ready(uint window_id, int width, int height);
 
 	private string key_to_string(uint k)
 	{
@@ -83,6 +79,7 @@ public class EditorView : Gtk.EventBox
 		_mouse_right  = false;
 
 		_window_id = 0;
+		_last_window_id = 0;
 
 		_keys = new HashMap<uint, bool>();
 		_keys[Gdk.Key.w] = false;
@@ -274,6 +271,11 @@ public class EditorView : Gtk.EventBox
 			)
 			return;
 
+		if (_last_window_id != _window_id) {
+			_last_window_id = _window_id;
+			native_window_ready(_window_id, ev.width, ev.height);
+		}
+
 		_allocation = ev;
 		_client.send(DeviceApi.resize(_allocation.width, _allocation.height));
 
@@ -296,7 +298,6 @@ public class EditorView : Gtk.EventBox
 #elif CROWN_PLATFORM_WINDOWS
 		_window_id = gdk_win32_window_get_handle(this.get_window());
 #endif
-		realized();
 	}
 }
 

+ 12 - 10
tools/level_editor/level_editor.vala

@@ -1263,7 +1263,7 @@ public class LevelEditorApplication : Gtk.Application
 		}
 	}
 
-	private async void start_editor(uint window_xid)
+	private async void start_editor(uint window_xid, int width, int height)
 	{
 		if (window_xid == 0)
 			return;
@@ -1279,7 +1279,8 @@ public class LevelEditorApplication : Gtk.Application
 			"--parent-window",
 			window_xid.to_string(),
 			"--wait-console",
-			"--pumped"
+			"--pumped",
+			"--window-rect", "0", "0", width.to_string(), height.to_string()
 		};
 
 		try {
@@ -1304,7 +1305,7 @@ public class LevelEditorApplication : Gtk.Application
 		}
 	}
 
-	private async void start_resource_preview(uint window_xid)
+	private async void start_resource_preview(uint window_xid, int width, int height)
 	{
 		if (window_xid == 0)
 			return;
@@ -1322,7 +1323,8 @@ public class LevelEditorApplication : Gtk.Application
 			"--console-port",
 			UNIT_PREVIEW_TCP_PORT.to_string(),
 			"--wait-console",
-			"--pumped"
+			"--pumped",
+			"--window-rect", "0", "0", width.to_string(), height.to_string()
 		};
 
 		try {
@@ -1419,7 +1421,7 @@ public class LevelEditorApplication : Gtk.Application
 		}
 
 		_editor_view = new EditorView(_editor);
-		_editor_view.realized.connect(on_editor_view_realized);
+		_editor_view.native_window_ready.connect(on_editor_view_realized);
 		_editor_view.button_press_event.connect(on_button_press);
 		_editor_view.button_release_event.connect(on_button_release);
 
@@ -1443,7 +1445,7 @@ public class LevelEditorApplication : Gtk.Application
 
 		_resource_preview_view = new EditorView(_resource_preview, false);
 		_resource_preview_view.set_size_request(300, 300);
-		_resource_preview_view.realized.connect(on_resource_preview_view_realized);
+		_resource_preview_view.native_window_ready.connect(on_resource_preview_view_realized);
 		_resource_preview_view.show_all();
 
 		_resource_preview_stack.add(_resource_preview_view);
@@ -1585,14 +1587,14 @@ public class LevelEditorApplication : Gtk.Application
 		fcd.destroy();
 	}
 
-	private async void on_editor_view_realized()
+	private async void on_editor_view_realized(uint window_id, int width, int height)
 	{
-		start_editor.begin(_editor_view.window_id);
+		start_editor.begin(window_id, width, height);
 	}
 
-	private async void on_resource_preview_view_realized()
+	private async void on_resource_preview_view_realized(uint window_id, int width, int height)
 	{
-		start_resource_preview.begin(_resource_preview_view.window_id);
+		start_resource_preview.begin(window_id, width, height);
 	}
 
 	private void on_tool(GLib.SimpleAction action, GLib.Variant? param)