Revision: 2525
http://skim-app.svn.sourceforge.net/skim-app/?rev=2525&view=rev
Author: hofman
Date: 2007-07-18 04:43:08 -0700 (Wed, 18 Jul 2007)
Log Message:
-----------
Load transition filter names dynamically. This allows adding custom transition
filters in the standard locations (Library/Graphics/Image Units).
Add an extra option for the extent of the transition.
Modified Paths:
--------------
trunk/Dutch.lproj/MainWindow.nib/classes.nib
trunk/Dutch.lproj/MainWindow.nib/data.dependency
trunk/Dutch.lproj/MainWindow.nib/info.nib
trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib
trunk/English.lproj/MainWindow.nib/classes.nib
trunk/English.lproj/MainWindow.nib/info.nib
trunk/English.lproj/MainWindow.nib/keyedobjects.nib
trunk/Italian.lproj/MainWindow.nib/classes.nib
trunk/Italian.lproj/MainWindow.nib/info.nib
trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib
trunk/SKMainWindowController.h
trunk/SKMainWindowController.m
trunk/SKPDFView.h
trunk/SKPDFView.m
trunk/SKTransitionController.h
trunk/SKTransitionController.m
Modified: trunk/Dutch.lproj/MainWindow.nib/classes.nib
===================================================================
--- trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-07-18 08:44:28 UTC
(rev 2524)
+++ trunk/Dutch.lproj/MainWindow.nib/classes.nib 2007-07-18 11:43:08 UTC
(rev 2525)
@@ -160,6 +160,7 @@
toolModeButton = NSSegmentedControl;
transitionDurationField = NSTextField;
transitionDurationSlider = NSSlider;
+ transitionExtentMatrix = NSMatrix;
transitionSheet = NSWindow;
transitionStylePopUpButton = NSPopUpButton;
};
Modified: trunk/Dutch.lproj/MainWindow.nib/data.dependency
===================================================================
--- trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-07-18 08:44:28 UTC
(rev 2524)
+++ trunk/Dutch.lproj/MainWindow.nib/data.dependency 2007-07-18 11:43:08 UTC
(rev 2525)
@@ -5,7 +5,6 @@
<key>IBPaletteDependency</key>
<array>
<string>PDFKit</string>
- <string>Controllers</string>
</array>
</dict>
</plist>
Modified: trunk/Dutch.lproj/MainWindow.nib/info.nib
===================================================================
--- trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-07-18 08:44:28 UTC (rev
2524)
+++ trunk/Dutch.lproj/MainWindow.nib/info.nib 2007-07-18 11:43:08 UTC (rev
2525)
@@ -25,6 +25,10 @@
<array>
<integer>208</integer>
</array>
+ <key>IBOpenObjects</key>
+ <array>
+ <integer>633</integer>
+ </array>
<key>IBSystem Version</key>
<string>8R218</string>
</dict>
Modified: trunk/Dutch.lproj/MainWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)
Modified: trunk/English.lproj/MainWindow.nib/classes.nib
===================================================================
--- trunk/English.lproj/MainWindow.nib/classes.nib 2007-07-18 08:44:28 UTC
(rev 2524)
+++ trunk/English.lproj/MainWindow.nib/classes.nib 2007-07-18 11:43:08 UTC
(rev 2525)
@@ -160,6 +160,7 @@
toolModeButton = NSSegmentedControl;
transitionDurationField = NSTextField;
transitionDurationSlider = NSSlider;
+ transitionExtentMatrix = NSMatrix;
transitionSheet = NSWindow;
transitionStylePopUpButton = NSPopUpButton;
};
Modified: trunk/English.lproj/MainWindow.nib/info.nib
===================================================================
--- trunk/English.lproj/MainWindow.nib/info.nib 2007-07-18 08:44:28 UTC (rev
2524)
+++ trunk/English.lproj/MainWindow.nib/info.nib 2007-07-18 11:43:08 UTC (rev
2525)
@@ -27,18 +27,18 @@
</array>
<key>IBOpenObjects</key>
<array>
- <integer>168</integer>
- <integer>256</integer>
- <integer>5</integer>
- <integer>208</integer>
- <integer>502</integer>
<integer>633</integer>
+ <integer>553</integer>
<integer>539</integer>
- <integer>511</integer>
+ <integer>314</integer>
+ <integer>5</integer>
+ <integer>168</integer>
<integer>224</integer>
- <integer>553</integer>
- <integer>314</integer>
+ <integer>256</integer>
<integer>585</integer>
+ <integer>511</integer>
+ <integer>502</integer>
+ <integer>208</integer>
</array>
<key>IBSystem Version</key>
<string>8R218</string>
Modified: trunk/English.lproj/MainWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)
Modified: trunk/Italian.lproj/MainWindow.nib/classes.nib
===================================================================
--- trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-07-18 08:44:28 UTC
(rev 2524)
+++ trunk/Italian.lproj/MainWindow.nib/classes.nib 2007-07-18 11:43:08 UTC
(rev 2525)
@@ -160,6 +160,7 @@
toolModeButton = NSSegmentedControl;
transitionDurationField = NSTextField;
transitionDurationSlider = NSSlider;
+ transitionExtentMatrix = NSMatrix;
transitionSheet = NSWindow;
transitionStylePopUpButton = NSPopUpButton;
};
Modified: trunk/Italian.lproj/MainWindow.nib/info.nib
===================================================================
--- trunk/Italian.lproj/MainWindow.nib/info.nib 2007-07-18 08:44:28 UTC (rev
2524)
+++ trunk/Italian.lproj/MainWindow.nib/info.nib 2007-07-18 11:43:08 UTC (rev
2525)
@@ -27,12 +27,12 @@
</array>
<key>IBOpenObjects</key>
<array>
+ <integer>208</integer>
+ <integer>539</integer>
+ <integer>511</integer>
+ <integer>5</integer>
<integer>628</integer>
- <integer>5</integer>
- <integer>511</integer>
<integer>553</integer>
- <integer>539</integer>
- <integer>208</integer>
<integer>168</integer>
</array>
<key>IBSystem Version</key>
Modified: trunk/Italian.lproj/MainWindow.nib/keyedobjects.nib
===================================================================
(Binary files differ)
Modified: trunk/SKMainWindowController.h
===================================================================
--- trunk/SKMainWindowController.h 2007-07-18 08:44:28 UTC (rev 2524)
+++ trunk/SKMainWindowController.h 2007-07-18 11:43:08 UTC (rev 2525)
@@ -167,6 +167,7 @@
IBOutlet NSPopUpButton *transitionStylePopUpButton;
IBOutlet NSTextField *transitionDurationField;
IBOutlet NSSlider *transitionDurationSlider;
+ IBOutlet NSMatrix *transitionExtentMatrix;
NSButton *colorAccessoryView;
BOOL updatingColor;
Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m 2007-07-18 08:44:28 UTC (rev 2524)
+++ trunk/SKMainWindowController.m 2007-07-18 11:43:08 UTC (rev 2525)
@@ -74,6 +74,7 @@
#import "SKLineInspector.h"
#import "SKColorSwatch.h"
#import "SKStatusBar.h"
+#import "SKTransitionController.h"
#define SEGMENTED_CONTROL_HEIGHT 25.0
#define WINDOW_X_DELTA 0.0
@@ -1693,13 +1694,25 @@
if (returnCode == NSOKButton) {
[pdfView setTransitionStyle:[[transitionStylePopUpButton selectedItem]
tag]];
[pdfView setTransitionDuration:fmax([transitionDurationField
floatValue], 0.0)];
+ [pdfView setTransitionShouldRestrict:(BOOL)[[transitionExtentMatrix
selectedCell] tag]];
}
}
- (IBAction)chooseTransition:(id)sender {
+ if ([transitionStylePopUpButton numberOfItems] == SKCoreImageTransition) {
+ NSArray *filterNames = [SKTransitionController transitionFilterNames];
+ int i, count = [filterNames count];
+ for (i = 0; i < count; i++) {
+ NSString *name = [filterNames objectAtIndex:i];
+ [transitionStylePopUpButton addItemWithTitle:[CIFilter
localizedNameForFilterName:name]];
+ NSMenuItem *item = [transitionStylePopUpButton lastItem];
+ [item setTag:SKCoreImageTransition + i];
+ }
+ }
[transitionStylePopUpButton selectItemWithTag:[pdfView transitionStyle]];
[transitionDurationField setFloatValue:[pdfView transitionDuration]];
[transitionDurationSlider setFloatValue:[pdfView transitionDuration]];
+ [transitionExtentMatrix selectCellWithTag:(int)[pdfView
transitionShouldRestrict]];
[NSApp beginSheet:transitionSheet
modalForWindow:[self window]
modalDelegate:self
Modified: trunk/SKPDFView.h
===================================================================
--- trunk/SKPDFView.h 2007-07-18 08:44:28 UTC (rev 2524)
+++ trunk/SKPDFView.h 2007-07-18 11:43:08 UTC (rev 2525)
@@ -93,6 +93,7 @@
SKAnimationTransitionStyle transitionStyle;
float transitionDuration;
+ BOOL transitionShouldRestrict;
PDFAnnotation *activeAnnotation;
PDFAnnotation *highlightAnnotation;
@@ -149,6 +150,9 @@
- (float)transitionDuration;
- (void)setTransitionDuration:(float)duration;
+- (BOOL)transitionShouldRestrict;
+- (void)setTransitionShouldRestrict:(BOOL)flag;
+
- (IBAction)delete:(id)sender;
- (IBAction)autoSelectContent:(id)sender;
Modified: trunk/SKPDFView.m
===================================================================
--- trunk/SKPDFView.m 2007-07-18 08:44:28 UTC (rev 2524)
+++ trunk/SKPDFView.m 2007-07-18 11:43:08 UTC (rev 2525)
@@ -153,6 +153,7 @@
transitionController = nil;
transitionStyle = SKNoTransition;
transitionDuration = 1.0;
+ transitionShouldRestrict = NO;
spellingTag = [NSSpellChecker uniqueSpellDocumentTag];
@@ -548,6 +549,14 @@
transitionDuration = duration;
}
+- (BOOL)transitionShouldRestrict {
+ return transitionShouldRestrict;
+}
+
+- (void)setTransitionShouldRestrict:(BOOL)flag {
+ transitionShouldRestrict = flag;
+}
+
#pragma mark Reading bar
- (BOOL)hasReadingBar {
@@ -587,7 +596,7 @@
else
[super goToPreviousPage:self];
rect = [self convertRect:[[self currentPage] boundsForBox:[self
displayBox]] fromPage:[self currentPage]];
- [transitionController animateWithTransitionStyle:[self transitionStyle]
direction:next ? CGSLeft : CGSRight duration:[self transitionDuration]
fromRect:rect];
+ [transitionController animateWithTransitionStyle:[self transitionStyle]
direction:next ? CGSLeft : CGSRight duration:[self transitionDuration]
fromRect:rect shouldRestrict:transitionShouldRestrict];
}
- (void)goToNextPage:(id)sender {
Modified: trunk/SKTransitionController.h
===================================================================
--- trunk/SKTransitionController.h 2007-07-18 08:44:28 UTC (rev 2524)
+++ trunk/SKTransitionController.h 2007-07-18 11:43:08 UTC (rev 2525)
@@ -107,6 +107,8 @@
SKWarpSwitchTransition = CGSWarpSwitch,
SKWarpFlipTransition = CGSFlip,
// Core Image transitions
+ SKCoreImageTransition
+ /*
SKCopyMachineTransition,
SKDisintegrateTransition,
SKDissolveTransition,
@@ -114,7 +116,7 @@
SKModTransition,
SKPageCurlTransition,
SKRippleTransition,
- SKSwipeTransition
+ SKSwipeTransition*/
} SKAnimationTransitionStyle;
@class SKTransitionView;
@@ -127,12 +129,14 @@
NSRect imageRect;
}
++ (NSArray *)transitionFilterNames;
+
- (id)initWithView:(NSView *)aView;
- (NSView *)view;
- (void)setView:(NSView *)newView;
-
(void)prepareForAnimationWithTransitionStyle:(SKAnimationTransitionStyle)transitionStyle
fromRect:(NSRect)rect;
-- (void)animateWithTransitionStyle:(SKAnimationTransitionStyle)transitionStyle
direction:(CGSTransitionOption)direction duration:(float)duration
fromRect:(NSRect)rect;
+- (void)animateWithTransitionStyle:(SKAnimationTransitionStyle)transitionStyle
direction:(CGSTransitionOption)direction duration:(float)duration
fromRect:(NSRect)rect shouldRestrict:(BOOL)shouldRestrict;
@end
Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m 2007-07-18 08:44:28 UTC (rev 2524)
+++ trunk/SKTransitionController.m 2007-07-18 11:43:08 UTC (rev 2525)
@@ -74,6 +74,18 @@
@implementation SKTransitionController
++ (NSArray *)transitionFilterNames {
+ static NSMutableArray *transitionFilterNames = nil;
+
+ if(transitionFilterNames == nil) {
+ // get all the transition filters
+ [CIPlugIn loadAllPlugIns];
+ transitionFilterNames = [[CIFilter filterNamesInCategories:[NSArray
arrayWithObject:kCICategoryTransition]] copy];
+ }
+
+ return transitionFilterNames;
+}
+
- (id)initWithView:(NSView *)aView {
if (self = [super init]) {
view = aView;
@@ -126,71 +138,48 @@
return inputMaskImage;
}
-- (CIFilter *)transitionFilter:(SKAnimationTransitionStyle)transitionStyle
forRect:(NSRect)rect inBounds:(NSRect)bounds initialCIImage:(CIImage
*)initialCIImage finalCIImage:(CIImage *)finalCIImage {
- CIFilter *transitionFilter = nil;
+- (CIFilter *)transitionFilter:(SKAnimationTransitionStyle)transitionStyle
forRect:(NSRect)rect inBounds:(NSRect)bounds
shouldRestrict:(BOOL)shouldRestrict initialCIImage:(CIImage *)initialCIImage
finalCIImage:(CIImage *)finalCIImage {
+ NSString *filterName = [[[self class] transitionFilterNames]
objectAtIndex:transitionStyle - SKCoreImageTransition];
+ CIFilter *transitionFilter = [self filterWithName:filterName];
- switch (transitionStyle) {
- case SKCopyMachineTransition:
- transitionFilter = [self
filterWithName:@"CICopyMachineTransition"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMinX(rect)
Y:NSMinY(rect) Z:NSWidth(rect) W:NSHeight(rect)] forKey:@"inputExtent"];
- break;
-
- case SKDisintegrateTransition:
- {
- transitionFilter = [self
filterWithName:@"CIDisintegrateWithMaskTransition"];
-
- // Scale and translate our mask image to match the transition area
size.
- CIFilter *maskScalingFilter = [self
filterWithName:@"CILanczosScaleTransform"];
- CGRect maskExtent = [[self inputMaskImage] extent];
- float xScale = NSWidth(rect) / CGRectGetWidth(maskExtent);
- float yScale = NSHeight(rect) / CGRectGetHeight(maskExtent);
- [maskScalingFilter setValue:[NSNumber numberWithFloat:yScale]
forKey:@"inputScale"];
- [maskScalingFilter setValue:[NSNumber numberWithFloat:xScale /
yScale] forKey:@"inputAspectRatio"];
- [maskScalingFilter setValue:[self inputMaskImage]
forKey:@"inputImage"];
- CIFilter *maskTranslationFilter = [self
filterWithName:@"CIAffineTransform"];
- NSAffineTransform *affineTransform = [NSAffineTransform transform];
- [affineTransform translateXBy:NSMinX(rect) - NSMinX(bounds)
yBy:NSMinY(rect) - NSMinY(bounds)];
- [maskTranslationFilter setValue:affineTransform
forKey:@"inputTransform"];
- [maskTranslationFilter setValue:[maskScalingFilter
valueForKey:@"outputImage"] forKey:@"inputImage"];
-
- [transitionFilter setValue:[maskTranslationFilter
valueForKey:@"outputImage"] forKey:@"inputMaskImage"];
- break;
- }
- case SKDissolveTransition:
- transitionFilter = [self filterWithName:@"CIDissolveTransition"];
- break;
-
- case SKFlashTransition:
- transitionFilter = [self filterWithName:@"CIFlashTransition"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMidX(rect)
Y:NSMidY(rect)] forKey:@"inputCenter"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMinX(bounds)
Y:NSMinY(bounds) Z:NSWidth(bounds) W:NSHeight(bounds)] forKey:@"inputExtent"];
- break;
-
- case SKModTransition:
- transitionFilter = [self filterWithName:@"CIModTransition"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMidX(rect)
Y:NSMidY(rect)] forKey:@"inputCenter"];
- break;
-
- case SKPageCurlTransition:
- transitionFilter = [self filterWithName:@"CIPageCurlTransition"];
+ NSEnumerator *keyEnum = [[transitionFilter inputKeys] objectEnumerator];
+ NSString *key;
+
+ while (key = [keyEnum nextObject]) {
+ if([key isEqualToString:@"inputExtent"]) {
+ NSRect extent = shouldRestrict ? rect : bounds;
+ [transitionFilter setValue:[CIVector vectorWithX:NSMinX(extent)
Y:NSMinY(extent) Z:NSWidth(extent) W:NSHeight(extent)] forKey:key];
+ } else if([key isEqualToString:@"inputAngle"] && [filterName
isEqualToString:@"CIPageCurlTransition"]) {
[transitionFilter setValue:[NSNumber numberWithFloat:-M_PI_4]
forKey:@"inputAngle"];
- [transitionFilter setValue:initialCIImage
forKey:@"inputBacksideImage"];
- [transitionFilter setValue:[self inputShadingImage]
forKey:@"inputShadingImage"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMinX(rect)
Y:NSMinY(rect) Z:NSWidth(rect) W:NSHeight(rect)] forKey:@"inputExtent"];
- break;
+ } else if([key isEqualToString:@"inputCenter"]) {
+ [transitionFilter setValue:[CIVector vectorWithX:NSMidX(rect)
Y:NSMidY(rect)] forKey:key];
+ } else {
+ NSString *classType = [[[transitionFilter attributes]
objectForKey:key] objectForKey:kCIAttributeClass];
- case SKSwipeTransition:
- transitionFilter = [self filterWithName:@"CISwipeTransition"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMinX(rect)
Y:NSMinY(rect) Z:NSWidth(rect) W:NSHeight(rect)] forKey:@"inputExtent"];
- break;
-
- case SKRippleTransition:
- default:
- transitionFilter = [self filterWithName:@"CIRippleTransition"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMidX(rect)
Y:NSMidY(rect)] forKey:@"inputCenter"];
- [transitionFilter setValue:[CIVector vectorWithX:NSMinX(bounds)
Y:NSMinY(bounds) Z:NSWidth(bounds) W:NSHeight(bounds)] forKey:@"inputExtent"];
- [transitionFilter setValue:[self inputShadingImage]
forKey:@"inputShadingImage"];
- break;
+ if([classType isEqualToString:@"CIImage"]) {
+ if([key isEqualToString:@"inputShadingImage"]) {
+ [transitionFilter setValue:[self inputShadingImage]
forKey:key];
+ } else if ([key isEqualToString:@"inputBacksideImage"]) {
+ [transitionFilter setValue:initialCIImage forKey:key];
+ } else {
+ // Scale and translate our mask image to match the
transition area size.
+ CIFilter *maskScalingFilter = [self
filterWithName:@"CILanczosScaleTransform"];
+ CGRect maskExtent = [[self inputMaskImage] extent];
+ float xScale = NSWidth(rect) / CGRectGetWidth(maskExtent);
+ float yScale = NSHeight(rect) /
CGRectGetHeight(maskExtent);
+ [maskScalingFilter setValue:[NSNumber
numberWithFloat:yScale] forKey:@"inputScale"];
+ [maskScalingFilter setValue:[NSNumber
numberWithFloat:xScale / yScale] forKey:@"inputAspectRatio"];
+ [maskScalingFilter setValue:[self inputMaskImage]
forKey:@"inputImage"];
+ CIFilter *maskTranslationFilter = [self
filterWithName:@"CIAffineTransform"];
+ NSAffineTransform *affineTransform = [NSAffineTransform
transform];
+ [affineTransform translateXBy:NSMinX(rect) -
NSMinX(bounds) yBy:NSMinY(rect) - NSMinY(bounds)];
+ [maskTranslationFilter setValue:affineTransform
forKey:@"inputTransform"];
+ [maskTranslationFilter setValue:[maskScalingFilter
valueForKey:@"outputImage"] forKey:@"inputImage"];
+
+ [transitionFilter setValue:[maskTranslationFilter
valueForKey:@"outputImage"] forKey:key];
+ }
+ }
+ }
}
if (NSEqualRects(rect, bounds) == NO) {
@@ -211,7 +200,7 @@
-
(void)prepareForAnimationWithTransitionStyle:(SKAnimationTransitionStyle)transitionStyle
fromRect:(NSRect)rect {
if (transitionStyle == SKNoTransition) {
- } else if (transitionStyle < SKCopyMachineTransition) {
+ } else if (transitionStyle < SKCoreImageTransition) {
// We don't want the window to draw the next state before the
animation is run
[[view window] disableFlushWindow];
} else {
@@ -228,10 +217,10 @@
}
}
-- (void)animateWithTransitionStyle:(SKAnimationTransitionStyle)transitionStyle
direction:(CGSTransitionOption)direction duration:(float)duration
fromRect:(NSRect)rect {
+- (void)animateWithTransitionStyle:(SKAnimationTransitionStyle)transitionStyle
direction:(CGSTransitionOption)direction duration:(float)duration
fromRect:(NSRect)rect shouldRestrict:(BOOL)shouldRestrict {
if (transitionStyle == SKNoTransition) {
- } else if (transitionStyle < SKCopyMachineTransition) {
+ } else if (transitionStyle < SKCoreImageTransition) {
// declare our variables
int handle = -1;
@@ -257,7 +246,7 @@
[[view window] flushWindow];
CGSInvokeTransition(cgs, handle, duration);
- // We need to wait for the transition to finish before we get rid of
it, otherwise we’ll get all sorts of nasty errors... or maybe not.
+ // We need to wait for the transition to finish before we get rid of
it, otherwise we'll get all sorts of nasty errors... or maybe not.
usleep((useconds_t)(duration * 1000000));
CGSReleaseTransition(cgs, handle);
@@ -275,7 +264,7 @@
[view cacheDisplayInRect:bounds toBitmapImageRep:finalContentBitmap];
CIImage *finalImage = [[CIImage alloc]
initWithBitmapImageRep:finalContentBitmap];
- CIFilter *transitionFilter = [self transitionFilter:transitionStyle
forRect:imageRect inBounds:[view bounds] initialCIImage:initialImage
finalCIImage:finalImage];
+ CIFilter *transitionFilter = [self transitionFilter:transitionStyle
forRect:imageRect inBounds:[view bounds] shouldRestrict:shouldRestrict
initialCIImage:initialImage finalCIImage:finalImage];
[finalImage release];
[initialImage release];
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit