Revision: 12702
          http://sourceforge.net/p/skim-app/code/12702
Author:   hofman
Date:     2022-01-11 17:17:12 +0000 (Tue, 11 Jan 2022)
Log Message:
-----------
combine transition parameters into simple transition info object and make the 
info with thumbnails into a subclass

Modified Paths:
--------------
    trunk/SKMainWindowController.m
    trunk/SKPresentationOptionsSheetController.m
    trunk/SKTransitionController.h
    trunk/SKTransitionController.m
    trunk/SKTransitionInfo.h
    trunk/SKTransitionInfo.m

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2022-01-09 22:22:03 UTC (rev 12701)
+++ trunk/SKMainWindowController.m      2022-01-11 17:17:12 UTC (rev 12702)
@@ -75,6 +75,7 @@
 #import "SKLineInspector.h"
 #import "SKStatusBar.h"
 #import "SKTransitionController.h"
+#import "SKTransitionInfo.h"
 #import "SKPresentationOptionsSheetController.h"
 #import "SKTypeSelectHelper.h"
 #import "NSGeometry_SKExtensions.h"
@@ -1504,15 +1505,11 @@
 
 - (NSDictionary *)presentationOptions {
     SKTransitionController *transitions = [pdfView transitionController];
-    SKTransitionStyle style = [transitions transitionStyle];
-    NSString *styleName = [SKTransitionController nameForStyle:style];
+    SKTransitionInfo *transition = [transitions transition];
     NSArray *pageTransitions = [transitions pageTransitions];
     NSMutableDictionary *options = nil;
-    if ([styleName length] || [pageTransitions count]) {
-        options = [NSMutableDictionary dictionary];
-        [options setValue:(styleName ?: @"") forKey:SKStyleNameKey];
-        [options setValue:[NSNumber numberWithDouble:[transitions duration]] 
forKey:SKDurationKey];
-        [options setValue:[NSNumber numberWithBool:[transitions 
shouldRestrict]] forKey:SKShouldRestrictKey];
+    if ([transition transitionStyle] != SKNoTransition || [pageTransitions 
count]) {
+        options = [NSMutableDictionary dictionaryWithDictionary:[transition 
properties]];
         [options setValue:pageTransitions forKey:PAGETRANSITIONS_KEY];
     }
     return options;
@@ -1520,17 +1517,8 @@
 
 - (void)setPresentationOptions:(NSDictionary *)dictionary {
     SKTransitionController *transitions = [pdfView transitionController];
-    NSString *styleName = [dictionary objectForKey:SKStyleNameKey];
-    NSNumber *duration = [dictionary objectForKey:SKDurationKey];
-    NSNumber *shouldRestrict = [dictionary objectForKey:SKShouldRestrictKey];
-    NSArray *pageTransitions = [dictionary objectForKey:PAGETRANSITIONS_KEY];
-    if (styleName)
-        [transitions setTransitionStyle:[SKTransitionController 
styleForName:styleName]];
-    if (duration)
-        [transitions setDuration:[duration doubleValue]];
-    if (shouldRestrict)
-        [transitions setShouldRestrict:[shouldRestrict boolValue]];
-    [transitions setPageTransitions:pageTransitions];
+    [transitions setTransition:[[[SKTransitionInfo alloc] 
initWithProperties:dictionary] autorelease]];
+    [transitions setPageTransitions:[dictionary 
objectForKey:PAGETRANSITIONS_KEY]];
 }
 
 - (void)setPresentationNotesDocument:(NSDocument *)newDocument {

Modified: trunk/SKPresentationOptionsSheetController.m
===================================================================
--- trunk/SKPresentationOptionsSheetController.m        2022-01-09 22:22:03 UTC 
(rev 12701)
+++ trunk/SKPresentationOptionsSheetController.m        2022-01-11 17:17:12 UTC 
(rev 12702)
@@ -172,9 +172,10 @@
     [[notesDocumentPopUpButton itemAtIndex:2] setRepresentedObject:[controller 
document]];
 
     SKTransitionController *transitionController = [[controller pdfView] 
transitionController];
-    [transition setTransitionStyle:[transitionController transitionStyle]];
-    [transition setDuration:[transitionController duration]];
-    [transition setShouldRestrict:[transitionController shouldRestrict]];
+    SKTransitionInfo *info = [transitionController transition];
+    [transition setTransitionStyle:[info transitionStyle]];
+    [transition setDuration:[info duration]];
+    [transition setShouldRestrict:[info shouldRestrict]];
     [self startObservingTransitions:[NSArray arrayWithObject:transition]];
     
     // collapse the table, it is already hidden
@@ -222,12 +223,11 @@
     
     for (SKThumbnail *next in [controller thumbnails]) {
         if (tn) {
-            SKTransitionInfo *info = [[SKTransitionInfo alloc] init];
+            SKLabeledTransitionInfo *info = [[SKLabeledTransitionInfo alloc] 
initWithProperties:([ptEnum nextObject] ?: dictionary)];
             [info setThumbnail:tn];
             [info setToThumbnail:next];
-            [info setProperties:([ptEnum nextObject] ?: dictionary)];
             [array addObject:info];
-            [cell setStringValue:[info label]];
+            [cell setStringValue:[info label] ?: @""];
             labelWidth = fmax(labelWidth, [cell cellSize].width);
             [info release];
         }
@@ -266,10 +266,7 @@
         // don't make changes when nothing was changed
         if ([undoManager canUndo]) {
             SKTransitionController *transitionController = [[controller 
pdfView] transitionController];
-            [transitionController setTransitionStyle:[transition 
transitionStyle]];
-            [transitionController setDuration:[transition duration]];
-            [transitionController setShouldRestrict:[transition 
shouldRestrict]];
-            [transitionController setPageTransitions:[self pageTransitions]];
+            [transitionController setTransition:transition];
             [[controller undoManager] setActionName:NSLocalizedString(@"Change 
Transitions", @"Undo action name")];
         }
         [controller setPresentationNotesDocument:[self notesDocument]];

Modified: trunk/SKTransitionController.h
===================================================================
--- trunk/SKTransitionController.h      2022-01-09 22:22:03 UTC (rev 12701)
+++ trunk/SKTransitionController.h      2022-01-11 17:17:12 UTC (rev 12702)
@@ -47,7 +47,7 @@
        SKNoTransition
 };
 
-@class CIImage;
+@class CIImage, SKTransitionInfo;
 @protocol SKTransitionView;
 
 @interface SKTransitionController : NSObject {
@@ -56,17 +56,12 @@
     NSView *view;
     BOOL animating;
     
-    SKTransitionStyle transitionStyle;
-    CGFloat duration;
-    BOOL shouldRestrict;
-    
+    SKTransitionInfo *transition;
     NSArray *pageTransitions;
 }
 
 @property (nonatomic, assign) NSView *view;
-@property (nonatomic) SKTransitionStyle transitionStyle;
-@property (nonatomic) CGFloat duration;
-@property (nonatomic) BOOL shouldRestrict;
+@property (nonatomic, retain) SKTransitionInfo *transition;
 @property (nonatomic, copy) NSArray *pageTransitions;
 @property (nonatomic) BOOL hasTransition;
 

Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m      2022-01-09 22:22:03 UTC (rev 12701)
+++ trunk/SKTransitionController.m      2022-01-11 17:17:12 UTC (rev 12702)
@@ -42,6 +42,7 @@
 */
 
 #import "SKTransitionController.h"
+#import "SKTransitionInfo.h"
 #import "NSBitmapImageRep_SKExtensions.h"
 #import "NSView_SKExtensions.h"
 #import "SKStringConstants.h"
@@ -174,7 +175,7 @@
 
 @implementation SKTransitionController
 
-@synthesize view, transitionStyle, duration, shouldRestrict, pageTransitions;
+@synthesize view, transition, pageTransitions;
 @dynamic hasTransition;
 
 static NSDictionary *oldStyleNames = nil;
@@ -306,9 +307,7 @@
     if (self) {
         view = aView; // don't retain as it may retain us
         
-        transitionStyle = SKNoTransition;
-        duration = 1.0;
-        shouldRestrict = YES;
+        transition = [[SKTransitionInfo alloc] init];
     }
     return self;
 }
@@ -317,35 +316,22 @@
     view = nil;
     SKDESTROY(transitionView);
     SKDESTROY(window);
+    SKDESTROY(transition);
     SKDESTROY(pageTransitions);
     [super dealloc];
 }
 
 - (BOOL)hasTransition {
-    return transitionStyle != SKNoTransition || pageTransitions != nil;
+    return [transition transitionStyle] != SKNoTransition || pageTransitions 
!= nil;
 }
 
-- (void)setTransitionStyle:(SKTransitionStyle)newTransitionStyle {
-    if (transitionStyle != newTransitionStyle) {
-        [[[view undoManager] prepareWithInvocationTarget:self] 
setTransitionStyle:transitionStyle];
-        transitionStyle = newTransitionStyle;
+- (void)setTransition:(SKTransitionInfo *)newTransition {
+    if (transition != newTransition) {
+        [[[view undoManager] prepareWithInvocationTarget:self] 
setTransition:transition];
+        transition = [newTransition retain];
     }
 }
 
-- (void)setDuration:(CGFloat)newDuration {
-    if (fabs(duration - newDuration) > 0.0) {
-        [[[view undoManager] prepareWithInvocationTarget:self] 
setDuration:duration];
-        duration = newDuration;
-    }
-}
-
-- (void)setShouldRestrict:(BOOL)newShouldRestrict {
-    if (shouldRestrict != newShouldRestrict) {
-        [[[view undoManager] prepareWithInvocationTarget:self] 
setShouldRestrict:shouldRestrict];
-        shouldRestrict = newShouldRestrict;
-    }
-}
-
 - (void)setPageTransitions:(NSArray *)newPageTransitions {
     if (newPageTransitions != pageTransitions) {
         [[[view undoManager] prepareWithInvocationTarget:self] 
setPageTransitions:pageTransitions];
@@ -359,8 +345,8 @@
 }
 
 // rect and bounds are in pixels
-- (CIFilter *)transitionFilterForStyle:(SKTransitionStyle)style 
rect:(CGRect)rect bounds:(CGRect)bounds restricted:(BOOL)restricted 
forward:(BOOL)forward initialImage:(CIImage *)initialImage finalImage:(CIImage 
*)finalImage {
-    NSString *filterName = [[self class] nameForStyle:style];
+- (CIFilter *)transitionFilterForTransition:(SKTransitionInfo *)info 
rect:(CGRect)rect bounds:(CGRect)bounds forward:(BOOL)forward 
initialImage:(CIImage *)initialImage finalImage:(CIImage *)finalImage {
+    NSString *filterName = [[self class] nameForStyle:[info transitionStyle]];
     CIFilter *transitionFilter = [CIFilter filterWithName:filterName];
     
     [transitionFilter setDefaults];
@@ -368,7 +354,7 @@
     for (NSString *key in [transitionFilter inputKeys]) {
         id value = nil;
         if ([key isEqualToString:kCIInputExtentKey]) {
-            CGRect extent = restricted ? rect : bounds;
+            CGRect extent = [info shouldRestrict] ? rect : bounds;
             value = [CIVector vectorWithX:CGRectGetMinX(extent) 
Y:CGRectGetMinY(extent) Z:CGRectGetWidth(extent) W:CGRectGetHeight(extent)];
         } else if ([key isEqualToString:kCIInputAngleKey]) {
             CGFloat angle = forward ? 0.0 : M_PI;
@@ -494,24 +480,15 @@
         return;
     }
     
-    SKTransitionStyle currentTransitionStyle = transitionStyle;
-    CGFloat currentDuration = duration;
-    BOOL currentShouldRestrict = shouldRestrict;
+    SKTransitionInfo *currentTransition = transition;
     BOOL currentForward = (toIndex >= fromIndex);
     
     NSUInteger idx = MIN(fromIndex, toIndex);
     if (fromIndex != NSNotFound && toIndex != NSNotFound && idx < 
[pageTransitions count]) {
-        NSDictionary *info = [pageTransitions objectAtIndex:idx];
-        id value;
-        if ((value = [info objectForKey:SKStyleNameKey]))
-            currentTransitionStyle = [[self class] styleForName:value];
-        if ((value = [info objectForKey:SKDurationKey]) && [value 
respondsToSelector:@selector(doubleValue)])
-            currentDuration = [value doubleValue];
-        if ((value = [info objectForKey:SKShouldRestrictKey]) && [value 
respondsToSelector:@selector(boolValue)])
-            currentShouldRestrict = [value boolValue];
+        currentTransition = [[[SKTransitionInfo alloc] 
initWithProperties:[pageTransitions objectAtIndex:idx]] autorelease];
     }
     
-    if ([SKTransitionController isCoreImageTransition:currentTransitionStyle]) 
{
+    if ([SKTransitionController isCoreImageTransition:[currentTransition 
transitionStyle]]) {
         
         animating = YES;
         
@@ -528,13 +505,12 @@
         CIImage *finalImage = [self currentImageForRect:toRect 
scale:&imageScale];
         CGRect cgRect = 
CGRectIntegral(scaleRect(NSIntersectionRect(NSUnionRect(rect, toRect), bounds), 
imageScale));
         CGRect cgBounds = scaleRect(bounds, imageScale);
-        CIFilter *transitionFilter = [self 
transitionFilterForStyle:currentTransitionStyle
-                                                               rect:cgRect
-                                                             bounds:cgBounds
-                                                         
restricted:currentShouldRestrict
-                                                            
forward:currentForward
-                                                       
initialImage:initialImage
-                                                         
finalImage:finalImage];
+        CIFilter *transitionFilter = [self 
transitionFilterForTransition:currentTransition
+                                                                    rect:cgRect
+                                                                  
bounds:cgBounds
+                                                                 
forward:currentForward
+                                                            
initialImage:initialImage
+                                                              
finalImage:finalImage];
         [self showTransitionViewForRect:bounds image:initialImage 
extent:cgBounds];
         
         // Update the view and its window, so it shows the correct state when 
it is shown.
@@ -545,7 +521,7 @@
         
         [transitionView setFilter:transitionFilter];
         [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
-                [context setDuration:currentDuration];
+                [context setDuration:[currentTransition duration]];
                 [[transitionView animator] setProgress:1.0];
             } completionHandler:^{
                 [self removeTransitionView];
@@ -552,13 +528,13 @@
                 animating = NO;
             }];
         
-    } else if ([SKTransitionController 
isCoreGraphicsTransition:currentTransitionStyle]) {
+    } else if ([SKTransitionController 
isCoreGraphicsTransition:[currentTransition transitionStyle]]) {
         
         animating = YES;
         
         NSWindow *viewWindow = [view window];
         CIImage *initialImage = nil;
-        if (currentShouldRestrict)
+        if ([currentTransition shouldRestrict])
             initialImage = [self currentImageForRect:rect scale:NULL];
         
         // We don't want the window to draw the next state before the 
animation is run
@@ -568,7 +544,7 @@
         
         CIImage *finalImage = nil;
         
-        if (currentShouldRestrict) {
+        if ([currentTransition shouldRestrict]) {
             CGFloat imageScale = 1.0;
             
             finalImage = [self currentImageForRect:toRect scale:&imageScale];
@@ -583,10 +559,10 @@
         CGSTransitionSpec spec;
         // specify our specifications
         spec.unknown1 = 0;
-        spec.type =  currentTransitionStyle;
+        spec.type =  [currentTransition transitionStyle];
         spec.option = currentForward ? CGSLeft : CGSRight;
         spec.backColour = NULL;
-        spec.wid = [(currentShouldRestrict ? window : viewWindow) 
windowNumber];
+        spec.wid = [([currentTransition shouldRestrict] ? window : viewWindow) 
windowNumber];
         
         // Let's get a connection
         CGSConnection cgs = _CGSDefaultConnection_func();
@@ -594,7 +570,7 @@
         // Create a transition
         CGSNewTransition_func(cgs, &spec, &handle);
         
-        if (currentShouldRestrict) {
+        if ([currentTransition shouldRestrict]) {
             [(SKTransitionView *)[window contentView] setImage:finalImage];
             [[window contentView] display];
         }
@@ -605,12 +581,12 @@
         [viewWindow enableFlushWindow];
         [viewWindow flushWindow];
         
-        CGSInvokeTransition_func(cgs, handle, currentDuration);
+        CGSInvokeTransition_func(cgs, handle, [currentTransition duration]);
         
-        DISPATCH_MAIN_AFTER_SEC(currentDuration, ^{
+        DISPATCH_MAIN_AFTER_SEC([currentTransition duration], ^{
             CGSReleaseTransition_func(cgs, handle);
             
-            if (currentShouldRestrict)
+            if ([currentTransition shouldRestrict])
                 [self removeTransitionWindow];
             
             animating = NO;

Modified: trunk/SKTransitionInfo.h
===================================================================
--- trunk/SKTransitionInfo.h    2022-01-09 22:22:03 UTC (rev 12701)
+++ trunk/SKTransitionInfo.h    2022-01-11 17:17:12 UTC (rev 12702)
@@ -41,16 +41,14 @@
 
 extern NSString *SKPasteboardTypeTransition;
 
-@class SKThumbnail;
-
 @interface SKTransitionInfo : NSObject <NSPasteboardReading, 
NSPasteboardWriting> {
     SKTransitionStyle transitionStyle;
     CGFloat duration;
     BOOL shouldRestrict;
-    SKThumbnail *thumbnail;
-    SKThumbnail *toThumbnail;
 }
 
+- (id)initWithProperties:(NSDictionary *)properies;
+
 @property (nonatomic, copy) NSDictionary *properties;
 
 @property (nonatomic) SKTransitionStyle transitionStyle;
@@ -57,10 +55,22 @@
 @property (nonatomic) CGFloat duration;
 @property (nonatomic) BOOL shouldRestrict;
 
+@property (nonatomic, readonly) NSString *label;
+@property (nonatomic, readonly) NSString *title;
+
+@end
+
+#pragma mark -
+
+@class SKThumbnail;
+
+@interface SKLabeledTransitionInfo : SKTransitionInfo <NSPasteboardReading, 
NSPasteboardWriting> {
+    SKThumbnail *thumbnail;
+    SKThumbnail *toThumbnail;
+}
+
 @property (nonatomic, retain) SKThumbnail *thumbnail, *toThumbnail;
 
-@property (nonatomic, readonly) NSString *label;
-@property (nonatomic, readonly) NSString *title;
 @property (nonatomic, readonly) NSString *transitionName;
 
 @end

Modified: trunk/SKTransitionInfo.m
===================================================================
--- trunk/SKTransitionInfo.m    2022-01-09 22:22:03 UTC (rev 12701)
+++ trunk/SKTransitionInfo.m    2022-01-11 17:17:12 UTC (rev 12702)
@@ -43,16 +43,9 @@
 
 @implementation SKTransitionInfo
 
-@synthesize transitionStyle, duration, shouldRestrict, thumbnail, toThumbnail;
-@dynamic properties, label, title, transitionName;
+@synthesize transitionStyle, duration, shouldRestrict;
+@dynamic properties, label, title;
 
-+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
-    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
-    if ([key isEqualToString:@"transitionName"])
-        keyPaths = [keyPaths setByAddingObjectsFromSet:[NSSet 
setWithObjects:@"transitionStyle", nil]];
-    return keyPaths;
-}
-
 - (id)init {
     self = [super init];
     if (self) {
@@ -59,16 +52,14 @@
         transitionStyle = SKNoTransition;
         duration = 1.0;
         shouldRestrict = YES;
-        thumbnail = nil;
-        toThumbnail = nil;
     }
     return self;
 }
 
-- (void)dealloc {
-    SKDESTROY(thumbnail);
-    SKDESTROY(toThumbnail);
-    [super dealloc];
+- (id)initWithProperties:(NSDictionary *)properies {
+    self = [self init];
+    [self setProperties:properies];
+    return self;
 }
 
 + (NSArray *)readableTypesForPasteboard:(NSPasteboard *)pasteboard {
@@ -92,14 +83,11 @@
 }
 
 - (id)initWithPasteboardPropertyList:(id)propertyList ofType:(NSString *)type {
-    self = [self init];
-    if (self) {
-        if ([type isEqualToString:SKPasteboardTypeTransition]) {
-            [self setProperties:propertyList];
-        } else {
-            [self release];
-            self = nil;
-        }
+    if ([type isEqualToString:SKPasteboardTypeTransition]) {
+        self = [self initWithProperties:propertyList];
+    } else {
+        [self release];
+        self = nil;
     }
     return self;
 }
@@ -122,12 +110,10 @@
     if ((value = [dictionary objectForKey:SKDurationKey]))
         [self setDuration:[value doubleValue]];
     if ((value = [dictionary objectForKey:SKShouldRestrictKey]))
-        [self setShouldRestrict:[value doubleValue]];
+        [self setShouldRestrict:[value boolValue]];
 }
 
 - (NSString *)label {
-    if ([self thumbnail] && [self toThumbnail])
-        return [NSString stringWithFormat:@"%@\u2192%@", [[self thumbnail] 
label], [[self toThumbnail] label]];
     return nil;
 }
 
@@ -135,6 +121,34 @@
     return NSLocalizedString(@"Page Transition", @"Box title");
 }
 
+@end
+
+#pragma mark -
+
+@implementation SKLabeledTransitionInfo
+
+@synthesize thumbnail, toThumbnail;
+@dynamic transitionName;
+
++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
+    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
+    if ([key isEqualToString:@"transitionName"])
+        keyPaths = [keyPaths setByAddingObjectsFromSet:[NSSet 
setWithObjects:@"transitionStyle", nil]];
+    return keyPaths;
+}
+
+- (void)dealloc {
+    SKDESTROY(thumbnail);
+    SKDESTROY(toThumbnail);
+    [super dealloc];
+}
+
+- (NSString *)label {
+    if ([self thumbnail] && [self toThumbnail])
+        return [NSString stringWithFormat:@"%@\u2192%@", [[self thumbnail] 
label], [[self toThumbnail] label]];
+    return nil;
+}
+
 - (NSString *)transitionName {
     return [SKTransitionController localizedNameForStyle:[self 
transitionStyle]];
 }

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