Revision: 15245
          http://sourceforge.net/p/skim-app/code/15245
Author:   hofman
Date:     2025-05-21 09:10:14 +0000 (Wed, 21 May 2025)
Log Message:
-----------
Redisplay presentation when page bounds changes. Add some convenience method to 
transform points in presentation view

Modified Paths:
--------------
    trunk/SKMainWindowController.m
    trunk/SKPresentationView.h
    trunk/SKPresentationView.m

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2025-05-21 08:49:31 UTC (rev 15244)
+++ trunk/SKMainWindowController.m      2025-05-21 09:10:14 UTC (rev 15245)
@@ -2157,6 +2157,9 @@
     
     [secondaryPdfView setNeedsDisplay:YES];
     
+    if ([self interactionMode] == SKPresentationMode)
+        [presentationView setNeedsDisplayForPage:page];
+    
     if ([[NSUserDefaults standardUserDefaults] 
boolForKey:SKDisplayPageBoundsKey])
         [self updateRightStatus];
     

Modified: trunk/SKPresentationView.h
===================================================================
--- trunk/SKPresentationView.h  2025-05-21 08:49:31 UTC (rev 15244)
+++ trunk/SKPresentationView.h  2025-05-21 09:10:14 UTC (rev 15245)
@@ -117,7 +117,7 @@
 - (void)didOpen;
 - (void)willClose;
 
-- (void)setNeedsDisplayForPage:(PDFPage *)aPage;
+- (void)setNeedsDisplayForPage:(nullable PDFPage *)aPage;
 
 @end
 

Modified: trunk/SKPresentationView.m
===================================================================
--- trunk/SKPresentationView.m  2025-05-21 08:49:31 UTC (rev 15244)
+++ trunk/SKPresentationView.m  2025-05-21 09:10:14 UTC (rev 15245)
@@ -543,16 +543,66 @@
 }
 
 - (void)setNeedsDisplayForPage:(PDFPage *)aPage {
-    [self removePredrawnImageAtIndex:[aPage pageIndex]];
-    if (page == aPage) {
-        [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(displayCurrentPage:) object:nil];
-        [self performSelector:@selector(displayCurrentPage:) withObject:nil 
afterDelay:0.0];
-    } else if (page && [page pageIndex] + 1 == [aPage pageIndex]) {
-        [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(predrawNextPage) object:nil];
-        [self performSelector:@selector(predrawNextPage) withObject:nil 
afterDelay:0.0];
+    if (page) {
+        [self removePredrawnImageAtIndex:aPage ? [aPage pageIndex] : 
NSNotFound];
+        if (page == aPage || aPage == nil) {
+            [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(displayCurrentPage:) object:nil];
+            [self performSelector:@selector(displayCurrentPage:) 
withObject:nil afterDelay:0.0];
+        } else if ([page pageIndex] + 1 == [aPage pageIndex]) {
+            [[self class] cancelPreviousPerformRequestsWithTarget:self 
selector:@selector(predrawNextPage) object:nil];
+            [self performSelector:@selector(predrawNextPage) withObject:nil 
afterDelay:0.0];
+        }
     }
 }
 
+#pragma mark Transforms
+
+- (NSPoint)convertPointToPage:(NSPoint)point {
+    if (page == nil)
+        return point;
+    
+    NSRect bounds = [self bounds];
+    NSRect pageBounds = [page boundsForBox:kPDFDisplayBoxCropBox];
+    CGFloat scale;
+    if (pvFlags.autoScales == NO)
+        scale = 1.0;
+    else if (([page rotation] % 180))
+        scale = fmin(NSHeight(bounds) / NSWidth(pageBounds), NSWidth(bounds) / 
NSHeight(pageBounds));
+    else
+        scale = fmin(NSHeight(bounds) / NSHeight(pageBounds), NSWidth(bounds) 
/ NSWidth(pageBounds));
+    
+    NSAffineTransform *transform = [NSAffineTransform transform];
+    [transform translateXBy:NSMidX(pageBounds) yBy:NSMidY(pageBounds)];
+    [transform rotateByDegrees:[page rotation]];
+    [transform scaleBy:1.0 / scale];
+    [transform translateXBy:-NSMidX(bounds) yBy:-NSMidY(bounds)];
+
+    return [transform transformPoint:point];
+}
+
+- (NSPoint)convertPointFromPage:(NSPoint)point {
+    if (page == nil)
+        return point;
+    
+    NSRect bounds = [self bounds];
+    NSRect pageBounds = [page boundsForBox:kPDFDisplayBoxCropBox];
+    CGFloat scale;
+    if (pvFlags.autoScales == NO)
+        scale = 1.0;
+    else if (([page rotation] % 180))
+        scale = fmin(NSHeight(bounds) / NSWidth(pageBounds), NSWidth(bounds) / 
NSHeight(pageBounds));
+    else
+        scale = fmin(NSHeight(bounds) / NSHeight(pageBounds), NSWidth(bounds) 
/ NSWidth(pageBounds));
+    
+    NSAffineTransform *transform = [NSAffineTransform transform];
+    [transform translateXBy:NSMidX(bounds) yBy:NSMidY(bounds)];
+    [transform scaleBy:scale];
+    [transform rotateByDegrees:-[page rotation]];
+    [transform translateXBy:-NSMidX(pageBounds) yBy:-NSMidY(pageBounds)];
+    
+    return [transform transformPoint:point];
+}
+
 #pragma mark Accessors
 
 - (BOOL)canBecomeKeyView {

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