Revision: 15479 http://sourceforge.net/p/skim-app/code/15479 Author: hofman Date: 2025-06-17 14:19:05 +0000 (Tue, 17 Jun 2025) Log Message: ----------- implement changed crop boxes in PDFDocument category
Modified Paths: -------------- trunk/PDFDocument_SKExtensions.h trunk/PDFDocument_SKExtensions.m trunk/SKMainWindowController.m Modified: trunk/PDFDocument_SKExtensions.h =================================================================== --- trunk/PDFDocument_SKExtensions.h 2025-06-17 09:32:30 UTC (rev 15478) +++ trunk/PDFDocument_SKExtensions.h 2025-06-17 14:19:05 UTC (rev 15479) @@ -64,6 +64,7 @@ @property (nonatomic, readonly) BOOL allowsSaving; @property (nonatomic, readonly) BOOL allowsNotes; @property (nonatomic, readonly) BOOL realAllowsCommenting; +@property (nonatomic, nullable, copy) NSArray<NSString *> *changedCropBoxes; @property (nonatomic, nullable, readonly) NSArray<PDFAnnotation *> *detectedWidgets; @property (nonatomic, nullable, weak) NSDocument *containingDocument; - (void)addAnnotation:(PDFAnnotation *)annotation toPage:(PDFPage *)page; Modified: trunk/PDFDocument_SKExtensions.m =================================================================== --- trunk/PDFDocument_SKExtensions.m 2025-06-17 09:32:30 UTC (rev 15478) +++ trunk/PDFDocument_SKExtensions.m 2025-06-17 14:19:05 UTC (rev 15479) @@ -295,6 +295,29 @@ return document; } +- (NSArray *)changedCropBoxes { + NSMutableArray *cropBoxes = [NSMutableArray array]; + BOOL hasCrop = NO; + for (PDFPage *page in self) { + NSRect bounds = [page boundsForBox:kPDFDisplayBoxCropBox]; + NSRect origBounds = NSRectFromCGRect(CGPDFPageGetBoxRect([page pageRef], kCGPDFCropBox)); + if (NSEqualRects(bounds, origBounds)) { + [cropBoxes addObject:@""]; + } else { + [cropBoxes addObject:NSStringFromRect(bounds)]; + hasCrop = YES; + } + } + return hasCrop ? cropBoxes : nil; +} + +- (void)setChangedCropBoxes:(NSArray *)cropBoxes { + [cropBoxes enumerateObjectsUsingBlock:^(NSString *box, NSUInteger i, BOOL *stop){ + if ([box isEqualToString:@""] == NO) + [[self pageAtIndex:i] setBounds:NSRectFromString(box) forBox:kPDFDisplayBoxCropBox]; + }]; +} + - (void)setContainingDocument:(NSDocument *)document {} - (NSArray *)detectedWidgets { return nil; } Modified: trunk/SKMainWindowController.m =================================================================== --- trunk/SKMainWindowController.m 2025-06-17 09:32:30 UTC (rev 15478) +++ trunk/SKMainWindowController.m 2025-06-17 14:19:05 UTC (rev 15479) @@ -529,32 +529,6 @@ mwcFlags.settingUpWindow = 0; } -- (NSArray *)changedCropBoxes { - NSMutableArray *cropBoxes = [NSMutableArray array]; - BOOL hasCrop = NO; - for (PDFPage *page in [self pdfDocument]) { - NSRect bounds = [page boundsForBox:kPDFDisplayBoxCropBox]; - NSRect origBounds = NSRectFromCGRect(CGPDFPageGetBoxRect([page pageRef], kCGPDFCropBox)); - if (NSEqualRects(bounds, origBounds)) { - [cropBoxes addObject:@""]; - } else { - [cropBoxes addObject:NSStringFromRect(bounds)]; - hasCrop = YES; - } - } - return hasCrop ? cropBoxes : nil; -} - -- (void)applyChangedCropBoxes:(NSArray *)cropBoxes inDocument:(PDFDocument *)pdfDoc { - if ([cropBoxes count] && [cropBoxes count] == [pdfDoc pageCount]) { - [cropBoxes enumerateObjectsUsingBlock:^(NSString *box, NSUInteger i, BOOL *stop){ - if ([box isEqualToString:@""] == NO) - [[pdfDoc pageAtIndex:i] setBounds:NSRectFromString(box) forBox:kPDFDisplayBoxCropBox]; - }]; - mwcFlags.hasCropped = 1; - } -} - - (void)applyLeftSideWidth:(CGFloat)leftSideWidth rightSideWidth:(CGFloat)rightSideWidth { [splitView setPosition:leftSideWidth ofDividerAtIndex:0]; [splitView setPosition:[splitView maxPossiblePositionOfDividerAtIndex:1] - [splitView dividerThickness] - rightSideWidth ofDividerAtIndex:1]; @@ -601,7 +575,11 @@ [pdfView setDisplaySettingsAndRewind:setup]; } - [self applyChangedCropBoxes:[setup objectForKey:CROPBOXES_KEY] inDocument:[self pdfDocument]]; + NSArray *cropBoxes = [setup objectForKey:CROPBOXES_KEY]; + if ([cropBoxes count] && [cropBoxes count] == [[self pdfDocument] pageCount]) { + [[self pdfDocument] setChangedCropBoxes:cropBoxes]; + mwcFlags.hasCropped = 1; + } NSArray *snapshotSetups = [setup objectForKey:SNAPSHOTS_KEY]; if ([snapshotSetups count]) @@ -617,7 +595,7 @@ - (NSDictionary *)currentSetup { NSMutableDictionary *setup = [NSMutableDictionary dictionary]; SKDestination dest = [pdfView currentDestination:YES]; - NSArray *cropBoxes = [self changedCropBoxes]; + NSArray *cropBoxes = [[self pdfDocument] changedCropBoxes]; if ([self interactionMode] == SKPresentationMode) [setup setObject:NSStringFromRect([savedNormalWindow frame]) forKey:MAINWINDOWFRAME_KEY]; @@ -1159,8 +1137,13 @@ } } - if (unlocked) - [self applyChangedCropBoxes:[savedNormalSetup objectForKey:CROPBOXES_KEY] inDocument:pdfDocument]; + if (unlocked && pageCount) { + NSArray *cropBoxes = [savedNormalSetup objectForKey:CROPBOXES_KEY]; + if ([cropBoxes count] == pageCount) { + [pdfDocument setChangedCropBoxes:cropBoxes]; + mwcFlags.hasCropped = 1; + } + } if ([noteDicts count]) { PDFDocument *pdfDoc = pdfDocument; @@ -2105,7 +2088,11 @@ settings = [savedNormalSetup objectForKey:AUTOSCALES_KEY] ? savedNormalSetup : [[NSUserDefaults standardUserDefaults] dictionaryForKey:SKDefaultPDFDisplaySettingsKey]; [pdfView setDisplaySettings:settings]; - [self applyChangedCropBoxes:[savedNormalSetup objectForKey:CROPBOXES_KEY] inDocument:[self pdfDocument]]; + NSArray *cropBoxes = [savedNormalSetup objectForKey:CROPBOXES_KEY]; + if ([cropBoxes count] && [cropBoxes count] == [[self pdfDocument] pageCount]) { + [[self pdfDocument] setChangedCropBoxes:cropBoxes]; + mwcFlags.hasCropped = 1; + } SKDestination dest = [self destinationFromSetup:savedNormalSetup]; if (dest.pageIndex != NSNotFound) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit