Revision: 15184
          http://sourceforge.net/p/skim-app/code/15184
Author:   hofman
Date:     2025-05-11 14:14:19 +0000 (Sun, 11 May 2025)
Log Message:
-----------
Expose transition animation as block and let the caller execute the block. 
Fully initialize rather than passing arguments.

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

Modified: trunk/SKPresentationView.m
===================================================================
--- trunk/SKPresentationView.m  2025-05-10 22:13:11 UTC (rev 15183)
+++ trunk/SKPresentationView.m  2025-05-11 14:14:19 UTC (rev 15184)
@@ -143,12 +143,15 @@
 
 #pragma mark Accessors
 
+- (void)setPage:(PDFPage *)newPage completionHandler:(void 
(^)(void))completionHandler {
+    page = newPage;
+    [self displayPage:completionHandler];
+    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKPresentationViewPageChangedNotification object:self];
+}
+
 - (void)setPage:(PDFPage *)newPage {
-    if (newPage != page) {
-        page = newPage;
-        [self displayPage:nil];
-        [[NSNotificationCenter defaultCenter] 
postNotificationName:SKPresentationViewPageChangedNotification object:self];
-    }
+    if (newPage != page)
+        [self setPage:newPage completionHandler:nil];
 }
 
 - (BOOL)autoScales { return YES; }
@@ -155,10 +158,10 @@
 
 #pragma mark Action
 
-- (NSRect)pageRect {
+- (NSRect)pageRect:(PDFPage *)aPage {
     NSRect bounds = [self bounds];
-    NSRect pageRect = [page boundsForBox:kPDFDisplayBoxCropBox];
-    if (([page rotation] % 180) != 0)
+    NSRect pageRect = [aPage boundsForBox:kPDFDisplayBoxCropBox];
+    if (([aPage rotation] % 180) != 0)
         pageRect = NSMakeRect(0.0, 0.0, NSHeight(pageRect), NSWidth(pageRect));
     CGFloat scale = [self autoScales] ? fmin(NSHeight(bounds) / 
NSHeight(pageRect), NSWidth(bounds) / NSWidth(pageRect)) : 1.0;
     return NSInsetRect(bounds, 0.5 * (NSWidth(bounds) - scale * 
NSWidth(pageRect)), 0.5 * (NSHeight(bounds) - scale * NSHeight(pageRect)));
@@ -169,18 +172,15 @@
 }
 
 - (BOOL)animateTransitionAtIndex:(NSUInteger)idx forward:(BOOL)forward 
toPage:(PDFPage *)toPage {
-    if ([transitionController pageTransitions] == nil &&
-        ([[transitionController transition] style] == SKNoTransition || 
equalStrings([page label], [toPage label])))
-        return NO;
-    id animation = [transitionController animationAtIndex:idx forRect:[self 
pageRect] inView:self];
-    if (animation == nil)
-        return NO;
-    page = toPage;
-    [[NSNotificationCenter defaultCenter] 
postNotificationName:SKPresentationViewPageChangedNotification object:self];
-    [self displayPage:^{
-        [transitionController performAnimation:animation toRect:[self 
pageRect] forward:forward completionHandler:nil];
-    }];
-    return YES;
+    if ([transitionController pageTransitions] ||
+        ([[transitionController transition] style] != SKNoTransition && 
equalStrings([page label], [toPage label]) == NO)) {
+        SKTransitionAnimation animation = [transitionController 
animationAtIndex:idx forView:self fromRect:[self pageRect:page] toRect:[self 
pageRect:toPage] forward:forward];
+        if (animation) {
+            [self setPage:toPage completionHandler:^{ animation(nil); }];
+            return YES;
+        }
+    }
+    return NO;
 }
 
 - (void)animateToNextPage:(void (^)(void))completionHandler {
@@ -188,12 +188,8 @@
     NSUInteger idx = [page pageIndex];
     if (idx + 1 < [pdfDoc pageCount]) {
         PDFPage *toPage = [pdfDoc pageAtIndex:idx + 1];
-        id animation = [transitionController animationAtIndex:idx 
forRect:[self pageRect] inView:self];
-        page = toPage;
-        [[NSNotificationCenter defaultCenter] 
postNotificationName:SKPresentationViewPageChangedNotification object:self];
-        [self displayPage:^{
-            [transitionController performAnimation:animation toRect:[self 
pageRect] forward:YES completionHandler:completionHandler];
-        }];
+        SKTransitionAnimation animation = [transitionController 
animationAtIndex:idx forView:self fromRect:[self pageRect:page] toRect:[self 
pageRect:toPage] forward:YES];
+        [self setPage:toPage completionHandler:animation ? ^{ 
animation(completionHandler); } : completionHandler];
     } else {
         completionHandler();
     }

Modified: trunk/SKTransitionController.h
===================================================================
--- trunk/SKTransitionController.h      2025-05-10 22:13:11 UTC (rev 15183)
+++ trunk/SKTransitionController.h      2025-05-11 14:14:19 UTC (rev 15184)
@@ -40,6 +40,8 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+typedef void (^SKTransitionAnimation)(void (^ _Nullable 
completionHandler)(void));
+
 @class SKTransitionView, SKTransitionInfo;
 
 @interface SKTransitionController : NSObject {
@@ -56,8 +58,7 @@
 
 @property (nonatomic) BOOL shouldScale;
 
-- (id)animationAtIndex:(NSUInteger)anIndex forRect:(NSRect)rect inView:(NSView 
*)view;
-- (void)performAnimation:(nullable id)animation toRect:(NSRect)toRect 
forward:(BOOL)forward completionHandler:(void (^ 
_Nullable)(void))completionHandler;
+- (nullable SKTransitionAnimation)animationAtIndex:(NSUInteger)anIndex 
forView:(NSView *)view fromRect:(NSRect)rect toRect:(NSRect)toRect 
forward:(BOOL)forward;
 
 @end
 

Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m      2025-05-10 22:13:11 UTC (rev 15183)
+++ trunk/SKTransitionController.m      2025-05-11 14:14:19 UTC (rev 15184)
@@ -171,7 +171,7 @@
     return image;
 }
 
-- (id)animationAtIndex:(NSUInteger)idx forRect:(NSRect)rect inView:(NSView 
*)view {
+- (SKTransitionAnimation)animationAtIndex:(NSUInteger)idx forView:(NSView 
*)view fromRect:(NSRect)rect toRect:(NSRect)toRect forward:(BOOL)forward {
     if (animating)
         return nil;
     
@@ -186,7 +186,7 @@
     
     CIImage *initialImage = [self currentImageForRect:rect inView:view 
scale:NULL];
     
-    return [^(NSRect toRect, BOOL forward, void (^completionHandler)(void)){
+    return ^(void (^completionHandler)(void)){
         
         NSRect bounds = [view bounds];
         CGFloat imageScale = 1.0;
@@ -223,16 +223,9 @@
                     completionHandler();
             }];
         
-    } copy];
+    };
 }
 
-- (void)performAnimation:(id)animation toRect:(NSRect)toRect 
forward:(BOOL)forward completionHandler:(void (^)(void))completionHandler {
-    if (animation)
-        ((void (^)(NSRect, BOOL, void(^)(void)))animation)(toRect, forward, 
completionHandler);
-    else if (completionHandler)
-        completionHandler();
-}
-
 @end
 
 #pragma mark -

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