From: Yanagi Asakura Date: Wed, 30 Sep 2009 06:09:59 +0000 (+0900) Subject: open X-Git-Url: http://git.osdn.net/view?p=eliscolors%2Fmain.git;a=commitdiff_plain;h=bafbc5cd3522e254cf52223848dbad5c5898a341 open --- diff --git a/Elis Colors.xcodeproj/project.pbxproj b/Elis Colors.xcodeproj/project.pbxproj index 8fe4316..34d742b 100644 --- a/Elis Colors.xcodeproj/project.pbxproj +++ b/Elis Colors.xcodeproj/project.pbxproj @@ -9,7 +9,6 @@ /* Begin PBXBuildFile section */ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 256AC3DA0F4B6AC300CF3369 /* Elis_ColorsAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* Elis_ColorsAppDelegate.m */; }; - 5C01A8C11064ACFB0076B735 /* MainMenuForSmallDisplay.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C01A8BF1064ACFB0076B735 /* MainMenuForSmallDisplay.xib */; }; 5C0DDDC5106B5652008425EE /* ElisUndoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C0DDDC4106B5652008425EE /* ElisUndoManager.m */; }; 5C480238106D165B00DF0CBB /* movieSizeWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C480236106D165B00DF0CBB /* movieSizeWindow.xib */; }; 5C56077F105FB3B70094F837 /* ElisPropertyTableController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C56077E105FB3B70094F837 /* ElisPropertyTableController.m */; }; @@ -19,6 +18,8 @@ 5C72E72E106E0BC100A96925 /* WriterProgress.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C72E72C106E0BC100A96925 /* WriterProgress.xib */; }; 5C72E74C106E0CE800A96925 /* ElisWriterDummyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C72E74B106E0CE800A96925 /* ElisWriterDummyView.m */; }; 5C808D6A105CDA6800818B1A /* ElisCustomCALayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C808D69105CDA6800818B1A /* ElisCustomCALayer.m */; }; + 5C8588CA1071095A00802903 /* speed.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5C8588C81071095A00802903 /* speed.xib */; }; + 5C8588CE107109E800802903 /* ElisMovieSpeedController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C8588CD107109E800802903 /* ElisMovieSpeedController.m */; }; 5C8A4811106A66ED00EC2F3D /* ElisWriterLegacy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C8A4810106A66ED00EC2F3D /* ElisWriterLegacy.m */; }; 5C9F358B105F7BEA00D87A46 /* ElisEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C9F358A105F7BEA00D87A46 /* ElisEffect.m */; }; 5C9F358E105F7C0F00D87A46 /* ElisKeyframe.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C9F358D105F7C0F00D87A46 /* ElisKeyframe.m */; }; @@ -60,7 +61,6 @@ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 5C01A8C01064ACFB0076B735 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenuForSmallDisplay.xib; sourceTree = ""; }; 5C0DDDC3106B5652008425EE /* ElisUndoManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElisUndoManager.h; sourceTree = ""; }; 5C0DDDC4106B5652008425EE /* ElisUndoManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ElisUndoManager.m; sourceTree = ""; }; 5C480237106D165B00DF0CBB /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/movieSizeWindow.xib; sourceTree = ""; }; @@ -76,6 +76,9 @@ 5C72E74B106E0CE800A96925 /* ElisWriterDummyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ElisWriterDummyView.m; sourceTree = ""; }; 5C808D68105CDA6800818B1A /* ElisCustomCALayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElisCustomCALayer.h; sourceTree = ""; }; 5C808D69105CDA6800818B1A /* ElisCustomCALayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ElisCustomCALayer.m; sourceTree = ""; }; + 5C8588C91071095A00802903 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/speed.xib; sourceTree = ""; }; + 5C8588CC107109E800802903 /* ElisMovieSpeedController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElisMovieSpeedController.h; sourceTree = ""; }; + 5C8588CD107109E800802903 /* ElisMovieSpeedController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ElisMovieSpeedController.m; sourceTree = ""; }; 5C8A480F106A66ED00EC2F3D /* ElisWriterLegacy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElisWriterLegacy.h; sourceTree = ""; }; 5C8A4810106A66ED00EC2F3D /* ElisWriterLegacy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ElisWriterLegacy.m; sourceTree = ""; }; 5C9F3589105F7BEA00D87A46 /* ElisEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ElisEffect.h; sourceTree = ""; }; @@ -207,10 +210,10 @@ 29B97317FDCFA39411CA2CEA /* Resources */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, - 5C01A8BF1064ACFB0076B735 /* MainMenuForSmallDisplay.xib */, 5C480236106D165B00DF0CBB /* movieSizeWindow.xib */, 5C72E687106DED1600A96925 /* Preference.xib */, 5C72E72C106E0BC100A96925 /* WriterProgress.xib */, + 5C8588C81071095A00802903 /* speed.xib */, ); name = "Elis Colors"; sourceTree = ""; @@ -285,6 +288,8 @@ 5C72E60A106DD74000A96925 /* ElisMovieSizeWindowController.m */, 5C72E68A106DF1D400A96925 /* ElisPreferenceController.h */, 5C72E68B106DF1D400A96925 /* ElisPreferenceController.m */, + 5C8588CC107109E800802903 /* ElisMovieSpeedController.h */, + 5C8588CD107109E800802903 /* ElisMovieSpeedController.m */, ); name = "Sub GUI Parts"; sourceTree = ""; @@ -379,12 +384,12 @@ 5CE26AD9105BD8F20082C63A /* skyblue.jpg in Resources */, 5CB6798C10637CA400FC5F9F /* lightgreen.jpg in Resources */, 5CB6798D10637CA400FC5F9F /* orange.jpg in Resources */, - 5C01A8C11064ACFB0076B735 /* MainMenuForSmallDisplay.xib in Resources */, 5C480238106D165B00DF0CBB /* movieSizeWindow.xib in Resources */, 5C72E689106DED1600A96925 /* Preference.xib in Resources */, 5C72E72E106E0BC100A96925 /* WriterProgress.xib in Resources */, 5CB942B4106E675B0050FB6B /* trackgray.jpg in Resources */, 5CB942B6106E677E0050FB6B /* white.jpg in Resources */, + 5C8588CA1071095A00802903 /* speed.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -417,6 +422,7 @@ 5C72E74C106E0CE800A96925 /* ElisWriterDummyView.m in Sources */, 5CB9424D106E662F0050FB6B /* ElisCoreImageKernel.cikernel in Sources */, 5CB9424E106E662F0050FB6B /* ElisCustomFilter.m in Sources */, + 5C8588CE107109E800802903 /* ElisMovieSpeedController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -439,14 +445,6 @@ name = MainMenu.xib; sourceTree = ""; }; - 5C01A8BF1064ACFB0076B735 /* MainMenuForSmallDisplay.xib */ = { - isa = PBXVariantGroup; - children = ( - 5C01A8C01064ACFB0076B735 /* English */, - ); - name = MainMenuForSmallDisplay.xib; - sourceTree = ""; - }; 5C480236106D165B00DF0CBB /* movieSizeWindow.xib */ = { isa = PBXVariantGroup; children = ( @@ -471,6 +469,14 @@ name = WriterProgress.xib; sourceTree = ""; }; + 5C8588C81071095A00802903 /* speed.xib */ = { + isa = PBXVariantGroup; + children = ( + 5C8588C91071095A00802903 /* English */, + ); + name = speed.xib; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -480,10 +486,12 @@ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_GC = required; + GCC_OPTIMIZATION_LEVEL = 3; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; SDKROOT = macosx10.5; + VALID_ARCHS = "i386 x86_64"; }; name = "Release (Leopard)"; }; @@ -495,6 +503,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_OBJC_GC = required; GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = s; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Elis_Colors_Prefix.pch; INFOPLIST_FILE = "Elis_Colors-Info.plist"; diff --git a/ElisBase.h b/ElisBase.h index e73130e..8d89ed6 100644 --- a/ElisBase.h +++ b/ElisBase.h @@ -40,7 +40,9 @@ // GCD使ったら表示がちらつくようになった。どういうことなの... -#define __SNOW_LEOPARD__ +#define ELIS_VERSION @"0.1" + +//#define __SNOW_LEOPARD__ //#define __SNOW_LEOPARD_GCD__ #ifdef __SNOW_LEOPARD_GCD__ diff --git a/ElisController.h b/ElisController.h index e647346..053bce0 100644 --- a/ElisController.h +++ b/ElisController.h @@ -46,6 +46,7 @@ #import "ElisUndoManager.h" #import "ElisMovieSizeWindowController.h" #import "ElisPreferenceController.h" +#import "ElisMovieSpeedController.h" @class ElisMainView, ElisTimeLineController, ElisPropertyTableController; @@ -64,6 +65,7 @@ BOOL usingStampMode; IBOutlet NSWindow* _mainWindow; IBOutlet ElisUndoManager* _undoManager; IBOutlet NSTextView* _textLayerField; + IBOutlet NSButton* _playstopButton; float hipTime; QTTime _currentTime; @@ -81,6 +83,7 @@ BOOL usingStampMode; - (float)getHipTime; +- (IBAction)playStop:(id)sender; - (IBAction)startPlay:(id)sender; - (IBAction)stopPlay:(id)sender; - (IBAction)timeSliderChanged:(id)sender; @@ -102,6 +105,9 @@ BOOL usingStampMode; - (IBAction)preference:(id)sender; - (IBAction)changeToSmallWindiw:(id)sender; - +- (IBAction)changeMovieSpeed:(id)sender; +- (IBAction)gotoNextKeyTime:(id)sender; +- (IBAction)gotoPrevKeyTime:(id)sender; +- (IBAction)cutLayerAtCurrentTime:(id)sender; @end diff --git a/ElisController.m b/ElisController.m index 2be0571..9105c02 100644 --- a/ElisController.m +++ b/ElisController.m @@ -140,6 +140,7 @@ static float convertQTTimeToSecond(QTTime t) if(convertQTTimeToSecond(qttime) >= hipTime){ [_mainView stopDisplayLink]; [self stop:qttime]; + [_playstopButton setState:NSOffState]; return; } @@ -427,7 +428,7 @@ static float convertQTTimeToSecond(QTTime t) [[l valueForKey:@"ElisLayer"] addEffect:[sender title]]; [self refresh]; [_tableController createPropertyTable:[l valueForKey:@"ElisLayer"]]; - [_undoManager pushOperation:l]; + [_undoManager pushOperation:[l valueForKey:@"ElisLayer"]]; [_tableController reload]; } @@ -438,6 +439,9 @@ static float convertQTTimeToSecond(QTTime t) NSKeyedArchiver* encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [encoder encodeObject:layers forKey:@"layers"]; + [encoder encodeFloat:ProjectMovieSize.size.width forKey:@"movieWidth"]; + [encoder encodeFloat:ProjectMovieSize.size.height forKey:@"movieHeight"]; + [encoder encodeObject:ELIS_VERSION forKey:@"version"]; [encoder finishEncoding]; savePath = path; @@ -449,18 +453,24 @@ static float convertQTTimeToSecond(QTTime t) { NSMutableData* data = [NSMutableData dataWithContentsOfFile:path]; NSKeyedUnarchiver* decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; + float w, h; [_timeLineController awakeFromNib]; // これはひどい。 layers = [decoder decodeObjectForKey:@"layers"]; + w = [decoder decodeFloatForKey:@"movieWidth"]; + h = [decoder decodeFloatForKey:@"movieHeight"]; [decoder finishDecoding]; + ProjectMovieSize.size.width = w; + ProjectMovieSize.size.height = h; + int i, size = [layers count]; ElisLayer* l; CALayer* al; for(i = 0; i < size; i++){ l = [layers objectAtIndex:i]; - al = [_animationLayerFactory createNewAnimationLayer:[l duration] name:[l getPath] type:[l getType]]; + al = [_animationLayerFactory createNewAnimationLayer:[l duration] name:[l printName] type:[l getType]]; [l setLayer:al]; [_timeLineController addLayer:al]; } @@ -514,6 +524,12 @@ static float convertQTTimeToSecond(QTTime t) if([menuItem action] == @selector(redo:)) return [_undoManager canRedo]; + if([menuItem action] == @selector(changeMovieSpeed:)) + return [self canChangeMovieSpeed]; + + if([menuItem action] == @selector(cutLayerAtCurrentTime:)) + return [_timeLineController canDeleteLayer]; + return YES; } @@ -523,6 +539,8 @@ static float convertQTTimeToSecond(QTTime t) NSKeyedArchiver* encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [encoder encodeObject:layers forKey:@"layers"]; + [encoder encodeFloat:ProjectMovieSize.size.width forKey:@"movieWidth"]; + [encoder encodeFloat:ProjectMovieSize.size.height forKey:@"movieHeight"]; [encoder finishEncoding]; [data writeToFile:savePath atomically:YES]; @@ -585,4 +603,106 @@ static float convertQTTimeToSecond(QTTime t) } +- (IBAction)changeMovieSpeed:(id)sender +{ + ElisMovieSpeedController* c; + c = [[ElisMovieSpeedController alloc] init]; + + [_undoManager pushOperation:[[_timeLineController getSelectLayer] valueForKey:@"ElisLayer"]]; + + [c setMainWindow:_mainWindow]; + [c setLayer:[[_timeLineController getSelectLayer] valueForKey:@"ElisLayer"]]; + [c run]; + + [self refresh]; +} + +- (BOOL)canChangeMovieSpeed +{ + CALayer* l; + l = [_timeLineController getSelectLayer]; + if(l == nil) return NO; + if([[[[l valueForKey:@"ElisLayer"] media] type] isEqualToString:@"movie"]) return YES; + return NO; +} + +- (IBAction)gotoNextKeyTime:(id)sender +{ + float currentTime = [self getHipTime] * [timeSlider floatValue]; + NSMutableArray* array = [[NSMutableArray alloc] init]; + ElisLayer* l; + QTTime nextTime; + int i, size = [layers count]; + + for(i = 0; i < size; i++){ + [array addObject:[NSNumber numberWithFloat:0.0]]; + [array addObject:[NSNumber numberWithFloat:convertQTTimeToSecond([[layers objectAtIndex:i] mapping].time)]]; + [array addObject:[NSNumber numberWithFloat:convertQTTimeToSecond([[layers objectAtIndex:i] mapping].time) + + convertQTTimeToSecond([[layers objectAtIndex:i] mapping].duration)]]; + } + + [array sortUsingSelector:@selector(compare:)]; + size = [array count]; + + for(i = 0; i < size; i++) + if([[array objectAtIndex:i] floatValue] > currentTime){ + nextTime = QTMakeTime(([[array objectAtIndex:i] floatValue] +1.0/60.0)* DEFAULT_FPS, DEFAULT_FPS); + globalCurrentTime = nextTime; + _currentTime = nextTime; + [self moveSliderTo:nextTime]; + [self refresh]; + return; + } +} + +- (IBAction)gotoPrevKeyTime:(id)sender +{ + float currentTime = [self getHipTime] * [timeSlider floatValue]; + NSMutableArray* array = [[NSMutableArray alloc] init]; + ElisLayer* l; + QTTime nextTime; + int i, size = [layers count]; + + for(i = 0; i < size; i++){ + [array addObject:[NSNumber numberWithFloat:0.0]]; + [array addObject:[NSNumber numberWithFloat:convertQTTimeToSecond([[layers objectAtIndex:i] mapping].time)]]; + [array addObject:[NSNumber numberWithFloat:convertQTTimeToSecond([[layers objectAtIndex:i] mapping].time) + + convertQTTimeToSecond([[layers objectAtIndex:i] mapping].duration)]]; + } + + [array sortUsingSelector:@selector(compare:)]; + size = [array count]; + + for(i = size-1; i >= 0; i--) + if([[array objectAtIndex:i] floatValue] < currentTime){ +// if(i % 2 != 0) +// nextTime = QTMakeTime(([[array objectAtIndex:i] floatValue] -1.0/60)* DEFAULT_FPS, DEFAULT_FPS); +// else +// nextTime = QTMakeTime(([[array objectAtIndex:i] floatValue] +1.0/60)* DEFAULT_FPS, DEFAULT_FPS); + nextTime = QTMakeTime(([[array objectAtIndex:i] floatValue] +0.0/60)* DEFAULT_FPS, DEFAULT_FPS); + globalCurrentTime = nextTime; + _currentTime = nextTime; + [self moveSliderTo:nextTime]; + [self refresh]; + return; + } +} + +- (IBAction)cutLayerAtCurrentTime:(id)sender +{ + ElisLayer* layer = [[_timeLineController getSelectLayer] valueForKey:@"ElisLayer"]; + ElisLayer* new; + + new = [layer cutAtTime:globalCurrentTime]; + [layers addObject:new]; + + [_timeLineController addLayer:[new alayer]]; +} + +- (IBAction)playStop:(id)sender +{ + if(playing) [self stopPlay:nil]; + else [self startPlay:nil]; +} + @end diff --git a/ElisEffect.m b/ElisEffect.m index de87a4a..de1fd2f 100644 --- a/ElisEffect.m +++ b/ElisEffect.m @@ -52,38 +52,35 @@ continue; } input = [attrs valueForKey:key]; - if([[[attrs valueForKey:key] valueForKey:kCIAttributeClass] isEqualToString:@"CIColor"]){ + if([[[attrs valueForKey:key] valueForKey:kCIAttributeClass] isEqualToString:@"CIColor"]){ + [colors addObject:key]; + [colors addObject:[NSString stringWithFormat:@"%@ %@", key, @"red"]]; + [colors addObject:[NSString stringWithFormat:@"%@ %@", key, @"green"]]; + [colors addObject:[NSString stringWithFormat:@"%@ %@", key, @"blue"]]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"red"] value:1.0 time:QTZeroTime]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"green"] value:1.0 time:QTZeroTime]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"blue"] value:1.0 time:QTZeroTime]; - [colors addObject:key]; - [colors addObject:[NSString stringWithFormat:@"%@ %@", key, @"red"]]; - [colors addObject:[NSString stringWithFormat:@"%@ %@", key, @"green"]]; - [colors addObject:[NSString stringWithFormat:@"%@ %@", key, @"blue"]]; } else if([[[attrs valueForKey:key] valueForKey:kCIAttributeClass] isEqualToString:@"CIVector"]){ + [vecs addObject:key]; + [vecs addObject:[NSString stringWithFormat:@"%@ %@", key, @"X"]]; + [vecs addObject:[NSString stringWithFormat:@"%@ %@", key, @"Y"]]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"X"] value:[[input valueForKey:kCIAttributeDefault] X] time:QTZeroTime]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"Y"] value:[[input valueForKey:kCIAttributeDefault] Y] time:QTZeroTime]; - [vecs addObject:key]; - [vecs addObject:[NSString stringWithFormat:@"%@ %@", key, @"X"]]; - [vecs addObject:[NSString stringWithFormat:@"%@ %@", key, @"Y"]]; } else if([[[attrs valueForKey:key] valueForKey:kCIAttributeClass] isEqualToString:@"NSAffineTransform"]){ -// [self setEffectTrueValueForTime: -// [NSString stringWithFormat:@"%@ %@", key, @"Position X"] value:0.0 time:QTZeroTime]; + [affine addObject:key]; + [affine addObject:[NSString stringWithFormat:@"%@ %@", key, @"Scale"]]; + [affine addObject:[NSString stringWithFormat:@"%@ %@", key, @"Angle"]]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"Scale"] value:1.0 time:QTZeroTime]; [self setEffectTrueValueForTime: [NSString stringWithFormat:@"%@ %@", key, @"Angle"] value:0.0 time:QTZeroTime]; - [affine addObject:key]; -// [affine addObject:[NSString stringWithFormat:@"%@ %@", key, @"Position X"]]; - [affine addObject:[NSString stringWithFormat:@"%@ %@", key, @"Scale"]]; - [affine addObject:[NSString stringWithFormat:@"%@ %@", key, @"Angle"]]; } else if([[[attrs valueForKey:key] valueForKey:kCIAttributeClass] isEqualToString:@"NSNumber"]){ [self setEffectTrueValueForTime:key value:[[input valueForKey:kCIAttributeDefault] floatValue] time:QTZeroTime]; @@ -143,6 +140,29 @@ - (void)setEffectTrueValueForTime:(NSString *)key value:(float)v time:(QTTime)time { ElisKeyframe *k; + float max, min; + if([colors indexOfObject:key] != NSNotFound){ + max = 255.0; + min = 0.0; + }else if([vecs indexOfObject:key] != NSNotFound){ + max = ProjectMovieSize.size.width*2; + min = -ProjectMovieSize.size.width*2; + }else if([affine indexOfObject:key] != NSNotFound){ + if([key isEqualToString:@"inputTransform Angle"]){ + max = ANGLE_MAX; + min = ANGLE_MIN; + } else { + max = 5.0; + min = 0.1; + } + }else{ + max = [[[attrs valueForKey:key] valueForKey:kCIAttributeSliderMax] floatValue]; + min = [[[attrs valueForKey:key] valueForKey:kCIAttributeSliderMin] floatValue]; + } + + // min-maxに収まるようマップ + if(v < min) v = min; + if(v > max) v = max; if([params valueForKey:key]){ k = [params valueForKey:key]; diff --git a/ElisLayer.h b/ElisLayer.h index 74c6b0c..356deac 100644 --- a/ElisLayer.h +++ b/ElisLayer.h @@ -45,6 +45,7 @@ QTTime offset; // 再生時間オフセット NSMutableArray* effects; // エフェクトの配列 ElisKeyframe *pxKeyframe, *pyKeyframe; // Positionのキーフレーム + NSRect originSize; // 用意せざるをえない! } //@property (assign) QTTimeRange mapping; // マッピング情報。(QTTimeRange) @@ -88,5 +89,9 @@ - (void)saveToEncoder:(NSCoder*)encoder; - (void)loadFromDecoder:(NSCoder*)coder; +- (NSSize)originSize; +- (float)speed; +- (void)setSpeed:(float)s; +- (CALayer*)alayer; @end diff --git a/ElisLayer.m b/ElisLayer.m index d9df22a..7aff80a 100644 --- a/ElisLayer.m +++ b/ElisLayer.m @@ -52,6 +52,8 @@ static float convertQTTimeToSecond(QTTime t) [pxKeyframe setValueForTime:0.0 time:QTZeroTime]; [pyKeyframe setValueForTime:0.0 time:QTZeroTime]; + originSize = NSZeroRect; + [self addEffect:@"CIOpacity"]; //デフォルトで透過度フィルタと // [self addEffect:@"CILanczosScaleTransform"]; // 拡大縮小フィルタと [self addEffect:@"CIAffineTransform"]; // アフィン変換フィルタはつけておく。 @@ -71,6 +73,8 @@ static float convertQTTimeToSecond(QTTime t) forKeyPath:@"frame" options:(NSKeyValueObservingOptionNew) context:NULL]; + + originSize = [media size]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context @@ -148,6 +152,43 @@ static float convertQTTimeToSecond(QTTime t) return trackNumber; } +- (ElisLayer*)cutAtTime:(QTTime)cutTime +{ + QTTime innerCutTime = [self convertToInnnerTime:cutTime]; + ElisLayer* new; + NSKeyedArchiver* corder; + NSKeyedUnarchiver* decoder; + NSMutableData* data = [NSMutableData data]; + + corder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; + [self encodeWithCoder:corder]; + [corder finishEncoding]; + + new = [ElisLayer alloc]; + decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; + new = [new initWithCoder:decoder]; + [decoder finishDecoding]; + + mapping.duration = QTTimeDecrement(mapping.duration, cutTime); + [self setLayer:alayer]; + + [new cutBack:innerCutTime]; + return new; +} + +- (void)cutBack:(QTTime)time +{ + offset = time; + mapping.time = time; + mapping.duration = QTTimeDecrement(mapping.duration, time); + [self setLayer:alayer]; +} + +- (CALayer*)alayer +{ + return alayer; +} + - (void)setPositionX:(float)x forTime:(QTTime)time { if(recording) @@ -361,6 +402,7 @@ static float convertQTTimeToSecond(QTTime t) [encoder encodeObject:effects forKey:@"effects"]; [encoder encodeObject:pxKeyframe forKey:@"pxKeyframe"]; [encoder encodeObject:pyKeyframe forKey:@"pyKeyframe"]; + [encoder encodeFloat:[media speed] forKey:@"speed"]; } - (void)loadFromDecoder:(NSCoder*)coder @@ -371,6 +413,7 @@ static float convertQTTimeToSecond(QTTime t) effects = [coder decodeObjectForKey:@"effects"]; pxKeyframe = [coder decodeObjectForKey:@"pxKeyframe"]; pyKeyframe = [coder decodeObjectForKey:@"pyKeyframe"]; + [media setSpeed:[coder decodeFloatForKey:@"speed"]]; [self setLayer:alayer]; } @@ -397,4 +440,30 @@ static float convertQTTimeToSecond(QTTime t) return [media type]; } +- (NSString*)printName +{ + if([[media type] isEqualToString:@"text"]) + return @"text"; + + return [self getPath]; +} + +- (NSSize)originSize +{ + return originSize.size; +} + +- (float)speed +{ + return [media speed]; +} + +- (void)setSpeed:(float)s +{ + if(s < 0.01 || s > 100.0) return; + [media setSpeed:s]; + mapping.duration = [media duration]; + [self setLayer:alayer]; +} + @end diff --git a/ElisMainView.h b/ElisMainView.h index 1be81dd..5e31f3e 100644 --- a/ElisMainView.h +++ b/ElisMainView.h @@ -47,6 +47,7 @@ BOOL rendering; QTTime timeOffset; CVTimeStamp* stamp; QTTime _qt; + float scale; NSMutableArray* layerSet; ElisLayer** sortedLayerSet; diff --git a/ElisMainView.m b/ElisMainView.m index a996671..ab967ff 100644 --- a/ElisMainView.m +++ b/ElisMainView.m @@ -76,7 +76,7 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, CVDisplayLinkSetOutputCallback(displayLink, &MyRenderCallback, self); } -// [self setBounds:NSMakeRect(0, 0, 640, 480)]; + scale = 1.0; // [self setFrame:NSMakeRect(0, 0, 640/2, 480/2)]; NSLog(@"Elis Colors, Stand by ready."); @@ -129,18 +129,13 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, NSPoint point; CGRect imageRect; CGPoint cp; + NSRect frame = [self frame]; + NSSize originSize; + float dx, dy; - // 境界線を引く - if(printBorderLine){ - glBegin(GL_LINE_LOOP); - glColor3d(0.7, 0.7, 0.7); - glVertex2i(-1, -1); - glVertex2i(ProjectMovieSize.size.width+1, -1); - glVertex2i(ProjectMovieSize.size.width+1, ProjectMovieSize.size.height+1); - glVertex2i(-1, ProjectMovieSize.size.height+1); - glEnd(); - } - + dx = (frame.size.width - ProjectMovieSize.size.width)/2; + dy = (frame.size.height - ProjectMovieSize.size.height)/2; + // トラック番号順にバケットソート memset(sortedLayerSet, 0, sizeof(void*) * TRACK_SIZE); for(i = 0; i < size; i++) @@ -151,6 +146,7 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, ci = [sortedLayerSet[i] getEffectedImageWithoutStamp:time]; // 違いはここ。 point = [sortedLayerSet[i] getPositionForTime:[sortedLayerSet[i] convertToInnnerTime:time]]; + originSize = [sortedLayerSet[i] originSize]; if(ci == nil) continue; // サウンドレイヤーはスキップ imageRect = [ci extent]; if(imageRect.size.width >= 4000){ @@ -158,11 +154,28 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, } cp = *(CGPoint*)&point; + if(rendering == NO){ + cp.x += dx; + cp.y += dy; + } + cp.x -= (imageRect.size.width - originSize.width)/2; + cp.y -= (imageRect.size.height - originSize.height)/2; // [ciContext drawImage:ci inRect:CGRectMake(point.x, point.y, imageRect.size.width, imageRect.size.height) fromRect:imageRect]; [ciContext drawImage:ci atPoint:cp fromRect:imageRect]; // [ciContext drawImage:ci inRect:CGRectMake(point.x, point.y, 640, 480) fromRect:CGRectMake(0, 0, 640, 480)]; } + // 境界線を引く + if(printBorderLine && rendering == NO){ + glBegin(GL_LINE_LOOP); + glColor3d(0.7, 0.7, 0.7); + glVertex2i(dx+1, dy+1); + glVertex2i(ProjectMovieSize.size.width+1+dx, dy+1); + glVertex2i(ProjectMovieSize.size.width+1+dx, ProjectMovieSize.size.height+1+dy); + glVertex2i(dx+1, ProjectMovieSize.size.height+1+dy); + glEnd(); + } + glFlush(); // あとかたづけ @@ -186,17 +199,12 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, NSPoint point; CGRect imageRect; CGPoint cp; + NSRect frame = [self frame]; + NSSize originSize; + float dx, dy; - // 境界線を引く - if(printBorderLine){ - glBegin(GL_LINE_LOOP); - glColor3d(0.7, 0.7, 0.7); - glVertex2i(-1, -1); - glVertex2i(ProjectMovieSize.size.width+1, -1); - glVertex2i(ProjectMovieSize.size.width+1, ProjectMovieSize.size.height+1); - glVertex2i(-1, ProjectMovieSize.size.height+1); - glEnd(); - } + dx = (frame.size.width - ProjectMovieSize.size.width)/2; + dy = (frame.size.height - ProjectMovieSize.size.height)/2; // トラック番号順にバケットソート memset(sortedLayerSet, 0, sizeof(void*) * TRACK_SIZE); @@ -208,6 +216,7 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, ci = [sortedLayerSet[i] getEffectedImage:stamp forTime:_qt]; point = [sortedLayerSet[i] getPositionForTime:[sortedLayerSet[i] convertToInnnerTime:_qt]]; + originSize = [sortedLayerSet[i] originSize]; if(ci == nil) continue; // サウンドレイヤーはスキップ imageRect = [ci extent]; @@ -216,12 +225,25 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, } cp = *(CGPoint*)&point; + cp.x += dx - (imageRect.size.width - originSize.width)/2; + cp.y += dy - (imageRect.size.height - originSize.height)/2; // [ciContext drawImage:ci inRect:imageRect fromRect:CGRectMake(point.x, point.y, ProjectMovieSize.size.width, ProjectMovieSize.size.height)]; [ciContext drawImage:ci atPoint:cp fromRect:imageRect]; // [ciContext drawImage:ci inRect:CGRectMake(point.x, point.y, imageRect.size.width, imageRect.size.height) // fromRect:imageRect]; } + // 境界線を引く + if(printBorderLine){ + glBegin(GL_LINE_LOOP); + glColor3d(0.7, 0.7, 0.7); + glVertex2i(dx+1, dy+1); + glVertex2i(ProjectMovieSize.size.width+1+dx, dy+1); + glVertex2i(ProjectMovieSize.size.width+1+dx, ProjectMovieSize.size.height+1+dy); + glVertex2i(dx+1, ProjectMovieSize.size.height+1+dy); + glEnd(); + } + glFlush(); // あとかたづけ @@ -293,14 +315,14 @@ static CVReturn MyRenderCallback(CVDisplayLinkRef displayLink, } - (void)getCurrentPixelData:(NSRect)rect buffer:(void*)buffer -{ +{ glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT); glPixelStorei(GL_PACK_ALIGNMENT, 4); glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_SKIP_ROWS, 0); glPixelStorei(GL_PACK_SKIP_PIXELS, 0); -// glReadBuffer(GL_FRONT); // フロントバッファ(って何だろう?)からピクセルを読みに行く。 + // これが公式の方法とかマジないわー。 glReadPixels(0, 0, rect.size.width, rect.size.height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, buffer); glPopClientAttrib(); diff --git a/ElisMedia.h b/ElisMedia.h index 35256f3..1af7f78 100644 --- a/ElisMedia.h +++ b/ElisMedia.h @@ -50,5 +50,8 @@ - (void)releaseContext; - (NSString*)type; - (NSAttributedString*)text; +- (NSRect)size; +- (float)speed; +- (void)setSpeed:(float)s; @end diff --git a/ElisMedia.m b/ElisMedia.m index cddfa17..84be399 100644 --- a/ElisMedia.m +++ b/ElisMedia.m @@ -107,7 +107,7 @@ [im lockFocus]; // t = [[NSAttributedString alloc] initWithString:@"string"]; [[NSGraphicsContext currentContext] setShouldAntialias:YES]; - [t drawInRect:NSMakeRect(0, 0, 640, 480)]; + [t drawInRect:NSMakeRect(0, 0, [im size].width, [im size].height)]; [im unlockFocus]; image = [[CIImage alloc] initWithData:[im TIFFRepresentation]]; // [im release]; @@ -157,7 +157,7 @@ - (void)setCurrentTime:(QTTime)time { - // time.timeValue *= speed; + time.timeValue *= speed; if(movie){ [movie setAttribute:[NSValue valueWithQTTime:time] forKey:QTMovieCurrentTimeAttribute]; MoviesTask([movie quickTimeMovie], 0); @@ -169,7 +169,8 @@ - (void)play { if(movie && !playing && usingStampMode){ - [movie play]; +// [movie play]; + [movie setRate:speed]; playing = YES; } if(sound && YES){ @@ -192,8 +193,13 @@ - (QTTime)duration { - if(movie) - return [movie duration]; + if(movie){ + QTTime d = [movie duration]; + d.timeValue /= speed; + float s = (float)d.timeValue/d.timeScale; + if(s > 60*10) return QTMakeTime(60*10, 1); + return d; + } if(sound) return [sound duration]; if(image) @@ -253,6 +259,7 @@ int flag; [encoder encodeObject:_path forKey:@"path"]; [encoder encodeObject:text forKey:@"text"]; + [encoder encodeFloat:speed forKey:@"speed"]; if(movie) flag = 0; else if(sound) flag = 1; @@ -269,16 +276,20 @@ NSAttributedString* t = [coder decodeObjectForKey:@"text"]; flag = [coder decodeIntForKey:@"flag"]; + id ret; + if(flag == 0) - return [self initWithMovieFile:path]; + ret = [self initWithMovieFile:path]; else if(flag == 1) - return [self initWithSoundFile:path]; + ret = [self initWithSoundFile:path]; else if(flag == 2) - return [self initWithImageFile:path]; - else { - return [self initWithText:t]; - } + ret = [self initWithImageFile:path]; + else + ret = [self initWithText:t]; + + speed = [coder decodeFloatForKey:@"speed"]; + return ret; } - (QTMovie*)getSoundMovie @@ -299,4 +310,29 @@ [self initWithText:t]; } +- (NSRect)size +{ + if(sound) + return NSZeroRect; + if(movie){ + NSSize s; + s = [[movie attributeForKey:QTMovieCurrentSizeAttribute] sizeValue]; + return NSMakeRect(0, 0, s.width, s.height); + } + if(image){ + CGRect c = [image extent]; + return *(NSRect*)&c; + } +} + +- (float)speed +{ + return speed; +} + +- (void)setSpeed:(float)s +{ + speed = s; +} + @end diff --git a/ElisMovieSizeWindowController.h b/ElisMovieSizeWindowController.h index 3f7bd4b..5168e42 100644 --- a/ElisMovieSizeWindowController.h +++ b/ElisMovieSizeWindowController.h @@ -1,3 +1,24 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + // // ElisMovieSizeWindowController.h // Elis Colors diff --git a/ElisMovieSizeWindowController.m b/ElisMovieSizeWindowController.m index ebe8251..6169d35 100644 --- a/ElisMovieSizeWindowController.m +++ b/ElisMovieSizeWindowController.m @@ -1,3 +1,24 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + // // ElisMovieSizeWindowController.m // Elis Colors diff --git a/ElisMovieSpeedController.h b/ElisMovieSpeedController.h new file mode 100644 index 0000000..effdb88 --- /dev/null +++ b/ElisMovieSpeedController.h @@ -0,0 +1,63 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution.// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + +// +// ElisMovieSpeedController.h +// Elis Colors +// +// Created by 柳 on 09/09/29. +// Copyright 2009 __MyCompanyName__. All rights reserved. +// + +#import +#import "ElisLayer.h" + +@interface ElisMovieSpeedController : NSObject { + IBOutlet NSTextField* _speedField; + IBOutlet NSWindow* _sheet; + id _mainWindow; + ElisLayer* layer; +} + +- (void)setMainWindow:(id)w; +- (IBAction)pushedOK:(id)sender; +- (IBAction)pushedCancel:(id)sender; + +@end diff --git a/ElisMovieSpeedController.m b/ElisMovieSpeedController.m new file mode 100644 index 0000000..667783e --- /dev/null +++ b/ElisMovieSpeedController.m @@ -0,0 +1,75 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + +// +// ElisMovieSpeedController.m +// Elis Colors +// +// Created by 柳 on 09/09/29. +// Copyright 2009 __MyCompanyName__. All rights reserved. +// + +#import "ElisMovieSpeedController.h" + + +@implementation ElisMovieSpeedController + +- (id)init +{ + [NSBundle loadNibNamed:@"speed" owner:self]; + return self; +} + +- (void)setMainWindow:(id)w +{ + _mainWindow = w; +} + +- (void)setLayer:(ElisLayer*)l +{ + layer = l; +} + +- (void)run +{ + float s = [layer speed]; + [_speedField setFloatValue:s*100]; + + [NSApp beginSheet:_sheet modalForWindow:_mainWindow + modalDelegate:self didEndSelector:nil contextInfo:nil]; +} + +- (IBAction)pushedOK:(id)sender +{ + float s = [_speedField floatValue]; + [layer setSpeed:s/100.0]; + + [_sheet close]; + [NSApp endSheet:_sheet]; +} + +- (IBAction)pushedCancel:(id)sender +{ + [_sheet close]; + [NSApp endSheet:_sheet]; +} + +@end diff --git a/ElisPreferenceController.h b/ElisPreferenceController.h index 094efbb..3a61773 100644 --- a/ElisPreferenceController.h +++ b/ElisPreferenceController.h @@ -1,3 +1,24 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + // // ElisPreferenceController.h // Elis Colors diff --git a/ElisPreferenceController.m b/ElisPreferenceController.m index 00e6cbf..8a330a2 100644 --- a/ElisPreferenceController.m +++ b/ElisPreferenceController.m @@ -1,3 +1,24 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + // // ElisPreferenceController.m // Elis Colors diff --git a/ElisPropertyTableController.m b/ElisPropertyTableController.m index 86c889b..4053f64 100644 --- a/ElisPropertyTableController.m +++ b/ElisPropertyTableController.m @@ -223,4 +223,31 @@ } +- (void)controlTextDidEndEditing:(NSNotification*)n +{ + int rowIndex = [_propertyView selectedRow]; + float x, y; + NSString* name = [propertyNames objectAtIndex:rowIndex]; + QTTime localCurrentTime; + float value = [[n object] floatValue]; + + if(recording) + localCurrentTime = [interestLayer convertToInnnerTime:globalCurrentTime]; + else + localCurrentTime = QTZeroTime; + + if([name isEqualToString:@"Position X"]){ +// x = [sender floatValue] * 2.0 * ProjectMovieSize.size.width - ProjectMovieSize.size.width; + [[effects objectAtIndex:rowIndex] setPositionX:value forTime:localCurrentTime]; + } else if([name isEqualToString:@"Position Y"]){ +// y = [sender floatValue] * 2.0 * ProjectMovieSize.size.height - ProjectMovieSize.size.height; + [[effects objectAtIndex:rowIndex] setPositionY:value forTime:localCurrentTime]; + } else { + [[effects objectAtIndex:rowIndex] setEffectTrueValueForTime:[valueNames objectAtIndex:rowIndex] + value:value time:localCurrentTime]; + } + [self reload]; + [_mainController refresh]; +} + @end diff --git a/ElisUndoManager.h b/ElisUndoManager.h index a18531b..b389e7b 100644 --- a/ElisUndoManager.h +++ b/ElisUndoManager.h @@ -1,3 +1,24 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + // // ElisUndoManager.h // Elis Colors diff --git a/ElisUndoManager.m b/ElisUndoManager.m index b28a9c0..a2b7986 100644 --- a/ElisUndoManager.m +++ b/ElisUndoManager.m @@ -1,3 +1,24 @@ +// Copyright (c) 2009 Yanagi Asakura +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. + // // ElisUndoManager.m // Elis Colors diff --git a/ElisWriterLegacy.m b/ElisWriterLegacy.m index 4aa79f9..105d7f0 100644 --- a/ElisWriterLegacy.m +++ b/ElisWriterLegacy.m @@ -183,16 +183,6 @@ static OSErr QTMoovProcs_VideoTrackDataProc(void *theRefcon, MovieExportGetDataP return; } - } else { - // いらない - // Setup the Movie Export component with our preset export settings -// QTAtomContainer settings; -// -// PtrToHand(ExportSettings, (Handle *)&settings, sizeof(ExportSettings)); -// -// MovieExportSetSettingsFromAtomContainer(myExporter, settings); -// -// QTDisposeAtomContainer(settings); } isExporting = YES; @@ -262,69 +252,9 @@ static OSErr QTMoovProcs_VideoTrackDataProc(void *theRefcon, MovieExportGetDataP CloseComponent(myExporter); - // do some extra work if we're exporting to iPod - // いらない。 -// if (!cancelExport && YES == exportToPod) { -// Handle podExportDataRef; -// OSType podExportDataRefType; -// Movie theRecentlyExportedMovie; -// short resID = movieInDataForkResID; -// -// // open the movie we just exported -// NewMovieFromDataRef(&theRecentlyExportedMovie, newMovieActive, &resID, myDataRef, myDataType); -// -// // create a new data reference using the .m4v extention -// CFMutableStringRef newFileName = CFStringCreateMutableCopy(kCFAllocatorDefault, 0, (CFStringRef)[savePanel filename]); -// CFRange extension = CFStringFind(newFileName, CFSTR(".mov"), kCFCompareBackwards); -// CFStringReplace(newFileName, extension, CFSTR(".m4v")); -// -// QTNewDataReferenceFromFullPathCFString(newFileName, kQTNativeDefaultPathStyle, 0, &podExportDataRef, &podExportDataRefType); -// -// // Delete any existing .m4v file with the same name -// [[NSFileManager defaultManager] removeFileAtPath:(NSString *)newFileName handler:nil]; -// -// // find and open the iPod export component, if you wanted to export to ATV use the 'M4VH' fourCC -// err = OpenADefaultComponent(MovieExportType, 'M4V ', &myExporter); -// if (err == noErr && 0 != myExporter) { -// -// // set the progress procedure for some basic UI -// MovieExportSetProgressProc(myExporter, NewMovieProgressUPP(QTMoovProcs_PodExportProgress), (long)delegate); -// -// // do the export -// MovieExportToDataRef(myExporter, podExportDataRef, podExportDataRefType, theRecentlyExportedMovie, 0, 0, GetMovieDuration(theRecentlyExportedMovie)); -// -// // clean up -// CloseComponent(myExporter); -// DisposeHandle(podExportDataRef); -// DisposeMovie(theRecentlyExportedMovie); -// -// // delete the original .mov file which we don't need anymore -// [[NSFileManager defaultManager] removeFileAtPath:[savePanel filename] handler:nil]; -// -// // open the .m4v in QuickTime Player -- just using openFile would result in iTunes starting up (not what I want to happen) -// [[NSWorkspace sharedWorkspace] openFile:(NSString *)newFileName withApplication:@"QuickTime Player"]; -// } -// -// } else if (!cancelExport) { -// -// // open the movie in the QuickTime Player -// // これもいらないね。 -// [[NSWorkspace sharedWorkspace] openFile:[savePanel filename]]; -// } - // dispose the original data reference DisposeHandle(myDataRef); - // got back to the beginning of the movie -// QTTime currentTime = { 0, movieDuration.timeScale, 0 }; -// -// [qtMovie setCurrentTime: currentTime]; -// MoviesTask([qtMovie quickTimeMovie], 0); // QTKit is not doing this automatically -// -// // render the frame -// [self updateCurrentFrame]; -// [self display]; - [_barSheet close]; [NSApp endSheet:_barSheet]; @@ -373,7 +303,7 @@ static OSErr QTMoovProcs_VideoTrackDataProc(void *theRefcon, MovieExportGetDataP therefore we resort to flipping the image by hand. */ int i = outputHeight; - while(--i > 0) { + while(--i >= 0) { memcpy(flippedContextPixels + ((outputHeight - i - 1) * contextRowBytes), contextPixels + (i * contextRowBytes), contextRowBytes); } diff --git a/Elis_Colors-Info.plist b/Elis_Colors-Info.plist index 5b3b5b8..a7bec17 100644 --- a/Elis_Colors-Info.plist +++ b/Elis_Colors-Info.plist @@ -23,10 +23,12 @@ LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} CFBundleVersion - 1 + alpha1 NSMainNibFile MainMenu NSPrincipalClass NSApplication + NSHumanReadableCopyright + © 2009, Yanagi Asakura diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib index 5c59219..eee265c 100644 --- a/English.lproj/MainMenu.xib +++ b/English.lproj/MainMenu.xib @@ -1,7 +1,7 @@ - 1060 + 1050 10B504 732 1038.2 @@ -21,8 +21,8 @@ YES - - + + YES @@ -100,14 +100,6 @@ - - - Change Small Window - - 2147483647 - - - YES @@ -320,6 +312,24 @@ + + + Change Movie Size + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + Page Setup... @@ -420,6 +430,25 @@ + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + Delete Layer @@ -437,40 +466,47 @@ - + - Select All - a - 1048576 + Change Speed + 2147483647 - + YES YES - 1048576 2147483647 - + - Change Movie Size + Goto Later Layer 2147483647 - + + + Goto Previous Layer + + 2147483647 + + + + YES YES + 1048576 2147483647 @@ -1370,7 +1406,7 @@ 271 2 - {{80, 219}, {1262, 911}} + {{80, 203}, {1281, 927}} 1954021376 Elis Colors NSWindow @@ -1385,11 +1421,11 @@ 303 - {{853, 376}, {118, 25}} + {{932, 376}, {109, 25}} YES - -2080244224 + 67239424 134217728 Play @@ -1398,7 +1434,7 @@ 1044 - -2038152961 + 914637055 163 @@ -1409,7 +1445,7 @@ 302 - {{18, 378}, {644, 21}} + {{18, 374}, {675, 21}} YES @@ -1430,7 +1466,7 @@ 303 - {{677, 381}, {182, 17}} + {{710, 383}, {182, 17}} YES @@ -1459,26 +1495,6 @@ - - - 303 - {{1007, 376}, {118, 25}} - - YES - - -2080244224 - 134217728 - Stop - - - -2038152961 - 163 - - - 400 - 75 - - 314 @@ -1497,7 +1513,7 @@ ElisTimeLineView - {{2, 2}, {1204, 331}} + {{2, 2}, {1223, 331}} @@ -1507,7 +1523,7 @@ 256 - {{1206, 2}, {15, 331}} + {{1225, 2}, {15, 331}} YES @@ -1518,19 +1534,18 @@ 256 - {{2, 333}, {1204, 15}} + {{2, 333}, {1223, 15}} - YES 1 _doScroller: - 0.99586435070306034 + 0.99917287014061207 - {{19, 20}, {1223, 350}} + {{19, 20}, {1242, 350}} - 243 + 115 @@ -1538,21 +1553,21 @@ 27 - {{685, 404}, {562, 493}} + {{706, 398}, {562, 515}} YES 2 - + 256 YES 289 - {{398, 1}, {129, 25}} + {{398, 17}, {129, 25}} YES @@ -1740,7 +1755,7 @@ NeXT TIFF v4.0 pasteboard type - {531, 410} + {531, 415} NO NO @@ -1756,7 +1771,7 @@ - {{1, 1}, {531, 410}} + {{1, 1}, {531, 415}} @@ -1766,7 +1781,7 @@ 256 - {{532, 1}, {15, 410}} + {{532, 1}, {15, 415}} _doScroller: @@ -1784,7 +1799,7 @@ 0.50602412223815918 - {{-3, 32}, {548, 412}} + {{-3, 49}, {548, 417}} 18 @@ -1794,7 +1809,8 @@ QSAAAEEgAABC8gAAQwgAAA - {{10, 33}, {542, 447}} + {{10, 33}, {542, 469}} + Media Browser @@ -1803,7 +1819,7 @@ Item 2 - + 256 YES @@ -1820,30 +1836,7 @@ 2322 - - YES - - YES - Apple HTML pasteboard type - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - Apple URL pasteboard type - CorePasteboardFlavorType 0x6D6F6F76 - NSColor pasteboard type - NSFilenamesPboardType - NSStringPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT RTFD pasteboard type - NeXT Rich Text Format v1.0 pasteboard type - NeXT TIFF v4.0 pasteboard type - NeXT font pasteboard type - NeXT ruler pasteboard type - WebURLsWithTitlesPboardType - public.url - - - {491, 14} + {491, 36} @@ -1920,12 +1913,12 @@ 6 - {493, 1e+07} - {223, 4} + {999, 1e+07} + {223, 0} - {{1, 1}, {491, 425}} + {{1, 1}, {491, 447}} @@ -1942,7 +1935,7 @@ 256 - {{492, 1}, {15, 425}} + {{492, 1}, {15, 447}} _doScroller: @@ -1960,7 +1953,7 @@ 0.94565218687057495 - {{17, 17}, {508, 427}} + {{17, 17}, {508, 449}} 18 @@ -1969,8 +1962,7 @@ - {{10, 33}, {542, 447}} - + {{10, 33}, {542, 469}} Text @@ -1996,7 +1988,7 @@ 256 - {546, 380} + {546, 399} YES @@ -2145,7 +2137,7 @@ 0 - {{1, 17}, {546, 380}} + {{1, 17}, {546, 399}} @@ -2188,7 +2180,7 @@ - {{-3, 46}, {548, 398}} + {{-3, 49}, {548, 417}} 562 @@ -2202,7 +2194,7 @@ 292 - {{17, 3}, {155, 25}} + {{17, 15}, {155, 25}} YES @@ -2222,7 +2214,7 @@ 289 - {{377, 3}, {148, 25}} + {{377, 15}, {148, 25}} YES @@ -2240,28 +2232,28 @@ - {{10, 33}, {542, 447}} + {{10, 33}, {542, 469}} Property - + 0 YES YES YES - + 1310 - {{19, 414}, {640, 480}} + {{19, 407}, {672, 500}} @@ -2269,8 +2261,48 @@ + + + 301 + {{884, 376}, {40, 25}} + + YES + + -2080244224 + 134217728 + << + + + -2038152961 + 163 + + + 400 + 75 + + + + + 301 + {{1049, 376}, {40, 25}} + + YES + + -2080244224 + 134217728 + >> + + + -2038152961 + 163 + + + 400 + 75 + + - {1262, 911} + {1281, 927} {{0, 0}, {1920, 1178}} @@ -2970,14 +3002,6 @@ 541 - - startPlay: - - - - 544 - - timeCodeField @@ -3002,14 +3026,6 @@ 554 - - stopPlay: - - - - 557 - - _timeLineController @@ -3226,14 +3242,6 @@ 636 - - changeToSmallWindiw: - - - - 646 - - _mainController @@ -3275,14 +3283,6 @@ - changeMovieSize: - - - - 662 - - - preference: @@ -3329,6 +3329,70 @@ 686 + + + changeMovieSpeed: + + + + 688 + + + + gotoNextKeyTime: + + + + 691 + + + + gotoPrevKeyTime: + + + + 693 + + + + gotoPrevKeyTime: + + + + 700 + + + + gotoNextKeyTime: + + + + 701 + + + + playStop: + + + + 702 + + + + _playstopButton + + + + 703 + + + + changeMovieSize: + + + + 705 + @@ -3425,6 +3489,8 @@ + + @@ -3507,7 +3573,6 @@ YES - @@ -3522,8 +3587,12 @@ - + + + + + @@ -3673,7 +3742,6 @@ - @@ -3889,13 +3957,14 @@ YES + + - - - - + + + @@ -4438,20 +4507,6 @@ - 555 - - - YES - - - - - - 556 - - - - 560 @@ -4507,9 +4562,9 @@ YES + - @@ -4527,8 +4582,8 @@ YES - + @@ -4706,26 +4761,11 @@ - 645 - - - - 654 - 660 - - - - - 661 - - - - 668 @@ -4769,6 +4809,69 @@ + + 687 + + + + + 689 + + + + + 690 + + + + + 692 + + + + + 696 + + + YES + + + + + + 697 + + + + + 698 + + + YES + + + + + + 699 + + + + + 704 + + + + + 706 + + + + + 707 + + + @@ -5003,8 +5106,6 @@ 549.IBPluginDependency 550.IBPluginDependency 551.IBPluginDependency - 555.IBPluginDependency - 556.IBPluginDependency 56.IBPluginDependency 56.ImportedFromIB2 560.IBPluginDependency @@ -5049,13 +5150,23 @@ 610.IBPluginDependency 611.IBPluginDependency 621.IBPluginDependency - 645.IBPluginDependency - 660.IBPluginDependency - 661.IBPluginDependency + 668.IBPluginDependency + 669.IBPluginDependency 679.IBPluginDependency 680.IBPluginDependency 681.IBPluginDependency 682.IBPluginDependency + 687.IBPluginDependency + 689.IBPluginDependency + 690.IBPluginDependency + 692.IBPluginDependency + 696.IBPluginDependency + 697.IBPluginDependency + 698.IBPluginDependency + 699.IBPluginDependency + 704.IBPluginDependency + 706.IBPluginDependency + 707.IBPluginDependency 72.IBPluginDependency 72.ImportedFromIB2 73.IBPluginDependency @@ -5141,7 +5252,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{258, 694}, {254, 333}} + {{1431, 668}, {254, 383}} com.apple.InterfaceBuilder.CocoaPlugin {{187, 434}, {243, 243}} @@ -5174,7 +5285,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{753, 217}, {238, 103}} + {{512, 644}, {238, 103}} com.apple.InterfaceBuilder.CocoaPlugin {{608, 612}, {241, 103}} @@ -5190,7 +5301,7 @@ com.apple.InterfaceBuilder.CocoaPlugin {{525, 802}, {197, 73}} - {{109, 1027}, {441, 20}} + {{1282, 1051}, {441, 20}} com.apple.InterfaceBuilder.CocoaPlugin {74, 862} @@ -5215,9 +5326,9 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{7, 219}, {1262, 911}} + {{7, 203}, {1281, 927}} com.apple.InterfaceBuilder.CocoaPlugin - {{7, 219}, {1262, 911}} + {{7, 203}, {1281, 927}} {{33, 99}, {480, 360}} @@ -5314,8 +5425,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -5325,7 +5434,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{121, 824}, {240, 203}} + {{121, 844}, {207, 183}} com.apple.InterfaceBuilder.CocoaPlugin {{23, 794}, {245, 183}} @@ -5374,6 +5483,16 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -5389,7 +5508,7 @@ com.apple.InterfaceBuilder.CocoaPlugin - {{216, 804}, {179, 223}} + {{216, 774}, {219, 253}} com.apple.InterfaceBuilder.CocoaPlugin {{145, 474}, {199, 203}} @@ -5417,7 +5536,7 @@ - 686 + 707 @@ -5430,10 +5549,15 @@ YES changeMovieSize: + changeMovieSpeed: changeToSmallWindiw: + cutLayerAtCurrentTime: deleteSelectLayer: + gotoNextKeyTime: + gotoPrevKeyTime: openProjectLoadDialog: openProjectSaveDialog: + playStop: preference: recordingStateChanged: redo: @@ -5464,6 +5588,11 @@ id id id + id + id + id + id + id @@ -5472,6 +5601,7 @@ YES _mainView _mainWindow + _playstopButton _tableController _textLayerField _timeLineController @@ -5483,6 +5613,7 @@ YES ElisMainView NSWindow + NSButton ElisPropertyTableController NSTextView ElisTimeLineController @@ -6571,7 +6702,7 @@ 0 com.apple.InterfaceBuilder.CocoaPlugin.macosx - + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 diff --git a/English.lproj/speed.xib b/English.lproj/speed.xib new file mode 100644 index 0000000..f5a7d77 --- /dev/null +++ b/English.lproj/speed.xib @@ -0,0 +1,1035 @@ + + + + 1060 + 10B504 + 732 + 1038.2 + 437.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 732 + + + YES + + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + + + + YES + + ElisMovieSpeedController + + + FirstResponder + + + NSApplication + + + 31 + 2 + {{230, 414}, {298, 127}} + -1535639552 + Window + NSPanel + + {1.79769e+308, 1.79769e+308} + + + 256 + + YES + + + 268 + {{17, 90}, {42, 17}} + + YES + + 68288064 + 272630784 + Speed + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{64, 85}, {96, 22}} + + YES + + -1804468671 + 272630784 + + + + YES + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 6 + System + textColor + + + + + + + 268 + {{165, 90}, {38, 17}} + + YES + + 68288064 + 272630784 + % + + + + + + + + + 268 + {{160, 18}, {118, 25}} + + YES + + -2080244224 + 134217728 + OK + + + -2038152961 + 163 + + + 400 + 75 + + + + + 268 + {{20, 18}, {118, 25}} + + YES + + -2080244224 + 134217728 + Cancel + + + -2038152961 + 163 + + + 400 + 75 + + + + {298, 127} + + + {{0, 0}, {1920, 1178}} + {1.79769e+308, 1.79769e+308} + + + + + YES + + + pushedOK: + + + + 13 + + + + pushedCancel: + + + + 14 + + + + speedField + + + + 15 + + + + _speedField + + + + 16 + + + + _sheet + + + + 17 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 1 + + + YES + + + + + + 2 + + + YES + + + + + + + + + + 3 + + + YES + + + + + + 4 + + + + + 5 + + + YES + + + + + + 6 + + + + + 7 + + + YES + + + + + + 8 + + + + + 9 + + + YES + + + + + + 10 + + + + + 11 + + + YES + + + + + + 12 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 1.IBWindowTemplateEditedContentRect + 1.NSWindowTemplate.visibleAtLaunch + 10.IBPluginDependency + 11.IBPluginDependency + 12.IBPluginDependency + 2.IBPluginDependency + 3.IBPluginDependency + 4.IBPluginDependency + 5.IBPluginDependency + 6.IBPluginDependency + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{420, 582}, {298, 127}} + com.apple.InterfaceBuilder.CocoaPlugin + {{420, 582}, {298, 127}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 17 + + + + YES + + ElisMovieSpeedController + NSObject + + YES + + YES + pushedCancel: + pushedOK: + + + YES + id + id + + + + YES + + YES + _sheet + _speedField + + + YES + NSWindow + NSTextField + + + + IBProjectSource + ElisMovieSpeedController.h + + + + + YES + + NSActionCell + NSCell + + IBFrameworkSource + AppKit.framework/Headers/NSActionCell.h + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSApplicationScripting.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSColorPanel.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSHelpManager.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSPageLayout.h + + + + NSApplication + + IBFrameworkSource + AppKit.framework/Headers/NSUserInterfaceItemSearching.h + + + + NSButton + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSButton.h + + + + NSButtonCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSButtonCell.h + + + + NSCell + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSCell.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSAccessibility.h + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDictionaryController.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSDragging.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontManager.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSFontPanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSKeyValueBinding.h + + + + NSObject + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSNibLoading.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSOutlineView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSPasteboard.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSSavePanel.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSToolbarItem.h + + + + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObjectScripting.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSPortCoder.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptClassDescription.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptObjectSpecifiers.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSScriptWhoseTests.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLDownload.h + + + + NSObject + + IBFrameworkSource + ImageKit.framework/Headers/IKImageBrowserView.h + + + + NSObject + + IBFrameworkSource + ImageKit.framework/Headers/IKSaveOptions.h + + + + NSObject + + IBFrameworkSource + ImageKit.framework/Headers/ImageKitDeprecated.h + + + + NSObject + + IBFrameworkSource + PDFKit.framework/Headers/PDFDocument.h + + + + NSObject + + IBFrameworkSource + PDFKit.framework/Headers/PDFView.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTCaptureDecompressedAudioOutput.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTCaptureDecompressedVideoOutput.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTCaptureFileOutput.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTCaptureVideoPreviewOutput.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTCaptureView.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTMovie.h + + + + NSObject + + IBFrameworkSource + QTKit.framework/Headers/QTMovieView.h + + + + NSObject + + IBFrameworkSource + QuartzComposer.framework/Headers/QCCompositionParameterView.h + + + + NSObject + + IBFrameworkSource + QuartzComposer.framework/Headers/QCCompositionPickerView.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CAAnimation.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CALayer.h + + + + NSObject + + IBFrameworkSource + QuartzCore.framework/Headers/CIImageProvider.h + + + + NSObject + + IBFrameworkSource + QuartzFilters.framework/Headers/QuartzFilterManager.h + + + + NSObject + + IBFrameworkSource + QuickLookUI.framework/Headers/QLPreviewPanel.h + + + + NSPanel + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSPanel.h + + + + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSInterfaceStyle.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSTextField + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTextField.h + + + + NSTextFieldCell + NSActionCell + + IBFrameworkSource + AppKit.framework/Headers/NSTextFieldCell.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSClipView.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSRulerView.h + + + + NSView + NSResponder + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSDrawer.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + NSWindow + + IBFrameworkSource + AppKit.framework/Headers/NSWindowScripting.h + + + + + 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../Elis Colors.xcodeproj + 3 + + diff --git a/README.rtf b/README.rtf new file mode 100644 index 0000000..5b35d59 --- /dev/null +++ b/README.rtf @@ -0,0 +1,62 @@ +{\rtf1\ansi\ansicpg932\cocoartf1038\cocoasubrtf110 +{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\margl1440\margr1440\vieww13560\viewh11580\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural + +\f0\b\fs36 \cf0 Elis Colors 0.1 \'82\'f0\'83\'43\'83\'93\'83\'58\'83\'67\'81\'5b\'83\'8b\'82\'b7\'82\'e9\'91\'4f\'82\'c9\'81\'41\'95\'4b\'82\'b8\'82\'b1\'82\'cc\'95\'b6\'8f\'91\'82\'f0\'82\'a8\'93\'c7\'82\'dd\'82\'ad\'82\'be\'82\'b3\'82\'a2\'81\'42 +\b0\fs24 \ +\ +\ + +\b\fs38 \'83\'43\'83\'93\'83\'58\'83\'67\'81\'5b\'83\'8b\'82\'b7\'82\'e9\'91\'4f\'82\'c9 +\b0\fs24 \ + +\fs28 Elis Colors 0.1 \'82\'cd\'83\'bf\'94\'c5\'82\'c5\'82\'b7\'81\'42\ +\'82\'b1\'82\'cc\'83\'6f\'81\'5b\'83\'57\'83\'87\'83\'93\'82\'cd\'88\'c0\'92\'e8\'93\'ae\'8d\'ec\'82\'b5\'82\'dc\'82\'b9\'82\'f1\'81\'42\'96\'a2\'8e\'c0\'91\'95\'82\'cc\'8b\'40\'94\'5c\'82\'c6\'83\'6f\'83\'4f\'82\'aa\'91\'bd\'90\'94\'91\'b6\'8d\'dd\'82\'b5\'82\'dc\'82\'b7\'81\'42\'83\'4e\'83\'89\'83\'62\'83\'56\'83\'85\'82\'b7\'82\'e9\'82\'b1\'82\'c6\'82\'e0\'82\'a0\'82\'e8\'82\'dc\'82\'b7\'81\'42\ +\'82\'b1\'82\'ea\'82\'e7\'82\'c9\'97\'af\'88\'d3\'82\'b5\'82\'c4\'8e\'c0\'8d\'73\'82\'b5\'82\'c4\'82\'ad\'82\'be\'82\'b3\'82\'a2\'81\'42 +\fs24 \ +\ + +\b\fs38 \'83\'56\'83\'58\'83\'65\'83\'80\'97\'76\'8c\'8f +\b0\fs24 \ + +\fs28 Core Image \'91\'ce\'89\'9eGPU\'82\'c6Intel CPU\'82\'f0\'93\'8b\'8d\'da\'82\'b5\'82\'bdMac +\fs24 \ +\ + +\b\fs38 \'8e\'67\'82\'a2\'95\'fb +\b0\fs24 \ +{\field{\*\fldinst{HYPERLINK "http://eliscolors.sourceforge.jp/tutorial.html"}}{\fldrslt +\fs28 http://eliscolors.sourceforge.jp/tutorial.html}} +\fs28 \'82\'f0\'8e\'51\'8f\'c6\'82\'b5\'82\'c4\'82\'ad\'82\'be\'82\'b3\'82\'a2\'81\'42\ +\ + +\b\fs38 \'8e\'67\'97\'70\'8a\'b4\'81\'45\'93\'ae\'8d\'ec\'95\'f1\'8d\'90 +\b0\fs24 \ + +\fs28 Elis Colors\'82\'cd\'83\'bf\'94\'c5\'82\'cc\'8e\'67\'97\'70\'8a\'b4\'81\'45\'93\'ae\'8d\'ec\'95\'f1\'8d\'90\'81\'45\'90\'56\'8b\'40\'94\'5c\'82\'cc\'97\'76\'96\'5d\'81\'45\'83\'6f\'83\'4f\'8f\'43\'90\'b3\'83\'70\'83\'62\'83\'60\'82\'f0\'95\'e5\'8f\'57\'82\'b5\'82\'c4\'82\'a2\'82\'dc\'82\'b7\'81\'42 +\fs24 \ + +\fs28 \'8f\'da\'8d\'d7\'82\'cd{\field{\*\fldinst{HYPERLINK "http://d.hatena.ne.jp/yanagia/20090929/1254227206"}}{\fldrslt http://d.hatena.ne.jp/yanagia/20090929/1254227206}}\'82\'f0\'8e\'51\'8f\'c6\'82\'b5\'82\'c4\'82\'ad\'82\'be\'82\'b3\'82\'a2\'81\'42 +\fs24 \ +\ + +\b\fs38 \'83\'89\'83\'43\'83\'5a\'83\'93\'83\'58 +\b0\fs24 \ + +\fs28 Elis Colors\'82\'cdzlib\'83\'89\'83\'43\'83\'5a\'83\'93\'83\'58\'82\'cc\'83\'49\'81\'5b\'83\'76\'83\'93\'83\'5c\'81\'5b\'83\'58\'81\'45\'83\'5c\'83\'74\'83\'67\'83\'45\'83\'46\'83\'41\'82\'c5\'82\'b7\'81\'42\ +\'82\'b1\'82\'cc\'83\'5c\'83\'74\'83\'67\'83\'45\'83\'46\'83\'41\'82\'cd\'96\'b3\'95\'db\'8f\'d8\'81\'45\'83\'6d\'83\'93\'83\'54\'83\'7c\'81\'5b\'83\'67\'82\'c5\'92\'f1\'8b\'9f\'82\'b3\'82\'ea\'82\'dc\'82\'b7\'81\'42 +\fs24 \ +\ + +\b\fs38 \'90\'a7\'8d\'ec\'8e\'d2\'8f\'ee\'95\'f1 +\b0\fs24 \ + +\fs28 \'90\'a7\'8d\'ec\'8e\'d2 : \'92\'a9\'91\'71 \'96\'f6 (id:yanagia)\ +\'83\'75\'83\'8d\'83\'4f : http://d.hatena.ne.jp/yanagia/\ +\ +\ +README.rtf version 0.1 (2009/09/29) +\fs24 \ +} \ No newline at end of file