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
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit