Revision: 13413
          http://sourceforge.net/p/skim-app/code/13413
Author:   hofman
Date:     2023-04-02 15:53:25 +0000 (Sun, 02 Apr 2023)
Log Message:
-----------
Use page bounds with margins for Fit, FitH, FitV, and foregroundRect for FitB, 
FitBH, FitBV. Convenience method to get bounds of page with margins.

Modified Paths:
--------------
    trunk/PDFDestination_SKExtensions.h
    trunk/PDFDestination_SKExtensions.m
    trunk/PDFView_SKExtensions.h
    trunk/PDFView_SKExtensions.m
    trunk/SKBasePDFView.m
    trunk/SKImageToolTipContext.m
    trunk/SKMainWindowController_Actions.m
    trunk/SKPDFView.m
    trunk/SKReadingBar.m

Modified: trunk/PDFDestination_SKExtensions.h
===================================================================
--- trunk/PDFDestination_SKExtensions.h 2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/PDFDestination_SKExtensions.h 2023-04-02 15:53:25 UTC (rev 13413)
@@ -41,6 +41,6 @@
 
 @interface PDFDestination (SKExtensions)
 
-- (PDFDestination *)effectiveDestinationWithTargetSize:(NSSize)rect;
+- (PDFDestination *)effectiveDestinationForView:(PDFView *)pdfView;
 
 @end

Modified: trunk/PDFDestination_SKExtensions.m
===================================================================
--- trunk/PDFDestination_SKExtensions.m 2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/PDFDestination_SKExtensions.m 2023-04-02 15:53:25 UTC (rev 13413)
@@ -38,10 +38,11 @@
 
 #import "PDFDestination_SKExtensions.h"
 #import "PDFPage_SKExtensions.h"
+#import "PDFView_SKExtensions.h"
 
 @implementation PDFDestination (SKExtensions)
 
-- (PDFDestination *)effectiveDestinationWithTargetSize:(NSSize)size {
+- (PDFDestination *)effectiveDestinationForView:(PDFView *)pdfView {
     NSPoint point = [self point];
     if (point.x >= kPDFDestinationUnspecifiedValue || point.y >= 
kPDFDestinationUnspecifiedValue) {
         PDFPage *page = [self page];
@@ -55,15 +56,15 @@
                 override = NO;
                 break;
             case 1: // Fit
-                bounds = [page foregroundRect];
+                bounds = pdfView ? [pdfView layoutBoundsForPage:page] : [page 
boundsForBox:kPDFDisplayBoxCropBox];
                 break;
             case 2: // FitH
-                bounds = [page foregroundRect];
+                bounds = pdfView ? [pdfView layoutBoundsForPage:page] : [page 
boundsForBox:kPDFDisplayBoxCropBox];
                 @try { point.y = [[self valueForKeyPath:RUNNING_BEFORE(10_12) 
? @"_pdfPriv.top" : @"_private.top"] doubleValue]; }
                 @catch (id e) { override = NO; }
                 break;
             case 3: // FitV
-                bounds = [page foregroundRect];
+                bounds = pdfView ? [pdfView layoutBoundsForPage:page] : [page 
boundsForBox:kPDFDisplayBoxCropBox];
                 @try { point.x = [[self valueForKeyPath:RUNNING_BEFORE(10_12) 
? @"_pdfPriv.left" : @"_private.left"] doubleValue]; }
                 @catch (id e) { override = NO; }
                 break;
@@ -80,15 +81,15 @@
                 break;
             }
             case 5: // FitB
-                bounds = [page boundsForBox:kPDFDisplayBoxCropBox];
+                bounds = [page foregroundRect];
                 break;
             case 6: // FitBH
-                bounds = [page boundsForBox:kPDFDisplayBoxCropBox];
+                bounds = [page foregroundRect];
                 @try { point.y = [[self valueForKeyPath:RUNNING_BEFORE(10_12) 
? @"_pdfPriv.top" : @"_private.top"] doubleValue]; }
                 @catch (id e) { override = NO; }
                 break;
             case 7: // FitBV
-                bounds = [page boundsForBox:kPDFDisplayBoxCropBox];
+                bounds = [page foregroundRect];
                 @try { point.x = [[self valueForKeyPath:RUNNING_BEFORE(10_12) 
? @"_pdfPriv.left" : @"_private.left"] doubleValue]; }
                 @catch (id e) { override = NO; }
                 break;
@@ -102,8 +103,10 @@
             if (point.y >= kPDFDestinationUnspecifiedValue)
                 point.y = NSMaxY(bounds);
             PDFDestination *destination = [[[PDFDestination alloc] 
initWithPage:page atPoint:point] autorelease];
-            if (size.width > 0.0 && size.height > 0.0 && NSWidth(bounds) > 0.0 
&& NSHeight(bounds) > 0.0)
+            if (pdfView && NSWidth(bounds) > 0.0 && NSHeight(bounds) > 0.0) {
+                NSSize size = [pdfView visibleContentRect].size;
                 [destination setZoom:fmin(size.width / NSWidth(bounds), 
size.height / NSHeight(bounds))];
+            }
             return destination;
         }
     }

Modified: trunk/PDFView_SKExtensions.h
===================================================================
--- trunk/PDFView_SKExtensions.h        2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/PDFView_SKExtensions.h        2023-04-02 15:53:25 UTC (rev 13413)
@@ -66,6 +66,8 @@
 
 - (void)goToCurrentPage:(PDFPage *)page;
 
+- (NSRect)layoutBoundsForPage:(PDFPage *)page;
+
 @property (nonatomic, readonly) BOOL drawsActiveSelections;
 
 + (NSColor *)defaultBackgroundColor;

Modified: trunk/PDFView_SKExtensions.m
===================================================================
--- trunk/PDFView_SKExtensions.m        2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/PDFView_SKExtensions.m        2023-04-02 15:53:25 UTC (rev 13413)
@@ -64,10 +64,13 @@
 - (CGFloat)minScaleFactor;
 - (CGFloat)maxScaleFactor;
 @property (nonatomic) PDFDisplayDirection displayDirection;
+@property (nonatomic) NSEdgeInsets pageBreakMargins;
 @end
 
 #endif
 
+#define PAGE_BREAK_MARGIN 4.0
+
 @implementation PDFView (SKExtensions)
 
 @dynamic physicalScaleFactor, scrollView, displayedPages, minimumScaleFactor, 
maximumScaleFactor, visibleContentRect, drawsActiveSelections;
@@ -279,6 +282,43 @@
     return rect;
 }
 
+- (NSRect)layoutBoundsForPage:(PDFPage *)page {
+    NSRect pageRect = [page boundsForBox:[self displayBox]];
+    if ([self displaysPageBreaks]) {
+        if (RUNNING_BEFORE(10_13)) {
+            pageRect = NSInsetRect(pageRect, -PAGE_BREAK_MARGIN, 
-PAGE_BREAK_MARGIN);
+        } else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpartial-availability"
+            NSEdgeInsets margins = [self pageBreakMargins];
+#pragma clang diagnostic pop
+            switch ([page rotation]) {
+                case 0:
+                    pageRect = NSInsetRect(pageRect, -margins.left, 
-margins.bottom);
+                    pageRect.size.width += margins.right - margins.left;
+                    pageRect.size.height += margins.top - margins.bottom;
+                    break;
+                case 90:
+                    pageRect = NSInsetRect(pageRect, -margins.top, 
-margins.left);
+                    pageRect.size.width += margins.bottom - margins.top;
+                    pageRect.size.height += margins.right - margins.left;
+                    break;
+                case 180:
+                    pageRect = NSInsetRect(pageRect, -margins.right, 
-margins.top);
+                    pageRect.size.width += margins.left - margins.right;
+                    pageRect.size.height += margins.bottom - margins.top;
+                    break;
+                case 270:
+                    pageRect = NSInsetRect(pageRect, -margins.bottom, 
-margins.right);
+                    pageRect.size.width += margins.top - margins.bottom;
+                    pageRect.size.height += margins.left - margins.right;
+                    break;
+            }
+        }
+    }
+    return pageRect;
+}
+
 - (CGFloat)maximumScaleFactor {
     if ([self respondsToSelector:@selector(maxScaleFactor)])
         return [self maxScaleFactor];

Modified: trunk/SKBasePDFView.m
===================================================================
--- trunk/SKBasePDFView.m       2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/SKBasePDFView.m       2023-04-02 15:53:25 UTC (rev 13413)
@@ -398,7 +398,7 @@
 }
 
 - (void)goToDestination:(PDFDestination *)destination {
-     [super goToDestination:[destination 
effectiveDestinationWithTargetSize:[self visibleContentRect].size]];
+    [super goToDestination:[destination effectiveDestinationForView:self]];
 }
 
 @end

Modified: trunk/SKImageToolTipContext.m
===================================================================
--- trunk/SKImageToolTipContext.m       2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/SKImageToolTipContext.m       2023-04-02 15:53:25 UTC (rev 13413)
@@ -107,7 +107,7 @@
     
     BOOL isScaled = fabs(scale - 1.0) > 0.01;
     PDFPage *page = [self page];
-    NSPoint point = [[self effectiveDestinationWithTargetSize:NSZeroSize] 
point];
+    NSPoint point = [[self effectiveDestinationForView:nil] point];
     NSRect bounds = [page boundsForBox:kPDFDisplayBoxCropBox];
     CGFloat size = isScaled ? ceil(scale * fmax(NSWidth(bounds), 
NSHeight(bounds))) : 0.0;
     NSImage *pageImage = [page thumbnailWithSize:size 
forBox:kPDFDisplayBoxCropBox shadowBlurRadius:0.0 highlights:selections];

