Advertisement
Mikilo

GetEditorMainWindowPos

Feb 27th, 2020
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.75 KB | None | 0 0
  1. private static bool         initializedMainViewMetadata;
  2. private static Type         containerWinType;
  3. private static FieldInfo    showModeField;
  4. private static PropertyInfo positionProperty;
  5.  
  6. private static object   mainWindow;
  7.  
  8. public static Rect  GetEditorMainWindowPos()
  9. {
  10.     if (Utility.initializedMainViewMetadata == false)
  11.     {
  12.         Utility.initializedMainViewMetadata = true;
  13.         Utility.LazyInitializeMainViewMetadata();
  14.     }
  15.  
  16.     if (Utility.containerWinType == null)
  17.         return default(Rect);
  18.  
  19.     if (Utility.mainWindow == null || Utility.mainWindow.Equals(null) == true || Object.Equals(Utility.mainWindow, "null") == true)
  20.     {
  21.         Object[]    windows = Resources.FindObjectsOfTypeAll(containerWinType);
  22.         foreach (Object win in windows)
  23.         {
  24.             int showmode = (int)Utility.showModeField.GetValue(win);
  25.             if (showmode == 4) // main window
  26.             {
  27.                 Utility.mainWindow = win;
  28.                 break;
  29.             }
  30.         }
  31.     }
  32.  
  33.     if (Utility.mainWindow.Equals(null) == false)
  34.         return (Rect)Utility.positionProperty.GetValue(Utility.mainWindow, null);
  35.  
  36.     throw new NotSupportedException("Can't find internal main window. Maybe something has changed inside Unity.");
  37. }
  38.  
  39. [AssemblyVerifier]
  40. private static void LazyInitializeMainViewMetadata()
  41. {
  42.     Utility.containerWinType = AssemblyVerifier.TryGetType(typeof(Editor).Assembly, "UnityEditor.ContainerWindow");
  43.     if (Utility.containerWinType != null)
  44.     {
  45.         Utility.showModeField = AssemblyVerifier.TryGetField(Utility.containerWinType, "m_ShowMode", BindingFlags.NonPublic | BindingFlags.Instance);
  46.         Utility.positionProperty = AssemblyVerifier.TryGetProperty(Utility.containerWinType, "position", BindingFlags.Public | BindingFlags.Instance);
  47.  
  48.         if (Utility.showModeField == null || Utility.positionProperty == null)
  49.             Utility.containerWinType = null;
  50.     }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement