Revision: 13466
          http://sourceforge.net/p/skim-app/code/13466
Author:   hofman
Date:     2023-06-12 18:35:17 +0000 (Mon, 12 Jun 2023)
Log Message:
-----------
Use datasource for overview collection view on 10.11+, as this lays out the 
items lazily, preventing beack ball for large pdfs

Modified Paths:
--------------
    trunk/SKMainWindowController.m
    trunk/SKMainWindowController_Actions.m
    trunk/SKMainWindowController_UI.m

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2023-06-11 19:13:50 UTC (rev 13465)
+++ trunk/SKMainWindowController.m      2023-06-12 18:35:17 UTC (rev 13466)
@@ -328,7 +328,7 @@
         [[NSProcessInfo processInfo] endActivity:activity];
         SKDESTROY(activity);
     }
-    [overviewView removeObserver:self forKeyPath:@"selectionIndexes" 
context:&SKMainWindowThumbnailSelectionObservationContext];
+    [overviewView removeObserver:self forKeyPath:RUNNING_BEFORE(10_11) ? 
@"selectionIndexes" : @"selectionIndexPaths" 
context:&SKMainWindowThumbnailSelectionObservationContext];
     [[NSNotificationCenter defaultCenter] removeObserver:self];
     [self stopObservingNotes:[self notes]];
     [self clearWidgets];
@@ -1668,9 +1668,17 @@
         }
     }
     size = [SKThumbnailView sizeForImageSize:NSMakeSize(ceil(width * 
roundedThumbnailSize), ceil(height * roundedThumbnailSize))];
-    if (NSEqualSizes(size, [overviewView minItemSize]) == NO) {
-        [overviewView setMinItemSize:size];
-        [overviewView setMaxItemSize:size];
+    if (RUNNING_BEFORE(10_11)) {
+        if (NSEqualSizes(size, [overviewView minItemSize]) == NO) {
+            [overviewView setMinItemSize:size];
+            [overviewView setMaxItemSize:size];
+        }
+    } else {
+        NSCollectionViewFlowLayout *layout = [overviewView 
collectionViewLayout];
+        if (NSEqualSizes(size, [layout itemSize]) == NO) {
+            [layout setItemSize:size];
+            [layout invalidateLayout];
+        }
     }
 }
 
@@ -1694,20 +1702,28 @@
         [overviewContentView setTranslatesAutoresizingMaskIntoConstraints:NO];
         [overviewContentView addSubview:scrollView];
         [scrollView release];
-        [overviewView setItemPrototype:[[[SKThumbnailItem alloc] init] 
autorelease]];
         [overviewView setSelectable:YES];
         [overviewView setAllowsMultipleSelection:YES];
+        if (RUNNING_BEFORE(10_11)) {
+            [overviewView setItemPrototype:[[[SKThumbnailItem alloc] init] 
autorelease]];
+            [overviewView setContent:[self thumbnails]];
+        } else {
+            [overviewView 
setCollectionViewLayout:[[[NSCollectionViewFlowLayout alloc] init] 
autorelease]];
+            [overviewView registerClass:[SKThumbnailItem class] 
forItemWithIdentifier:@"thumbnail"];
+            [overviewView setDataSource:(id<NSCollectionViewDataSource>)self];
+        }
         [self updateOverviewItemSize];
-        [overviewView setContent:[self thumbnails]];
         [overviewView setSelectionIndexes:[NSIndexSet 
indexSetWithIndex:[[pdfView currentPage] pageIndex]]];
         [overviewView 
setTypeSelectHelper:[leftSideController.thumbnailTableView typeSelectHelper]];
         [overviewView setDoubleClickAction:@selector(hideOverview:)  ];
-        [overviewView addObserver:self forKeyPath:@"selectionIndexes" 
options:0 context:&SKMainWindowThumbnailSelectionObservationContext];
-        NSInteger i, iMax = [[overviewView content] count];
-        for (i = 0; i < iMax; i++)
-            [(SKThumbnailItem *)[overviewView itemAtIndex:i] 
setHighlightLevel:[self thumbnailHighlightLevelForRow:i]];
-        if (markedPageIndex != NSNotFound)
-            [(SKThumbnailItem *)[overviewView itemAtIndex:markedPageIndex] 
setMarked:YES];
+        [overviewView addObserver:self forKeyPath:RUNNING_BEFORE(10_11) ? 
@"selectionIndexes" : @"selectionIndexPaths" options:0 
context:&SKMainWindowThumbnailSelectionObservationContext];
+        if (RUNNING_BEFORE(10_11)) {
+            NSInteger i, iMax = [[overviewView content] count];
+            for (i = 0; i < iMax; i++)
+                [(SKThumbnailItem *)[overviewView itemAtIndex:i] 
setHighlightLevel:[self thumbnailHighlightLevelForRow:i]];
+            if (markedPageIndex != NSNotFound)
+                [(SKThumbnailItem *)[overviewView itemAtIndex:markedPageIndex] 
setMarked:YES];
+        }
     }
     
     BOOL isPresentation = [self interactionMode] == SKPresentationMode;