Modified: trunk/SKMainWindowController_Actions.m
===================================================================
--- trunk/SKMainWindowController_Actions.m      2023-04-02 14:59:03 UTC (rev 
13412)
+++ trunk/SKMainWindowController_Actions.m      2023-04-02 15:53:25 UTC (rev 
13413)
@@ -89,12 +89,6 @@
 #define DEFAULT_SPLIT_PDF_FACTOR 0.3
 
 
-#if SDK_BEFORE(10_13)
-@interface PDFView (SKHighSierraDeclarations)
-@property (nonatomic) NSEdgeInsets pageBreakMargins;
-@end
-#endif
-
 @interface SKMainWindowController (SKPrivateUI)
 - (void)updateLineInspector;
 - (void)updateNoteFilterPredicate;
@@ -450,49 +444,12 @@
     }
 }
 
-static NSRect layoutBoundsForPage(PDFPage *page, PDFView *pdfView) {
-    NSRect pageRect = [page boundsForBox:[pdfView displayBox]];
-    if ([pdfView displaysPageBreaks]) {
-        if (RUNNING_BEFORE(10_13)) {
-            pageRect = NSInsetRect(pageRect, -PAGE_BREAK_MARGIN, 
-PAGE_BREAK_MARGIN);
-        } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wpartial-availability"
-            NSEdgeInsets margins = [pdfView pageBreakMargins];
-#pragma clang diagnostic pop
-            switch ([page rotation]) {
-                case 0:
-                    pageRect = NSInsetRect(pageRect, -margins.left, 
-margins.bottom);
-                    pageRect.size.width += margins.right - margins.left;
-                    pageRect.size.height += margins.top - margins.bottom;
-                    break;
-                case 90:
-                    pageRect = NSInsetRect(pageRect, -margins.top, 
-margins.left);
-                    pageRect.size.width += margins.bottom - margins.top;
-                    pageRect.size.height += margins.right - margins.left;
-                    break;
-                case 180:
-                    pageRect = NSInsetRect(pageRect, -margins.right, 
-margins.top);
-                    pageRect.size.width += margins.left - margins.right;
-                    pageRect.size.height += margins.bottom - margins.top;
-                    break;
-                case 270:
-                    pageRect = NSInsetRect(pageRect, -margins.bottom, 
-margins.right);
-                    pageRect.size.width += margins.top - margins.bottom;
-                    pageRect.size.height += margins.left - margins.right;
-                    break;
-            }
-        }
-    }
-    return pageRect;
-}
-
 // @@ Horizontal layout
 - (IBAction)alternateZoomToFit:(id)sender {
     PDFDisplayMode displayMode = [pdfView extendedDisplayMode];
     NSRect frame = [pdfView frame];
     PDFPage *page = [pdfView currentPage];
-    NSRect pageRect = layoutBoundsForPage(page, pdfView);
+    NSRect pageRect = [pdfView layoutBoundsForPage:page];
     CGFloat width, height;
     CGFloat scrollerWidth = 0.0;
     CGFloat scaleFactor;
@@ -928,7 +885,7 @@
     NSSize size, oldSize = [[self pdfView] frame].size;
     NSRect documentRect = [[[self pdfView] documentView] convertRect:[[[self 
pdfView] documentView] bounds] toView:nil];
     PDFPage *page = [[self pdfView] currentPage];
-    NSRect pageRect = layoutBoundsForPage(page, pdfView);
+    NSRect pageRect = [pdfView layoutBoundsForPage:page];
     
     oldSize.height -= [[[self pdfView] scrollView] contentInsets].top;
     

Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m   2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/SKPDFView.m   2023-04-02 15:53:25 UTC (rev 13413)
@@ -4970,7 +4970,7 @@
             PDFDestination *destination = [annotation linkDestination];
             if ([destination page]) {
                 page = [destination page];
-                point = [[destination 
effectiveDestinationWithTargetSize:NSZeroSize] point];
+                point = [[destination effectiveDestinationForView:nil] point];
                 point = [self convertPoint:point fromPage:page];
                 point.y -= 0.5 * DEFAULT_SNAPSHOT_HEIGHT;
             }

Modified: trunk/SKReadingBar.m
===================================================================
--- trunk/SKReadingBar.m        2023-04-02 14:59:03 UTC (rev 13412)
+++ trunk/SKReadingBar.m        2023-04-02 15:53:25 UTC (rev 13413)
@@ -312,7 +312,7 @@
         }
         if (dest) {
             aPage = [dest page];
-            point = [[dest effectiveDestinationWithTargetSize:NSZeroSize] 
point];
+            point = [[dest effectiveDestinationForView:nil] point];
         }
     } else if ([location isKindOfClass:[SKLine class]]) {
         aPage = [(SKLine *)location page];

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