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