@@ -1727,9 +1743,13 @@
     if (RUNNING_BEFORE(10_14)) {
         [overviewContentView setMaterial:isPresentation ? 
NSVisualEffectMaterialDark : RUNNING_BEFORE(10_11) ? 
NSVisualEffectMaterialAppearanceBased : NSVisualEffectMaterialSidebar];
         NSBackgroundStyle style = isPresentation ? NSBackgroundStyleDark : 
NSBackgroundStyleLight;
-        NSUInteger i, iMax = [[overviewView content] count];
-        for (i = 0; i < iMax; i++)
-            [(SKThumbnailItem *)[overviewView itemAtIndex:i] 
setBackgroundStyle:style];
+        if (RUNNING_BEFORE(10_11)) {
+            NSUInteger i, iMax = [[overviewView content] count];
+            for (i = 0; i < iMax; i++)
+                [(SKThumbnailItem *)[overviewView itemAtIndex:i] 
setBackgroundStyle:style];
+        } else {
+            [[overviewView visibleItems] setValue:[NSNumber 
numberWithInteger:style] forKey:@"backgroundStyle"];
+        }
     } else if (isPresentation) {
         SKSetHasDarkAppearance(overviewContentView);
 #pragma clang diagnostic push
@@ -1822,6 +1842,23 @@
     [self hideOverviewAnimating:(BOOL)animate completionHandler:NULL];
 }
 
+- (NSInteger)collectionView:(NSCollectionView *)collectionView
+     numberOfItemsInSection:(NSInteger)section {
+    return [[self thumbnails] count];
+}
+
+- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView
+     itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath {
+    SKThumbnailItem *item = [collectionView 
makeItemWithIdentifier:@"thumbnail" forIndexPath:indexPath];
+    NSUInteger i = [indexPath item];
+    [item setRepresentedObject:[[self thumbnails] objectAtIndex:i]];
+    [item setHighlightLevel:[self thumbnailHighlightLevelForRow:i]];
+    [item setMarked:markedPageIndex == i];
+    if (RUNNING_BEFORE(10_14))
+        [item setBackgroundStyle:[self interactionMode] == SKPresentationMode 
? NSBackgroundStyleDark : NSBackgroundStyleLight];
+    return item;
+}
+
 #pragma mark Searching
 
 - (NSString *)searchString {
@@ -2949,7 +2986,10 @@
     [self setThumbnails:newThumbnails];
     [self updateThumbnailSelection];
     if (overviewView) {
-        [overviewView setContent:newThumbnails];
+        if (RUNNING_BEFORE(10_11))
+            [overviewView setContent:newThumbnails];
+        else
+            [overviewView reloadData];
         [overviewView setSelectionIndexes:[NSIndexSet 
indexSetWithIndex:[[pdfView currentPage] pageIndex]]];
         [self updateOverviewItemSize];
     }

Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m      2023-06-11 19:13:50 UTC (rev 
13465)
+++ trunk/SKMainWindowController_Actions.m      2023-06-12 18:35:17 UTC (rev 
13466)
@@ -392,12 +392,18 @@
 
 - (IBAction)markPage:(id)sender {
     if (markedPageIndex != NSNotFound) {
-        [(SKThumbnailItem *)[overviewView itemAtIndex:markedPageIndex] 
setMarked:NO];
+        if (RUNNING_BEFORE(10_11))
+            [(SKThumbnailItem *)[overviewView itemAtIndex:markedPageIndex] 
setMarked:NO];
+        else
+            [(SKThumbnailItem *)[overviewView itemAtIndexPath:[NSIndexPath 
indexPathForItem:markedPageIndex inSection:0]] setMarked:NO];
         [[(NSTableCellView *)[leftSideController.thumbnailTableView 
viewAtColumn:1 row:markedPageIndex makeIfNecessary:NO] imageView] 
setObjectValue:nil];
     }
     markedPageIndex = [pdfView currentPageIndexAndPoint:&markedPagePoint 
rotated:NULL];
     beforeMarkedPageIndex = NSNotFound;
-    [(SKThumbnailItem *)[overviewView itemAtIndex:markedPageIndex] 
setMarked:YES];
+    if (RUNNING_BEFORE(10_11))
+        [(SKThumbnailItem *)[overviewView itemAtIndex:markedPageIndex] 
setMarked:YES];
+    else
+        [(SKThumbnailItem *)[overviewView itemAtIndexPath:[NSIndexPath 
indexPathForItem:markedPageIndex inSection:0]] setMarked:YES];
     [[(NSTableCellView *)[leftSideController.thumbnailTableView viewAtColumn:1 
row:markedPageIndex makeIfNecessary:NO] imageView] setObjectValue:[NSImage 
markImage]];
 }
 

Modified: trunk/SKMainWindowController_UI.m
===================================================================
--- trunk/SKMainWindowController_UI.m   2023-06-11 19:13:50 UTC (rev 13465)
+++ trunk/SKMainWindowController_UI.m   2023-06-12 18:35:17 UTC (rev 13466)
@@ -362,9 +362,14 @@
         [rowView setHighlightLevel:[self thumbnailHighlightLevelForRow:row]];
     }];
     if (overviewView) {
-        NSInteger i, iMax = [[overviewView content] count];
-        for (i = 0; i < iMax; i++)
-            [(SKThumbnailItem *)[overviewView itemAtIndex:i] 
setHighlightLevel:[self thumbnailHighlightLevelForRow:i]];
+        if (RUNNING_BEFORE(10_11)) {
+            NSInteger i, iMax = [[overviewView content] count];
+            for (i = 0; i < iMax; i++)
+                [(SKThumbnailItem *)[overviewView itemAtIndex:i] 
setHighlightLevel:[self thumbnailHighlightLevelForRow:i]];
+        } else {
+            for (NSIndexPath *indexPath in [overviewView 
indexPathsForVisibleItems])
+                [(SKThumbnailItem *)[overviewView itemAtIndexPath:indexPath] 
setHighlightLevel:[self thumbnailHighlightLevelForRow:[indexPath item]]];
+        }
     }
 }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to