Revision: 4727
http://skim-app.svn.sourceforge.net/skim-app/?rev=4727&view=rev
Author: hofman
Date: 2008-10-02 16:17:07 +0000 (Thu, 02 Oct 2008)
Log Message:
-----------
simplify changing values for transition filter
Modified Paths:
--------------
trunk/SKTransitionController.m
Modified: trunk/SKTransitionController.m
===================================================================
--- trunk/SKTransitionController.m 2008-10-02 13:56:52 UTC (rev 4726)
+++ trunk/SKTransitionController.m 2008-10-02 16:17:07 UTC (rev 4727)
@@ -221,6 +221,17 @@
return [translationFilter valueForKey:@"outputImage"];
}
+- (CIImage *)scaleImage:(CIImage *)image toSize:(NSSize)size {
+ CIFilter *scalingFilter = [self filterWithName:@"CILanczosScaleTransform"];
+ CGRect extent = [image extent];
+ float xScale = size.width / CGRectGetWidth(extent);
+ float yScale = size.height / CGRectGetHeight(extent);
+ [scalingFilter setValue:[NSNumber numberWithFloat:yScale]
forKey:@"inputScale"];
+ [scalingFilter setValue:[NSNumber numberWithFloat:xScale / yScale]
forKey:@"inputAspectRatio"];
+ [scalingFilter setValue:image forKey:@"inputImage"];
+ return [scalingFilter valueForKey:@"outputImage"];
+}
+
- (CIFilter *)transitionFilterForRect:(NSRect)rect forward:(BOOL)forward
initialCIImage:(CIImage *)initialCIImage finalCIImage:(CIImage *)finalCIImage {
NSString *filterName = [[[self class] transitionFilterNames]
objectAtIndex:transitionStyle - SKCoreImageTransition];
CIFilter *transitionFilter = [self filterWithName:filterName];
@@ -231,48 +242,40 @@
NSString *key;
while (key = [keyEnum nextObject]) {
- if([key isEqualToString:@"inputExtent"]) {
+ id value = nil;
+ 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"]) {
+ value = [CIVector vectorWithX:NSMinX(extent) Y:NSMinY(extent)
Z:NSWidth(extent) W:NSHeight(extent)];
+ } else if ([key isEqualToString:@"inputAngle"]) {
float angle = forward ? 0.0 : M_PI;
if ([filterName isEqualToString:@"CIPageCurlTransition"])
angle = forward ? -M_PI_4 : -3.0 * M_PI_4;
- [transitionFilter setValue:[NSNumber numberWithFloat:angle]
forKey:@"inputAngle"];
- } 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];
-
- 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"];
-
- [transitionFilter setValue:[self
translateImage:[maskScalingFilter valueForKey:@"outputImage"] xBy:NSMinX(rect)
- NSMinX(bounds) yBy:NSMinY(rect) - NSMinY(bounds)] forKey:key];
- }
- }
- }
+ value = [NSNumber numberWithFloat:angle];
+ } else if ([key isEqualToString:@"inputCenter"]) {
+ value = [CIVector vectorWithX:NSMidX(rect) Y:NSMidY(rect)];
+ } else if ([key isEqualToString:@"inputImage"]) {
+ value = initialCIImage;
+ if (NSEqualRects(rect, bounds) == NO)
+ value = [self cropImage:value toRect:rect];
+ } else if ([key isEqualToString:@"inputTargetImage"]) {
+ value = finalCIImage;
+ if (NSEqualRects(rect, bounds) == NO)
+ value = [self cropImage:value toRect:rect];
+ } else if ([key isEqualToString:@"inputShadingImage"]) {
+ value = [self inputShadingImage];
+ } else if ([key isEqualToString:@"inputBacksideImage"]) {
+ value = initialCIImage;
+ if (NSEqualRects(rect, bounds) == NO)
+ value = [self cropImage:value toRect:rect];
+ } else if ([[[[transitionFilter attributes] objectForKey:key]
objectForKey:kCIAttributeClass] isEqualToString:@"CIImage"]) {
+ // Scale and translate our mask image to match the transition area
size.
+ value = [self scaleImage:[self inputMaskImage] toSize:rect.size];
+ if (NSEqualPoints(rect.origin, bounds.origin) == NO)
+ value = [self translateImage:value xBy:NSMinX(rect) -
NSMinX(bounds) yBy:NSMinY(rect) - NSMinY(bounds)];
+ } else continue;
+ [transitionFilter setValue:value forKey:key];
}
- if (NSEqualRects(rect, bounds) == NO) {
- initialCIImage = [self cropImage:initialCIImage toRect:rect];
- finalCIImage = [self cropImage:finalCIImage toRect:rect];
- }
-
- [transitionFilter setValue:initialCIImage forKey:@"inputImage"];
- [transitionFilter setValue:finalCIImage forKey:@"inputTargetImage"];
-
return transitionFilter;
}
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 the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit