@@ -36,6 +36,10 @@ public class DebugLogRecycledListView : MonoBehaviour
3636 private float heightOfSelectedLogEntry ;
3737 private float DeltaHeightOfSelectedLogEntry { get { return heightOfSelectedLogEntry - logItemHeight ; } }
3838
39+ /// These properties are used by <see cref="OnBeforeFilterLogs"/> and <see cref="OnAfterFilterLogs"/>.
40+ private int collapsedOrderOfSelectedLogEntry ;
41+ private float scrollDistanceToSelectedLogEntry ;
42+
3943 // Log items used to visualize the visible debug entries
4044 private readonly DynamicCircularBuffer < DebugLogItem > visibleLogItems = new DynamicCircularBuffer < DebugLogItem > ( 32 ) ;
4145
@@ -128,6 +132,57 @@ public void DeselectSelectedLogItem()
128132 heightOfSelectedLogEntry = 0f ;
129133 }
130134
135+ /// <summary>
136+ /// Cache the currently selected log item's properties so that its position can be restored after <see cref="OnAfterFilterLogs"/> is called.
137+ /// </summary>
138+ public void OnBeforeFilterLogs ( )
139+ {
140+ collapsedOrderOfSelectedLogEntry = 0 ;
141+ scrollDistanceToSelectedLogEntry = 0f ;
142+
143+ if ( selectedLogEntry != null )
144+ {
145+ if ( ! isCollapseOn )
146+ {
147+ for ( int i = 0 ; i < indexOfSelectedLogEntry ; i ++ )
148+ {
149+ if ( entriesToShow [ i ] == selectedLogEntry )
150+ collapsedOrderOfSelectedLogEntry ++ ;
151+ }
152+ }
153+
154+ scrollDistanceToSelectedLogEntry = indexOfSelectedLogEntry * ItemHeight - transformComponent . anchoredPosition . y ;
155+ }
156+ }
157+
158+ /// <summary>
159+ /// See <see cref="OnBeforeFilterLogs"/>.
160+ /// </summary>
161+ public void OnAfterFilterLogs ( )
162+ {
163+ // Refresh selected log entry's index
164+ int newIndexOfSelectedLogEntry = - 1 ;
165+ if ( selectedLogEntry != null )
166+ {
167+ for ( int i = 0 ; i < entriesToShow . Count ; i ++ )
168+ {
169+ if ( entriesToShow [ i ] == selectedLogEntry && collapsedOrderOfSelectedLogEntry -- == 0 )
170+ {
171+ newIndexOfSelectedLogEntry = i ;
172+ break ;
173+ }
174+ }
175+ }
176+
177+ if ( newIndexOfSelectedLogEntry < 0 )
178+ DeselectSelectedLogItem ( ) ;
179+ else
180+ {
181+ indexOfSelectedLogEntry = newIndexOfSelectedLogEntry ;
182+ transformComponent . anchoredPosition = new Vector2 ( 0f , newIndexOfSelectedLogEntry * ItemHeight - scrollDistanceToSelectedLogEntry ) ;
183+ }
184+ }
185+
131186 // Number of debug entries may have changed, update the list
132187 public void OnLogEntriesUpdated ( bool updateAllVisibleItemContents )
133188 {
0 commit comments