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