diff --git a/Source/Extensions/PawnTable_Extensions.cs b/Source/Extensions/PawnTable_Extensions.cs new file mode 100644 index 0000000..5d94289 --- /dev/null +++ b/Source/Extensions/PawnTable_Extensions.cs @@ -0,0 +1,35 @@ +using RimWorld; +using RimWorld.BaseGen; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace WorkTab.Extensions { + internal static class PawnTable_Extensions { + private static ConditionalWeakTable> outRectDictionary=new ConditionalWeakTable>(); + /// + /// Sets the rectangle the is drawn in. + /// + /// The being extended. + /// The rectangle the will be drawn in. + internal static void set_OutRect(this PawnTable pawnTable, Rect outRect) { + var value = outRectDictionary.GetValue( + pawnTable, + a => new StrongBox(outRect) + ); + value.Value = outRect; + } + /// + /// Gets the rectangle the will be drawn in. + /// + /// The being extended. + /// The rectangle the will be drawn in. + internal static Rect get_OutRect(this PawnTable pawnTable) { + return outRectDictionary.GetOrCreateValue(pawnTable).Value; + } + } +} diff --git a/Source/HarmonyPatches/PawnTable/PawnTable_PawnTableOnGUI.cs b/Source/HarmonyPatches/PawnTable/PawnTable_PawnTableOnGUI.cs index 28462f6..3c0d8bd 100644 --- a/Source/HarmonyPatches/PawnTable/PawnTable_PawnTableOnGUI.cs +++ b/Source/HarmonyPatches/PawnTable/PawnTable_PawnTableOnGUI.cs @@ -8,6 +8,7 @@ using RimWorld; using UnityEngine; using Verse; +using WorkTab.Extensions; namespace WorkTab { [HarmonyPatch(typeof(PawnTable), nameof(PawnTable.PawnTableOnGUI))] @@ -79,7 +80,11 @@ public static bool Prefix(PawnTable __instance, // Instead, we want to limit outRect to the available view area, so a horizontal scrollbar can appear. float labelWidth = cachedColumnWidths[0]; var labelCol = columns[0]; - float outWidth = Mathf.Min( cachedSize.x - labelWidth, UI.screenWidth - (standardWindowMargin * 2f) ); + // ideally this method would be called with a Rect outRect + // indicating the window it is being drawn in instead + // of a Vector2 position + var outRect = __instance.get_OutRect(); + float outWidth = outRect.width - labelWidth; float viewWidth = cachedSize.x - labelWidth - 16f; Rect labelHeaderRect = new Rect( diff --git a/Source/PawnTable/MainTabWindow_WorkTab.cs b/Source/PawnTable/MainTabWindow_WorkTab.cs index 4e1bf05..f4c8009 100644 --- a/Source/PawnTable/MainTabWindow_WorkTab.cs +++ b/Source/PawnTable/MainTabWindow_WorkTab.cs @@ -10,6 +10,7 @@ using RimWorld.Planet; using UnityEngine; using Verse; +using WorkTab.Extensions; using static WorkTab.Constants; using static WorkTab.InteractionUtilities; using static WorkTab.Resources; @@ -122,6 +123,7 @@ public static void SelectWholeDay() { } public override void DoWindowContents(Rect rect) { + Instance.Table.set_OutRect(rect); if (_columnsChanged) { RebuildTable(); }