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

Reply via email to