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