Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static bool initializedMainViewMetadata;
- private static Type containerWinType;
- private static FieldInfo showModeField;
- private static PropertyInfo positionProperty;
- private static object mainWindow;
- public static Rect GetEditorMainWindowPos()
- {
- if (Utility.initializedMainViewMetadata == false)
- {
- Utility.initializedMainViewMetadata = true;
- Utility.LazyInitializeMainViewMetadata();
- }
- if (Utility.containerWinType == null)
- return default(Rect);
- if (Utility.mainWindow == null || Utility.mainWindow.Equals(null) == true || Object.Equals(Utility.mainWindow, "null") == true)
- {
- Object[] windows = Resources.FindObjectsOfTypeAll(containerWinType);
- foreach (Object win in windows)
- {
- int showmode = (int)Utility.showModeField.GetValue(win);
- if (showmode == 4) // main window
- {
- Utility.mainWindow = win;
- break;
- }
- }
- }
- if (Utility.mainWindow.Equals(null) == false)
- return (Rect)Utility.positionProperty.GetValue(Utility.mainWindow, null);
- throw new NotSupportedException("Can't find internal main window. Maybe something has changed inside Unity.");
- }
- [AssemblyVerifier]
- private static void LazyInitializeMainViewMetadata()
- {
- Utility.containerWinType = AssemblyVerifier.TryGetType(typeof(Editor).Assembly, "UnityEditor.ContainerWindow");
- if (Utility.containerWinType != null)
- {
- Utility.showModeField = AssemblyVerifier.TryGetField(Utility.containerWinType, "m_ShowMode", BindingFlags.NonPublic | BindingFlags.Instance);
- Utility.positionProperty = AssemblyVerifier.TryGetProperty(Utility.containerWinType, "position", BindingFlags.Public | BindingFlags.Instance);
- if (Utility.showModeField == null || Utility.positionProperty == null)
- Utility.containerWinType = null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement