Revision: 14512
          http://sourceforge.net/p/skim-app/code/14512
Author:   hofman
Date:     2024-10-03 14:35:07 +0000 (Thu, 03 Oct 2024)
Log Message:
-----------
Set up transition view directly in method

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

Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m      2024-10-03 08:57:59 UTC (rev 14511)
+++ trunk/SKTransitionController.m      2024-10-03 14:35:07 UTC (rev 14512)
@@ -43,9 +43,7 @@
 
 #import "SKTransitionController.h"
 #import "SKTransitionInfo.h"
-#import "NSBitmapImageRep_SKExtensions.h"
 #import "NSView_SKExtensions.h"
-#import "SKStringConstants.h"
 #import "NSGraphics_SKExtensions.h"
 #import <Quartz/Quartz.h>
 #import <Metal/Metal.h>
@@ -63,7 +61,6 @@
     id<MTLCommandQueue> commandQueue;
     CIContext *context;
 }
-@property (nonatomic, strong) CIImage *image;
 @property (nonatomic) CGRect extent;
 @property (nonatomic, strong) CIFilter *filter;
 @property (nonatomic) CGFloat progress;
@@ -79,7 +76,7 @@
     return CGRectMake(scale * NSMinX(rect), scale * NSMinY(rect), scale * 
NSWidth(rect), scale * NSHeight(rect));
 }
 
-// rect and bounds are in pixels
+// rect and extent are in pixels
 - (CIFilter *)transitionFilterWithName:(NSString *)name rect:(CGRect)rect 
extent:(CGRect)extent scale:(CGFloat)scale forward:(BOOL)forward 
initialImage:(CIImage *)initialImage finalImage:(CIImage *)finalImage {
     CIFilter *transitionFilter = [CIFilter filterWithName:name];
     BOOL scaled = fabs(scale - 1.0) > 0.0;
@@ -174,29 +171,6 @@
     return image;
 }
 
-- (void)showTransitionViewForRect:(NSRect)rect image:(CIImage *)image 
extent:(CGRect)extent {
-    if (transitionView == nil) {
-        transitionView = [[SKTransitionView alloc] init];
-        [transitionView setAutoresizingMask:NSViewWidthSizable | 
NSViewHeightSizable];
-        CAAnimation *animation = [CABasicAnimation animation];
-        [animation setTimingFunction:[CAMediaTimingFunction 
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
-        [transitionView setAnimations:@{@"progress":animation}];
-    }
-    
-    [transitionView setImage:image];
-    [transitionView setExtent:extent];
-    [transitionView setNeedsDisplay:YES];
-    
-    [transitionView setFrame:rect];
-    [view addSubview:transitionView positioned:NSWindowAbove relativeTo:nil];
-}
-
-- (void)removeTransitionView {
-    [transitionView removeFromSuperview];
-    [transitionView setFilter:nil];
-    [transitionView setImage:nil];
-}
-
 - (void)animateForRect:(NSRect)rect from:(NSUInteger)fromIndex 
to:(NSUInteger)toIndex change:(NSRect (^)(void))change {
     if (animating) {
         change();
@@ -235,17 +209,24 @@
                                                             forward:toIndex >= 
fromIndex
                                                        
initialImage:initialImage
                                                          
finalImage:finalImage];
-        [self showTransitionViewForRect:bounds image:initialImage 
extent:cgBounds];
         
+        if (transitionView == nil)
+            transitionView = [[SKTransitionView alloc] initWithFrame:bounds];
+        else
+            [transitionView setFrame:bounds];
+        [transitionView setExtent:cgBounds];
+        [transitionView setFilter:transitionFilter];
+        [view addSubview:transitionView positioned:NSWindowAbove 
relativeTo:nil];
+
         // Update the view and its window, so it shows the correct state when 
it is shown.
         [view display];
         
-        [transitionView setFilter:transitionFilter];
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
                 [context setDuration:[currentTransition duration]];
                 [[transitionView animator] setProgress:1.0];
             } completionHandler:^{
-                [self removeTransitionView];
+                [transitionView removeFromSuperview];
+                [transitionView setFilter:nil];
                 animating = NO;
             }];
         
@@ -258,7 +239,7 @@
 
 @implementation SKTransitionView
 
-@synthesize image, extent, filter;
+@synthesize extent, filter;
 @dynamic progress;
 
 - (instancetype)initWithFrame:(NSRect)frameRect {
@@ -275,6 +256,10 @@
         [self addSubview:metalView];
         commandQueue = [device newCommandQueue];
         context = [CIContext contextWithMTLDevice:device];
+        [self setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+        CAAnimation *animation = [CABasicAnimation animation];
+        [animation setTimingFunction:[CAMediaTimingFunction 
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
+        [self setAnimations:@{@"progress":animation}];
     }
     return self;
 }
@@ -296,11 +281,13 @@
     }
 }
 
-- (void)setImage:(CIImage *)newImage {
-    if (newImage != image) {
-        image = newImage;
+- (void)setFilter:(CIFilter *)newFilter {
+    if (newFilter != filter) {
+        filter = newFilter;
+        image = [filter valueForKey:kCIInputImageKey];
         [metalView setAlphaValue:0.0];
         [metalView setNeedsDisplay:YES];
+        [self setNeedsDisplay:YES];
     }
 }
 

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

Reply via email to