Revision: 15198
http://sourceforge.net/p/skim-app/code/15198
Author: hofman
Date: 2025-05-12 15:52:49 +0000 (Mon, 12 May 2025)
Log Message:
-----------
Move some methods to functions. Calculate some variables outside block, and
avoid strongly referencing self from block.
Modified Paths:
--------------
trunk/SKTransitionController.m
Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m 2025-05-12 15:22:49 UTC (rev 15197)
+++ trunk/SKTransitionController.m 2025-05-12 15:52:49 UTC (rev 15198)
@@ -68,9 +68,13 @@
#pragma mark -
+@interface SKTransitionController ()
+@property (nonatomic) BOOL animating;
+@end
+
@implementation SKTransitionController
-@synthesize transition, pageTransitions, shouldScale;
+@synthesize transition, pageTransitions, shouldScale, animating;
static inline CGRect scaleRect(NSRect rect, CGFloat scale) {
return CGRectMake(scale * NSMinX(rect), scale * NSMinY(rect), scale *
NSWidth(rect), scale * NSHeight(rect));
@@ -77,7 +81,7 @@
}
// 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 {
+static CIFilter *makeTransitionFilter(NSString *name, CGRect rect, CGRect
extent, CGFloat scale, BOOL forward, CIImage *initialImage, CIImage
*finalImage) {
CIFilter *transitionFilter = [CIFilter filterWithName:name];
BOOL scaled = fabs(scale - 1.0) > 0.0;
@@ -154,7 +158,7 @@
return transitionFilter;
}
-- (CIImage *)currentImageForView:(NSView *)view {
+static CIImage *currentImageForView(NSView *view) {
NSBitmapImageRep *contentBitmap = [view bitmapImageRepCachingDisplay];
CIImage *image = [[CIImage alloc] initWithBitmapImageRep:contentBitmap];
NSArray *colorFilters = SKColorEffectFilters();
@@ -180,41 +184,40 @@
animating = YES;
- CIImage *initialImage = [self currentImageForView:view];
+ CIImage *initialImage = currentImageForView(view);
+ NSRect bounds = [view bounds];
+ CGFloat imageScale = CGRectGetWidth([initialImage extent]) /
NSWidth(bounds);
+ CGFloat scale = shouldScale ? imageScale * NSHeight(bounds) /
NSHeight([[[view window] screen] frame]) : imageScale;
+
+ if (transitionView == nil)
+ transitionView = [[SKTransitionView alloc] initWithFrame:bounds];
+ else
+ [transitionView setFrame:bounds];
+ SKTransitionView *transView = transitionView;
+
+ __weak SKTransitionController *weakSelf = self;
+
return ^(NSRect rect, BOOL forward, void (^completionHandler)(void)){
- NSRect bounds = [view bounds];
- CIImage *finalImage = [self currentImageForView:view];
- CGFloat imageScale = CGRectGetWidth([initialImage extent]) /
NSWidth(bounds);
+ CIImage *finalImage = currentImageForView(view);
CGRect cgRect = CGRectIntegral(scaleRect(rect, imageScale));
CGRect cgBounds = scaleRect(bounds, imageScale);
CGRect extent = [currentTransition shouldRestrict] ? cgRect : cgBounds;
NSString *filterName = [currentTransition styleName];
- CGFloat scale = shouldScale ? imageScale * NSHeight(bounds) /
NSHeight([[[view window] screen] frame]) : imageScale;
- CIFilter *transitionFilter = [self transitionFilterWithName:filterName
- rect:cgRect
- extent:extent
- scale:scale
- forward:forward
-
initialImage:initialImage
-
finalImage:finalImage];
+ CIFilter *transitionFilter = makeTransitionFilter(filterName, cgRect,
extent, scale, forward, initialImage, finalImage);
- 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];
+ [transView setExtent:cgBounds];
+ [transView setFilter:transitionFilter];
+ [view addSubview:transView positioned:NSWindowAbove relativeTo:nil];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
[context setDuration:[currentTransition duration]];
- [[transitionView animator] setProgress:1.0];
+ [[transView animator] setProgress:1.0];
} completionHandler:^{
- [transitionView removeFromSuperview];
- [transitionView setFilter:nil];
- animating = NO;
+ [transView removeFromSuperview];
+ [transView setFilter:nil];
+ [weakSelf setAnimating:NO];
if (completionHandler)
completionHandler();
}];
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