This commit is contained in:
2026-06-09 10:01:53 +07:00
parent 71a096556a
commit 9048435ac4
4 changed files with 29 additions and 5835 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -137,7 +137,7 @@ namespace VTabs
if (dockArea.GetType() != t_DockArea) return; // happens on 2021.1.28
var curScroll = dockArea.GetFieldValue<float>("m_ScrollOffset");
var curScroll = dockArea.GetFieldValue<float>("m_ScrollOffset", false);
if (!curScroll.Approx(0))
curScroll -= nonZeroTabScrollOffset;
@@ -174,7 +174,7 @@ namespace VTabs
if (!newScroll.Approx(0))
newScroll += nonZeroTabScrollOffset;
dockArea.SetFieldValue("m_ScrollOffset", newScroll);
dockArea.SetFieldValue("m_ScrollOffset", newScroll, false);
EditorWindow.focusedWindow.Repaint();
@@ -1122,30 +1122,16 @@ namespace VTabs
{
if (!isOneColumn) return;
if (!browser.InvokeMethod<bool>("Initialized"))
browser.InvokeMethod("Init");
var m_TreeViewKeyboardControlID = GUIUtility.GetControlID(FocusType.Keyboard);
browser.InvokeMethod("OnEvent");
if (curEvent.isMouseDown && browser.position.SetPos(0, 0).IsHovered())
t_ProjectBrowser.SetFieldValue("s_LastInteractedProjectBrowser", browser);
// header
browser.SetFieldValue("m_ListHeaderRect", breadcrumbsRect);
@@ -1155,34 +1141,15 @@ namespace VTabs
breadcrumbsRect.Draw(breadcrumbsTint);
topGapRect.Draw(topGapColor);
// footer
browser.SetFieldValue("m_BottomBarRect", footerRect);
browser.InvokeMethod("BottomBar");
// tree
browser.GetMemberValue("m_AssetTree")?.InvokeMethod("OnGUI", listAreaRect, m_TreeViewKeyboardControlID);
browser.InvokeMethod("HandleCommandEvents");
}
void twoColumns()
{
@@ -1365,7 +1332,7 @@ namespace VTabs
if (!pos.Approx(0))
pos += nonZeroTabScrollOffset;
GetDockArea(window).SetFieldValue("m_ScrollOffset", pos);
GetDockArea(window)?.SetFieldValue("m_ScrollOffset", pos, false);
}
static void EnsureActiveTabsVisibleOnScroller() => allEditorWindows.Where(r => r.hasFocus && !r.maximized && r.docked).ForEach(r => EnsureTabVisibleOnScroller(r));
@@ -1373,8 +1340,11 @@ namespace VTabs
static float GetOptimalTabScrollerPosition(EditorWindow activeTab)
{
var dockArea = activeTab.GetMemberValue("m_Parent");
var tabAreaWidth = dockArea.GetFieldValue<Rect>("m_TabAreaRect").width;
var dockArea = activeTab.GetMemberValue("m_Parent", false);
if (dockArea == null) return 0;
var tabAreaRect = dockArea.GetFieldValue<Rect>("m_TabAreaRect", false);
var tabAreaWidth = tabAreaRect.width;
if (tabAreaWidth == 0)
tabAreaWidth = activeTab.position.width - 38;
@@ -1396,7 +1366,7 @@ namespace VTabs
foreach (var tab in GetTabList(activeTab))
{
var tabWidth = dockArea.InvokeMethod<float>("GetTabWidth", tabStyle, tab);
var tabWidth = dockArea.InvokeMethod<float>("GetTabWidth", false, tabStyle, tab);
tabWidthSum += tabWidth;
@@ -1731,9 +1701,9 @@ namespace VTabs
static object GetDockArea(EditorWindow window) => window.GetFieldValue("m_Parent");
static object GetDockArea(EditorWindow window) => window.GetFieldValue("m_Parent", false);
static List<EditorWindow> GetTabList(EditorWindow window) => GetDockArea(window).GetFieldValue<List<EditorWindow>>("m_Panes");
static List<EditorWindow> GetTabList(EditorWindow window) => GetDockArea(window)?.GetFieldValue<List<EditorWindow>>("m_Panes", false) ?? new List<EditorWindow>();

View File

@@ -221,7 +221,7 @@ namespace VTabs.Libs
}
public static object InvokeMethod(this object o, string methodName, params object[] parameters) // todo handle null params (can't get their type)
public static object InvokeMethod(this object o, string methodName, bool exceptionIfNotFound, params object[] parameters) // todo handle null params (can't get their type)
{
var type = (o as Type) ?? o.GetType();
var target = o is Type ? null : o;
@@ -231,11 +231,21 @@ namespace VTabs.Libs
return methodInfo.Invoke(target, parameters);
throw new System.Exception($"Method '{methodName}' not found in type '{type.Name}', its parent types and interfaces");
if (exceptionIfNotFound)
throw new System.Exception($"Method '{methodName}' not found in type '{type.Name}', its parent types and interfaces");
return null;
}
public static object InvokeMethod(this object o, string methodName, params object[] parameters) => o.InvokeMethod(methodName, true, parameters);
public static T InvokeMethod<T>(this object o, string methodName, bool exceptionIfNotFound, params object[] parameters)
{
var res = o.InvokeMethod(methodName, exceptionIfNotFound, parameters);
if (res == null) return default;
return (T)res;
}
public static T InvokeMethod<T>(this object o, string methodName, params object[] parameters) => o.InvokeMethod<T>(methodName, true, parameters);
static FieldInfo GetFieldInfo(this Type type, string fieldName)
{
@@ -344,13 +354,6 @@ namespace VTabs.Libs
}
return (T)val;
}
public static T InvokeMethod<T>(this object o, string methodName, params object[] parameters) => (T)o.InvokeMethod(methodName, parameters);
public static List<Type> GetSubclasses(this Type t) => t.Assembly.GetTypes().Where(type => type.IsSubclassOf(t)).ToList();
public static object GetDefaultValue(this FieldInfo f, params object[] constructorVars) => f.GetValue(System.Activator.CreateInstance(((MemberInfo)f).ReflectedType, constructorVars));

View File

@@ -1,11 +1,2 @@
fileFormatVersion: 2
guid: 91d4456e469254096af9035b29263ca5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
guid: 91d4456e469254096af9035b29263ca5