mirror of
https://github.com/zakk4223/CocoaSplit.git
synced 2026-05-15 14:15:50 -06:00
The glorious return of user defined filters on sources. Now with background, source-only and source-and-all-sublayers varieties.
This commit is contained in:
parent
386d6587c2
commit
d1956a4c4f
17 changed files with 1036 additions and 57 deletions
|
|
@ -238,7 +238,6 @@
|
|||
|
||||
|
||||
CFAbsoluteTime nowTime = CFAbsoluteTimeGetCurrent();
|
||||
CFAbsoluteTime elapsed = nowTime - _lastFrame;
|
||||
_lastFrame = nowTime;
|
||||
|
||||
_lastFrame = nowTime;
|
||||
|
|
|
|||
|
|
@ -123,6 +123,11 @@
|
|||
3481F30619B48C7C00CC76D8 /* SourceLayout+ScriptingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3481F30519B48C7C00CC76D8 /* SourceLayout+ScriptingAdditions.m */; };
|
||||
348AC06B19B406910064F02D /* SourceLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 348AC06A19B406910064F02D /* SourceLayout.m */; };
|
||||
348AC06C19B406910064F02D /* SourceLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 348AC06A19B406910064F02D /* SourceLayout.m */; };
|
||||
34938EE81AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 34938EE71AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m */; };
|
||||
34938EE91AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 34938EE71AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m */; };
|
||||
34938EED1AE4D24200F3B1CF /* CSFilterChooserWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34938EEB1AE4D24200F3B1CF /* CSFilterChooserWindowController.m */; };
|
||||
34938EEE1AE4D24200F3B1CF /* CSFilterChooserWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34938EEB1AE4D24200F3B1CF /* CSFilterChooserWindowController.m */; };
|
||||
34938EEF1AE4D24200F3B1CF /* CSFilterChooserWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34938EEC1AE4D24200F3B1CF /* CSFilterChooserWindowController.xib */; };
|
||||
349461451AAD73BC00F28883 /* TestView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349461441AAD73BC00F28883 /* TestView.xib */; };
|
||||
3494615A1AB4213B00F28883 /* CSAnimationRunner.py in Resources */ = {isa = PBXBuildFile; fileRef = 349461591AB4213B00F28883 /* CSAnimationRunner.py */; };
|
||||
3494615C1AB4279300F28883 /* setup.py in Resources */ = {isa = PBXBuildFile; fileRef = 3494615B1AB4279300F28883 /* setup.py */; };
|
||||
|
|
@ -552,6 +557,11 @@
|
|||
3481F30519B48C7C00CC76D8 /* SourceLayout+ScriptingAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "SourceLayout+ScriptingAdditions.m"; path = "ScriptingAddditions/SourceLayout+ScriptingAdditions.m"; sourceTree = "<group>"; };
|
||||
348AC06919B406910064F02D /* SourceLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceLayout.h; sourceTree = "<group>"; };
|
||||
348AC06A19B406910064F02D /* SourceLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SourceLayout.m; sourceTree = "<group>"; };
|
||||
34938EE61AE4A7E500F3B1CF /* CSCIFilterConfigProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSCIFilterConfigProxy.h; sourceTree = "<group>"; };
|
||||
34938EE71AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSCIFilterConfigProxy.m; sourceTree = "<group>"; };
|
||||
34938EEA1AE4D24200F3B1CF /* CSFilterChooserWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CSFilterChooserWindowController.h; path = Interface/CSFilterChooserWindowController.h; sourceTree = "<group>"; };
|
||||
34938EEB1AE4D24200F3B1CF /* CSFilterChooserWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CSFilterChooserWindowController.m; path = Interface/CSFilterChooserWindowController.m; sourceTree = "<group>"; };
|
||||
34938EEC1AE4D24200F3B1CF /* CSFilterChooserWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CSFilterChooserWindowController.xib; path = Interface/CSFilterChooserWindowController.xib; sourceTree = "<group>"; };
|
||||
349461441AAD73BC00F28883 /* TestView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TestView.xib; sourceTree = "<group>"; };
|
||||
349461571AB41DA000F28883 /* CSAnimationRunnerObj.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSAnimationRunnerObj.h; sourceTree = "<group>"; };
|
||||
349461591AB4213B00F28883 /* CSAnimationRunner.py */ = {isa = PBXFileReference; explicitFileType = text.script.python; fileEncoding = 4; path = CSAnimationRunner.py; sourceTree = "<group>"; };
|
||||
|
|
@ -833,6 +843,8 @@
|
|||
349461571AB41DA000F28883 /* CSAnimationRunnerObj.h */,
|
||||
349461661ABC57C100F28883 /* CSAnimationItem.h */,
|
||||
349461671ABC57C100F28883 /* CSAnimationItem.m */,
|
||||
34938EE61AE4A7E500F3B1CF /* CSCIFilterConfigProxy.h */,
|
||||
34938EE71AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m */,
|
||||
);
|
||||
path = CocoaSplit;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -928,6 +940,9 @@
|
|||
349461731AC49BB300F28883 /* CSAnimationChooserViewController.m */,
|
||||
349461741AC49BB300F28883 /* CSAnimationChooserViewController.xib */,
|
||||
3415CED21AE257DA002F11F5 /* CSTextCaptureBaseView.xib */,
|
||||
34938EEA1AE4D24200F3B1CF /* CSFilterChooserWindowController.h */,
|
||||
34938EEB1AE4D24200F3B1CF /* CSFilterChooserWindowController.m */,
|
||||
34938EEC1AE4D24200F3B1CF /* CSFilterChooserWindowController.xib */,
|
||||
);
|
||||
name = Interface;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -1275,7 +1290,6 @@
|
|||
3470F41719C8534B000A81C4 /* ShellScript */,
|
||||
349461611AB42FF000F28883 /* CopyFiles */,
|
||||
3460E5891AC766120080358E /* CopyFiles */,
|
||||
3460E58B1AC768840080358E /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
|
|
@ -1568,6 +1582,7 @@
|
|||
3494615C1AB4279300F28883 /* setup.py in Resources */,
|
||||
34D4351B198BE3B700266169 /* NewLayoutPanel.xib in Resources */,
|
||||
342B33B61980771200492CB7 /* line.vtsh in Resources */,
|
||||
34938EEF1AE4D24200F3B1CF /* CSFilterChooserWindowController.xib in Resources */,
|
||||
3435E39B188B93150015CC01 /* passthrough.vtsh in Resources */,
|
||||
34B5FCE119BF1C3F00F67D19 /* CreateLayoutViewController.xib in Resources */,
|
||||
3463F99E1AD0DC7100F3B5C8 /* movement.py in Resources */,
|
||||
|
|
@ -1602,19 +1617,6 @@
|
|||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
3460E58B1AC768840080358E /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "#rm \"${BUILT_PRODUCTS_DIR}\"/\"${CONTENTS_FOLDER_PATH}\"/PlugIns/Animations/*.pyc";
|
||||
};
|
||||
3470F41719C8534B000A81C4 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
|
|
@ -1662,6 +1664,7 @@
|
|||
34B5FCDF19BF1C3F00F67D19 /* CreateLayoutViewController.m in Sources */,
|
||||
349461751AC49BB300F28883 /* CSAnimationChooserViewController.m in Sources */,
|
||||
342346CF15F9F07E00C8C77E /* CSAbstractCaptureDevice.m in Sources */,
|
||||
34938EE81AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m in Sources */,
|
||||
34210B3E1606001200362FC8 /* OutputDestination.m in Sources */,
|
||||
345F8B391A15D850009A81E3 /* CAMultiAudioDefaultOutput.m in Sources */,
|
||||
3408235519BC677A00CD1F5F /* CSNotifications.m in Sources */,
|
||||
|
|
@ -1677,6 +1680,7 @@
|
|||
34576C7819AFCA1B007BAD90 /* CSPluginLoader.m in Sources */,
|
||||
34FDD6F21A215268009A7413 /* CSPluginServices.m in Sources */,
|
||||
34F5141316FD6E4F00BA894D /* AppleVTCompressor.m in Sources */,
|
||||
34938EED1AE4D24200F3B1CF /* CSFilterChooserWindowController.m in Sources */,
|
||||
34DF75581AA272F100DA9FDE /* LayoutRenderer.m in Sources */,
|
||||
348AC06B19B406910064F02D /* SourceLayout.m in Sources */,
|
||||
345F8B751A17A785009A81E3 /* CAMultiAudioMixer.m in Sources */,
|
||||
|
|
@ -1700,6 +1704,7 @@
|
|||
345F8B2E1A156E15009A81E3 /* CAMultiAudioDevice.m in Sources */,
|
||||
347277FE1A5A2758008801A9 /* CSIOSurfaceLayer.m in Sources */,
|
||||
345F8B261A14E6A0009A81E3 /* CAMultiAudioNode.m in Sources */,
|
||||
34938EEE1AE4D24200F3B1CF /* CSFilterChooserWindowController.m in Sources */,
|
||||
345F8B761A17A785009A81E3 /* CAMultiAudioMixer.m in Sources */,
|
||||
34D2D5781A547C35001004E5 /* CSTextCaptureViewControllerBase.m in Sources */,
|
||||
34AFC33419B19CD00007C07B /* SourceCache.m in Sources */,
|
||||
|
|
@ -1710,6 +1715,7 @@
|
|||
3431FFE219786502000965FE /* InputSource.m in Sources */,
|
||||
348AC06C19B406910064F02D /* SourceLayout.m in Sources */,
|
||||
3451A1D81712C5C400DF6A8B /* x264Compressor.m in Sources */,
|
||||
34938EE91AE4A7E500F3B1CF /* CSCIFilterConfigProxy.m in Sources */,
|
||||
345F8B3E1A15F3BD009A81E3 /* CAMultiAudioPCM.m in Sources */,
|
||||
34CFE4A518F1992A00092C6A /* AVFAudioChannel.m in Sources */,
|
||||
3451A1D91712C5C700DF6A8B /* AppleVTCompressor.m in Sources */,
|
||||
|
|
@ -1861,6 +1867,7 @@
|
|||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "";
|
||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
|
||||
|
|
@ -1872,6 +1879,8 @@
|
|||
);
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "CocoaSplit/CocoaSplit-Prefix.pch";
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||
HEADER_SEARCH_PATHS = /usr/local/include;
|
||||
INFOPLIST_FILE = "CocoaSplit/CocoaSplit-Info.plist";
|
||||
"LIBRARY_SEARCH_PATHS[arch=*]" = "";
|
||||
|
|
@ -1897,6 +1906,7 @@
|
|||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "";
|
||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Mac Developer";
|
||||
|
|
@ -1910,6 +1920,8 @@
|
|||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "CocoaSplit/CocoaSplit-Prefix.pch";
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = NO;
|
||||
HEADER_SEARCH_PATHS = /usr/local/include;
|
||||
INFOPLIST_FILE = "CocoaSplit/CocoaSplit-Info.plist";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
||||
|
|
|
|||
21
CocoaSplit/CSCIFilterConfigProxy.h
Normal file
21
CocoaSplit/CSCIFilterConfigProxy.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
//
|
||||
// CSCIFilterConfigProxy.h
|
||||
// CocoaSplit
|
||||
//
|
||||
// Created by Zakk on 4/19/15.
|
||||
// Copyright (c) 2015 Zakk. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
@interface CSCIFilterConfigProxy : NSObject
|
||||
|
||||
|
||||
@property (strong) CALayer *baseLayer;
|
||||
@property (strong) NSString *layerFilterName;
|
||||
@property (strong) NSMutableDictionary *baseDict;
|
||||
@property (strong) NSString *filterType;
|
||||
|
||||
|
||||
@end
|
||||
63
CocoaSplit/CSCIFilterConfigProxy.m
Normal file
63
CocoaSplit/CSCIFilterConfigProxy.m
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
//
|
||||
// CSCIFilterConfigProxy.m
|
||||
// CocoaSplit
|
||||
//
|
||||
// Created by Zakk on 4/19/15.
|
||||
// Copyright (c) 2015 Zakk. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CSCIFilterConfigProxy.h"
|
||||
|
||||
@implementation CSCIFilterConfigProxy
|
||||
|
||||
|
||||
|
||||
-(instancetype)init
|
||||
{
|
||||
if (self = [super init])
|
||||
{
|
||||
self.baseDict = [NSMutableDictionary dictionary];
|
||||
self.filterType = @"";
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath
|
||||
{
|
||||
|
||||
|
||||
[super setValue:value forKeyPath:keyPath];
|
||||
if ([keyPath hasPrefix:@"baseDict."] && self.layerFilterName && self.baseLayer)
|
||||
{
|
||||
|
||||
NSString *valueKey = [keyPath substringFromIndex:@"baseDict.".length];
|
||||
|
||||
|
||||
[self.baseLayer setValue:value forKeyPath:[NSString stringWithFormat:@"%@.%@.%@",self.filterType, self.layerFilterName, valueKey]];
|
||||
}
|
||||
}
|
||||
|
||||
-(id)valueForKeyPath:(NSString *)keyPath
|
||||
{
|
||||
id ret = [super valueForKeyPath:keyPath];
|
||||
|
||||
id layer_val = nil;
|
||||
|
||||
if ([keyPath hasPrefix:@"baseDict."] && self.layerFilterName && self.baseLayer)
|
||||
{
|
||||
NSString *valueKey = [keyPath substringFromIndex:@"baseDict.".length];
|
||||
layer_val = [self.baseLayer valueForKeyPath:[NSString stringWithFormat:@"%@.%@.%@", self.filterType,self.layerFilterName, valueKey]];
|
||||
}
|
||||
|
||||
|
||||
if (layer_val)
|
||||
{
|
||||
ret = layer_val;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -34,7 +34,6 @@
|
|||
@property (nonatomic, assign) CGFloat fakeHeight;
|
||||
|
||||
-(void)setSourceLayer:(CALayer *)sourceLayer withTransition:(CATransition *)transition;
|
||||
-(void)resizeSourceLayer:(CGRect)newFrame oldFrame:(CGRect)oldFrame;
|
||||
-(void)frameTick;
|
||||
-(void)transitionToLayer:(CALayer *)toLayer fromLayer:(CALayer *)fromLayer withTransition:(CATransition *)transition;
|
||||
-(void)transitionsDisabled;
|
||||
|
|
|
|||
|
|
@ -191,7 +191,6 @@ void VideoCompressorReceiveFrame(void *, void *, OSStatus , VTEncodeInfoFlags ,
|
|||
@property (strong) NSString *transitionDirection;
|
||||
|
||||
|
||||
-(IBAction)testAnimationStuff:(id)sender;
|
||||
|
||||
- (IBAction)stagingViewToggle:(id)sender;
|
||||
-(void)showStagingView;
|
||||
|
|
|
|||
|
|
@ -184,6 +184,16 @@ typedef enum resize_style_t {
|
|||
-(void)attachInput:(InputSource *)toAttach;
|
||||
-(void)resetConstraints;
|
||||
-(NSViewController *)sourceConfigurationView;
|
||||
-(void)addLayerFilter:(NSString *)filterName;
|
||||
-(void)addSourceFilter:(NSString *)filterName;
|
||||
-(void)addBackgroundFilter:(NSString *)filterName;
|
||||
-(void)deleteLayerFilter:(NSString *)filteruuid;
|
||||
-(void)deleteSourceFilter:(NSString *)filteruuid;
|
||||
-(void)deleteBackgroundFilter:(NSString *)filteruuid;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ static NSArray *_sourceTypes = nil;
|
|||
|
||||
[aCoder encodeObject:self.constraintMap forKey:@"constraintMap"];
|
||||
|
||||
[aCoder encodeObject:self.layer.filters forKey:@"layerFilters"];
|
||||
|
||||
if (_userBackground)
|
||||
{
|
||||
|
|
@ -373,10 +374,14 @@ static NSArray *_sourceTypes = nil;
|
|||
self.constraintMap = restoredConstraintMap;
|
||||
[self buildLayerConstraints];
|
||||
}
|
||||
|
||||
self.layer.filters = [aDecoder decodeObjectForKey:@"layerFilters"];
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
|
@ -499,7 +504,7 @@ static NSArray *_sourceTypes = nil;
|
|||
cFilter.name = @"Chromakey";
|
||||
cFilter.enabled = NO;
|
||||
|
||||
self.layer.filters = @[cFilter];
|
||||
self.layer.sourceLayer.filters = @[cFilter];
|
||||
|
||||
_multiTransition = [CATransition animation];
|
||||
_multiTransition.type = kCATransitionPush;
|
||||
|
|
@ -635,6 +640,104 @@ static NSArray *_sourceTypes = nil;
|
|||
}
|
||||
|
||||
|
||||
-(NSMutableArray *)newFilterArray:(NSArray *)filters withoutName:(NSString *)withoutName
|
||||
{
|
||||
NSMutableArray *ret = [NSMutableArray array];
|
||||
|
||||
for (CIFilter *filter in filters)
|
||||
{
|
||||
if ([filter.name isEqualToString:withoutName])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
[ret addObject:filter];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
-(void)deleteLayerFilter:(NSString *)filteruuid
|
||||
{
|
||||
self.layer.filters = [self newFilterArray:self.layer.filters withoutName:filteruuid];
|
||||
}
|
||||
-(void)deleteSourceFilter:(NSString *)filteruuid
|
||||
{
|
||||
self.layer.sourceLayer.filters = [self newFilterArray:self.layer.sourceLayer.filters withoutName:filteruuid];
|
||||
}
|
||||
|
||||
-(void)deleteBackgroundFilter:(NSString *)filteruuid
|
||||
{
|
||||
self.layer.backgroundFilters = [self newFilterArray:self.layer.backgroundFilters withoutName:filteruuid];
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(void)addLayerFilter:(NSString *)filterName
|
||||
{
|
||||
|
||||
CIFilter *newFilter = [CIFilter filterWithName:filterName];
|
||||
if (newFilter)
|
||||
{
|
||||
[newFilter setDefaults];
|
||||
CFUUIDRef tmpUUID = CFUUIDCreate(NULL);
|
||||
NSString *filterID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, tmpUUID);
|
||||
CFRelease(tmpUUID);
|
||||
newFilter.name = filterID;
|
||||
NSMutableArray *currentFilters = self.layer.filters.mutableCopy;
|
||||
if (!currentFilters)
|
||||
{
|
||||
currentFilters = [NSMutableArray array];
|
||||
}
|
||||
|
||||
[currentFilters addObject:newFilter];
|
||||
self.layer.filters = currentFilters;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)addSourceFilter:(NSString *)filterName
|
||||
{
|
||||
|
||||
CIFilter *newFilter = [CIFilter filterWithName:filterName];
|
||||
if (newFilter)
|
||||
{
|
||||
[newFilter setDefaults];
|
||||
CFUUIDRef tmpUUID = CFUUIDCreate(NULL);
|
||||
NSString *filterID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, tmpUUID);
|
||||
CFRelease(tmpUUID);
|
||||
newFilter.name = filterID;
|
||||
NSMutableArray *currentFilters = self.layer.sourceLayer.filters.mutableCopy;
|
||||
if (!currentFilters)
|
||||
{
|
||||
currentFilters = [NSMutableArray array];
|
||||
}
|
||||
|
||||
[currentFilters addObject:newFilter];
|
||||
self.layer.sourceLayer.filters = currentFilters;
|
||||
}
|
||||
}
|
||||
|
||||
-(void)addBackgroundFilter:(NSString *)filterName
|
||||
{
|
||||
|
||||
CIFilter *newFilter = [CIFilter filterWithName:filterName];
|
||||
if (newFilter)
|
||||
{
|
||||
[newFilter setDefaults];
|
||||
CFUUIDRef tmpUUID = CFUUIDCreate(NULL);
|
||||
NSString *filterID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, tmpUUID);
|
||||
CFRelease(tmpUUID);
|
||||
newFilter.name = filterID;
|
||||
NSMutableArray *currentFilters = self.layer.backgroundFilters.mutableCopy;
|
||||
if (!currentFilters)
|
||||
{
|
||||
currentFilters = [NSMutableArray array];
|
||||
}
|
||||
[currentFilters addObject:newFilter];
|
||||
self.layer.backgroundFilters = currentFilters;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)rebuildUserFilter
|
||||
{
|
||||
_filterGenerator = [[CIFilterGenerator alloc] init];
|
||||
|
|
|
|||
26
CocoaSplit/Interface/CSFilterChooserWindowController.h
Normal file
26
CocoaSplit/Interface/CSFilterChooserWindowController.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// CSFilterChooserWindowController.h
|
||||
// CocoaSplit
|
||||
//
|
||||
// Created by Zakk on 4/20/15.
|
||||
// Copyright (c) 2015 Zakk. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface CSFilterChooserWindowController : NSWindowController <NSTableViewDataSource, NSTableViewDelegate>
|
||||
{
|
||||
|
||||
NSArray *_filterCategories;
|
||||
NSMutableDictionary *_availableFilterMap;
|
||||
|
||||
NSString *_selectedCategory;
|
||||
|
||||
}
|
||||
|
||||
@property (weak) IBOutlet NSTableView *filterListTableView;
|
||||
@property (strong) NSString *selectedFilterName;
|
||||
|
||||
- (IBAction)modalButtonAction:(NSButton *)sender;
|
||||
+ (NSString *)run;
|
||||
@end
|
||||
131
CocoaSplit/Interface/CSFilterChooserWindowController.m
Normal file
131
CocoaSplit/Interface/CSFilterChooserWindowController.m
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
//
|
||||
// CSFilterChooserWindowController.m
|
||||
// CocoaSplit
|
||||
//
|
||||
// Created by Zakk on 4/20/15.
|
||||
// Copyright (c) 2015 Zakk. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CSFilterChooserWindowController.h"
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
|
||||
@interface CSFilterChooserWindowController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation CSFilterChooserWindowController
|
||||
|
||||
- (void)windowDidLoad {
|
||||
|
||||
_filterCategories = @[kCICategoryDistortionEffect,
|
||||
kCICategoryGeometryAdjustment,
|
||||
kCICategoryCompositeOperation,
|
||||
kCICategoryHalftoneEffect,
|
||||
kCICategoryColorAdjustment,
|
||||
kCICategoryColorEffect,
|
||||
kCICategoryTransition,
|
||||
kCICategoryTileEffect,
|
||||
kCICategoryGenerator,
|
||||
kCICategoryReduction,
|
||||
kCICategoryGradient,
|
||||
kCICategoryStylize,
|
||||
kCICategorySharpen,
|
||||
kCICategoryBlur,
|
||||
kCICategoryVideo,
|
||||
kCICategoryStillImage,
|
||||
kCICategoryInterlaced,
|
||||
kCICategoryNonSquarePixels,
|
||||
kCICategoryHighDynamicRange,
|
||||
kCICategoryBuiltIn,
|
||||
];
|
||||
|
||||
_availableFilterMap = [NSMutableDictionary dictionary];
|
||||
|
||||
for (NSString *cat in _filterCategories)
|
||||
{
|
||||
[_availableFilterMap setObject:[CIFilter filterNamesInCategory:cat] forKey:cat];
|
||||
}
|
||||
|
||||
|
||||
|
||||
[super windowDidLoad];
|
||||
|
||||
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
|
||||
}
|
||||
|
||||
|
||||
-(void)tableViewSelectionDidChange:(NSNotification *)notification
|
||||
{
|
||||
|
||||
NSTableView *tableView = notification.object;
|
||||
|
||||
|
||||
|
||||
if (tableView.tag == 1)
|
||||
{
|
||||
_selectedCategory = [_filterCategories objectAtIndex:tableView.selectedRow];
|
||||
|
||||
[self.filterListTableView reloadData];
|
||||
[self.filterListTableView deselectAll:self];
|
||||
[self.filterListTableView noteNumberOfRowsChanged];
|
||||
self.selectedFilterName = nil;
|
||||
|
||||
} else if (tableView.tag == 2) {
|
||||
NSArray *filters = _availableFilterMap[_selectedCategory];
|
||||
self.selectedFilterName = [filters objectAtIndex:tableView.selectedRow];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
|
||||
{
|
||||
if (tableView.tag == 1)
|
||||
{
|
||||
return _filterCategories.count;
|
||||
} else if (tableView.tag == 2) {
|
||||
if (_selectedCategory)
|
||||
{
|
||||
NSArray *filters = _availableFilterMap[_selectedCategory];
|
||||
return filters.count;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
-(id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
|
||||
{
|
||||
if (tableView.tag == 1)
|
||||
{
|
||||
NSString *filterCategory = [_filterCategories objectAtIndex:row];
|
||||
NSString *filterDesc = [CIFilter localizedNameForCategory:filterCategory];
|
||||
return filterDesc;
|
||||
} else if (tableView.tag == 2) {
|
||||
if (_selectedCategory)
|
||||
{
|
||||
NSArray *filters = _availableFilterMap[_selectedCategory];
|
||||
return [filters objectAtIndex:row];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)modalButtonAction:(NSButton *)sender
|
||||
{
|
||||
[NSApp stopModalWithCode:sender.tag];
|
||||
[self.window close];
|
||||
}
|
||||
|
||||
+(NSString *)run
|
||||
{
|
||||
CSFilterChooserWindowController *windowController = [[CSFilterChooserWindowController alloc] initWithWindowNibName:@"CSFilterChooserWindowController"];
|
||||
|
||||
[NSApp runModalForWindow:windowController.window];
|
||||
return windowController.selectedFilterName;
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
147
CocoaSplit/Interface/CSFilterChooserWindowController.xib
Normal file
147
CocoaSplit/Interface/CSFilterChooserWindowController.xib
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14D136" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6250"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="CSFilterChooserWindowController">
|
||||
<connections>
|
||||
<outlet property="filterListTableView" destination="LGr-kt-ZwE" id="X60-Ux-Tey"/>
|
||||
<outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<window title="Effects" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||
<windowStyleMask key="styleMask" titled="YES"/>
|
||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||
<rect key="contentRect" x="196" y="240" width="396" height="402"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1057"/>
|
||||
<view key="contentView" id="se5-gp-TjO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="396" height="402"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kug-yP-O7l">
|
||||
<rect key="frame" x="20" y="106" width="140" height="276"/>
|
||||
<clipView key="contentView" ambiguous="YES" misplaced="YES" id="hnI-Yx-VUw">
|
||||
<rect key="frame" x="1" y="17" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" tag="1" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" id="a55-Zt-ZNp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="235" minWidth="40" maxWidth="1000" id="SoA-pF-QJz">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" controlSize="small" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="TzF-T1-TLX">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="ox5-Tb-A3W"/>
|
||||
<outlet property="delegate" destination="-2" id="P6j-Z1-hn3"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="fAB-gl-2kE">
|
||||
<rect key="frame" x="1" y="95.375362634658813" width="185.86286926269531" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="5aM-US-3M9">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="IfP-xv-PqR">
|
||||
<rect key="frame" x="301" y="14" width="80" height="28"/>
|
||||
<buttonCell key="cell" type="push" title="Add" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="W1K-yK-VvJ">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
DQ
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="modalButtonAction:" target="-2" id="m52-W9-wNw"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MkW-5B-McJ">
|
||||
<rect key="frame" x="223" y="14" width="80" height="28"/>
|
||||
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="TZN-qb-twK">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<string key="keyEquivalent" base64-UTF8="YES">
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="modalButtonAction:" target="-2" id="Qxj-PX-nzk"/>
|
||||
</connections>
|
||||
</button>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="64b-sb-awW">
|
||||
<rect key="frame" x="186" y="57" width="190" height="325"/>
|
||||
<clipView key="contentView" ambiguous="YES" misplaced="YES" id="903-pW-DUm">
|
||||
<rect key="frame" x="1" y="17" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" tag="2" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" id="LGr-kt-ZwE">
|
||||
<rect key="frame" x="0.0" y="0.0" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="185" minWidth="40" maxWidth="1000" id="VHJ-uN-327">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" controlSize="small" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="fqt-3C-YCx">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="-2" id="VxP-Sv-BiB"/>
|
||||
<outlet property="delegate" destination="-2" id="QzA-sk-HeD"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="nFY-40-uoP">
|
||||
<rect key="frame" x="1" y="95.375362634658813" width="185.86286926269531" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="c0z-bv-SPY">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
</subviews>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="525" y="335"/>
|
||||
</window>
|
||||
</objects>
|
||||
</document>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14C109" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14D136" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6250"/>
|
||||
|
|
|
|||
|
|
@ -7,10 +7,12 @@
|
|||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="InputPopupControllerViewController">
|
||||
<connections>
|
||||
<outlet property="currentEffectsController" destination="0iu-Bs-KXZ" id="Lnj-mi-xjC"/>
|
||||
<outlet property="backgroundFilterTableView" destination="ZZX-56-hhh" id="wc7-gO-Jq8"/>
|
||||
<outlet property="inputobjctrl" destination="Gdf-y2-DdF" id="FT4-F8-KVU"/>
|
||||
<outlet property="layerFilterTableView" destination="wpv-kO-rYh" id="zN2-bJ-xPn"/>
|
||||
<outlet property="multiSourceController" destination="4mF-fx-iLB" id="U30-Tg-7IY"/>
|
||||
<outlet property="sourceConfigView" destination="SXE-81-50C" id="H3V-Fe-FOV"/>
|
||||
<outlet property="sourceFilterTableView" destination="6Qb-U3-oNN" id="9bp-z5-OIG"/>
|
||||
<outlet property="view" destination="E8C-YL-16h" id="aVS-B5-cxz"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
|
|
@ -299,7 +301,7 @@
|
|||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.doChromaKey" id="D12-uR-fMY"/>
|
||||
<binding destination="Gdf-y2-DdF" name="value" keyPath="selection.doChromaKey" id="45z-5t-gwT"/>
|
||||
</connections>
|
||||
</button>
|
||||
<colorWell fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="W3y-sm-iex">
|
||||
|
|
@ -1529,11 +1531,278 @@
|
|||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
<tabViewItem label="Filters" identifier="" id="JmN-mm-bOH">
|
||||
<view key="view" id="mGg-wf-d04">
|
||||
<rect key="frame" x="10" y="25" width="639" height="428"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YNe-00-NH5">
|
||||
<rect key="frame" x="17" y="94" width="154" height="303"/>
|
||||
<clipView key="contentView" ambiguous="YES" misplaced="YES" id="ybc-TU-tvz">
|
||||
<rect key="frame" x="1" y="17" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" id="ZZX-56-hhh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="149" minWidth="40" maxWidth="1000" id="CeB-OZ-GbQ">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="ZFz-T8-lQJ">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<connections>
|
||||
<binding destination="Yz8-ps-On7" name="value" keyPath="arrangedObjects.attributes.CIAttributeFilterDisplayName" id="cI9-6Y-uEv"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="P5g-cX-6xL"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="hDd-qu-SzF">
|
||||
<rect key="frame" x="1" y="106.2211417555809" width="209.79838180541992" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="BhE-XV-WYy">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="yBn-Om-RVE">
|
||||
<rect key="frame" x="12" y="62" width="84" height="28"/>
|
||||
<buttonCell key="cell" type="push" title="Configure" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="unH-xy-hvz">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="configureFilter:" target="-2" id="LD9-Kt-Uar"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.backgroundTableHasSelection" id="gFE-tm-0oM"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button fixedFrame="YES" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="DSg-sC-g0C">
|
||||
<rect key="frame" x="127" y="65" width="21" height="23"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSAddTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="CvJ-ju-AZY">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="addFilterAction:" target="-2" id="Pea-DF-pA7"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rxd-ut-78O">
|
||||
<rect key="frame" x="15" y="405" width="68" height="14"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Background" id="sUN-i0-qRa">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HgE-Cn-JvK">
|
||||
<rect key="frame" x="242" y="94" width="154" height="303"/>
|
||||
<clipView key="contentView" ambiguous="YES" misplaced="YES" id="fV8-R2-mdo">
|
||||
<rect key="frame" x="1" y="17" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" id="6Qb-U3-oNN">
|
||||
<rect key="frame" x="0.0" y="0.0" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="149" minWidth="40" maxWidth="1000" id="YSz-IO-DMu">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="hti-3J-Tqs">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<connections>
|
||||
<binding destination="ibU-gN-0Cl" name="value" keyPath="arrangedObjects.attributes.CIAttributeFilterDisplayName" id="DUb-Jj-JrB"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<binding destination="ibU-gN-0Cl" name="content" keyPath="arrangedObjects" id="iZc-NR-YdK"/>
|
||||
<outlet property="delegate" destination="-2" id="tp4-UZ-luc"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="fDq-ga-jca">
|
||||
<rect key="frame" x="1" y="106.2211417555809" width="209.79838180541992" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="35V-X6-ruX">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="ZE7-vz-Q7M">
|
||||
<rect key="frame" x="237" y="62" width="84" height="28"/>
|
||||
<buttonCell key="cell" type="push" title="Configure" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="fhb-Gl-KyQ">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="configureFilter:" target="-2" id="Qcj-0h-oBL"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.sourceTableHasSelection" id="IeR-Hw-VMb"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zej-sk-OK4">
|
||||
<rect key="frame" x="240" y="405" width="42" height="14"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Source" id="uf0-iJ-R2J">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h4r-YU-1Ny">
|
||||
<rect key="frame" x="468" y="94" width="154" height="303"/>
|
||||
<clipView key="contentView" ambiguous="YES" misplaced="YES" id="re5-ba-iDr">
|
||||
<rect key="frame" x="1" y="17" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" columnReordering="NO" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" id="wpv-kO-rYh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="238" height="117"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
|
||||
<tableColumns>
|
||||
<tableColumn width="149" minWidth="40" maxWidth="1000" id="no9-9t-uSM">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
|
||||
</tableHeaderCell>
|
||||
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="i81-3h-S0g">
|
||||
<font key="font" metaFont="system"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<connections>
|
||||
<binding destination="0gX-BS-obA" name="value" keyPath="arrangedObjects.attributes.CIAttributeFilterDisplayName" id="hY9-IO-NzV"/>
|
||||
</connections>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-2" id="iRY-aw-GgU"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</clipView>
|
||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="Rp5-D9-W6t">
|
||||
<rect key="frame" x="1" y="106.2211417555809" width="209.79838180541992" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="gwK-HP-8js">
|
||||
<rect key="frame" x="224" y="17" width="15" height="102"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<button verticalHuggingPriority="750" fixedFrame="YES" tag="3" translatesAutoresizingMaskIntoConstraints="NO" id="doD-uG-jNT">
|
||||
<rect key="frame" x="463" y="62" width="84" height="28"/>
|
||||
<buttonCell key="cell" type="push" title="Configure" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="b0l-Uq-DYC">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="configureFilter:" target="-2" id="Wsf-rv-ed4"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.layerTableHasSelection" id="b3b-Gk-URo"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="SpP-Ed-reh">
|
||||
<rect key="frame" x="466" y="405" width="31" height="14"/>
|
||||
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Input" id="RRn-tL-Gja">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button fixedFrame="YES" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="xwb-Il-zfO">
|
||||
<rect key="frame" x="152" y="65" width="21" height="23"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSRemoveTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Iyw-aU-qTT">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="removeFilter:" target="-2" id="b5c-tE-ApD"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.backgroundTableHasSelection" id="6ny-Hk-QLH"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button fixedFrame="YES" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="6u5-YV-Twa">
|
||||
<rect key="frame" x="352" y="65" width="21" height="23"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSAddTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="mg1-Tu-2rh">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="addFilterAction:" target="-2" id="cyL-ZL-Uxp"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button fixedFrame="YES" tag="2" translatesAutoresizingMaskIntoConstraints="NO" id="nKy-vH-Kkl">
|
||||
<rect key="frame" x="377" y="65" width="21" height="23"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSRemoveTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="DYI-dB-FE1">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="removeFilter:" target="-2" id="pyU-Pv-9vP"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.sourceTableHasSelection" id="tg6-r6-8lC"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button fixedFrame="YES" tag="3" translatesAutoresizingMaskIntoConstraints="NO" id="0tM-Tq-Sta">
|
||||
<rect key="frame" x="578" y="65" width="21" height="23"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSAddTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="SvM-dd-GJl">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="addFilterAction:" target="-2" id="MLx-wI-JV0"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button fixedFrame="YES" tag="3" translatesAutoresizingMaskIntoConstraints="NO" id="dyM-bz-LIy">
|
||||
<rect key="frame" x="603" y="65" width="21" height="23"/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="NSRemoveTemplate" imagePosition="only" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KuN-5n-eRv">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="removeFilter:" target="-2" id="XhE-Jo-LBm"/>
|
||||
<binding destination="-2" name="enabled" keyPath="self.layerTableHasSelection" id="Ttb-Xe-y4y"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
</view>
|
||||
</tabViewItem>
|
||||
</tabViewItems>
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="selectedLabel" keyPath="selection.settingsTab" id="hiM-bU-1lm"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="600.5" y="241.5"/>
|
||||
<point key="canvasLocation" x="654.5" y="152.5"/>
|
||||
</tabView>
|
||||
<objectController id="Gdf-y2-DdF" userLabel="InputSourceController">
|
||||
<connections>
|
||||
|
|
@ -1559,25 +1828,30 @@
|
|||
<binding destination="Gdf-y2-DdF" name="contentArray" keyPath="selection.availableEffectNames" id="Vyp-C1-1sw"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<arrayController id="0iu-Bs-KXZ" userLabel="currentEffectsController">
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="contentArray" keyPath="selection.currentEffects" id="s2y-EH-7fu"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<arrayController id="HSK-q7-X9q" userLabel="movieQueueController">
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="contentArray" keyPath="selection.videoInput.movieQueue" id="RJz-BT-03t">
|
||||
<dictionary key="options">
|
||||
<bool key="NSRaisesForNotApplicableKeys" value="NO"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<dictionaryController objectClassName="_NSControllerKeyValuePair" id="5ZX-ve-K4l" userLabel="constraintMapController">
|
||||
<connections>
|
||||
<binding destination="-2" name="sortDescriptors" keyPath="self.constraintSortDescriptors" id="KZP-ka-QrM"/>
|
||||
<binding destination="-2" name="contentDictionary" keyPath="self.inputConstraintMap" id="xJ8-YG-5zx"/>
|
||||
</connections>
|
||||
</dictionaryController>
|
||||
<arrayController id="ibU-gN-0Cl" userLabel="sourceLayerFiltersController">
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="contentArray" keyPath="selection.layer.sourceLayer.filters" id="xVj-af-fBp"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<arrayController id="0gX-BS-obA" userLabel="layerFiltersController">
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="contentArray" keyPath="selection.layer.filters" id="fOV-is-dce"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<arrayController id="Yz8-ps-On7" userLabel="backgroundFiltersController">
|
||||
<connections>
|
||||
<binding destination="Gdf-y2-DdF" name="contentArray" keyPath="selection.layer.backgroundFilters" id="BqP-Zc-k7f"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="NSAddTemplate" width="11" height="11"/>
|
||||
<image name="NSRemoveTemplate" width="11" height="11"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
|||
|
|
@ -17,10 +17,6 @@
|
|||
@class SourceLayout;
|
||||
//@class InputSource;
|
||||
|
||||
static CVReturn displayLinkRender(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime,
|
||||
CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext);
|
||||
|
||||
|
||||
#define SNAP_THRESHOLD 10.0f
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1284,20 +1284,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
static CVReturn displayLinkRender(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime,
|
||||
CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
|
||||
{
|
||||
|
||||
|
||||
|
||||
PreviewView *myself;
|
||||
|
||||
myself = (__bridge PreviewView *)displayLinkContext;
|
||||
|
||||
[myself cvrender];
|
||||
return kCVReturnSuccess;
|
||||
}
|
||||
|
||||
- (void) drawPixelBuffer:(CVImageBufferRef)cImageBuf
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
@class InputSource;
|
||||
|
||||
@interface InputPopupControllerViewController : NSViewController <NSPopoverDelegate, NSWindowDelegate>
|
||||
@interface InputPopupControllerViewController : NSViewController <NSPopoverDelegate, NSWindowDelegate, NSTableViewDelegate>
|
||||
|
||||
@property (strong) IBOutlet NSWindow *popupWIndow;
|
||||
|
||||
|
|
@ -24,14 +24,27 @@
|
|||
@property (strong) NSArray *constraintSortDescriptors;
|
||||
|
||||
@property (assign) NSString *selectedVideoType;
|
||||
@property (weak) IBOutlet NSTableView *sourceFilterTableView;
|
||||
@property (weak) IBOutlet NSTableView *backgroundFilterTableView;
|
||||
@property (weak) IBOutlet NSTableView *layerFilterTableView;
|
||||
|
||||
@property (assign) bool sourceTableHasSelection;
|
||||
@property (assign) bool backgroundTableHasSelection;
|
||||
@property (assign) bool layerTableHasSelection;
|
||||
|
||||
- (IBAction)configureFilter:(NSButton *)sender;
|
||||
|
||||
- (IBAction)resetConstraints:(id)sender;
|
||||
|
||||
- (IBAction)removeFilter:(NSButton *)sender;
|
||||
|
||||
|
||||
|
||||
- (IBAction)deleteMultiSource:(id)sender;
|
||||
-(void)openTransitionFilterPanel:(CIFilter *)forFilter;
|
||||
-(void)openUserFilterPanel:(CIFilter *)forFilter;
|
||||
|
||||
- (IBAction)addFilterAction:(NSButton *)sender;
|
||||
|
||||
@property (weak) IBOutlet NSArrayController *multiSourceController;
|
||||
@property (weak) IBOutlet NSArrayController *currentEffectsController;
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
#import "InputPopupControllerViewController.h"
|
||||
#import "InputSource.h"
|
||||
#import "CSCIFilterConfigProxy.h"
|
||||
#import "CSFilterChooserWindowController.h"
|
||||
|
||||
@interface InputPopupControllerViewController ()
|
||||
|
||||
|
|
@ -69,6 +71,58 @@
|
|||
return self.inputSource.selectedVideoType;
|
||||
}
|
||||
|
||||
- (IBAction)configureFilter:(NSButton *)sender
|
||||
{
|
||||
CIFilter *selectedFilter;
|
||||
CALayer *useLayer = nil;
|
||||
|
||||
NSString *filterType = @"filters";
|
||||
|
||||
if (sender.tag == 1)
|
||||
{
|
||||
selectedFilter = [self.inputSource.layer.backgroundFilters objectAtIndex:self.backgroundFilterTableView.selectedRow];
|
||||
useLayer = self.inputSource.layer;
|
||||
filterType = @"backgroundFilters";
|
||||
} else if (sender.tag == 2) {
|
||||
|
||||
selectedFilter = [self.inputSource.layer.sourceLayer.filters objectAtIndex:self.sourceFilterTableView.selectedRow];
|
||||
useLayer = self.inputSource.layer.sourceLayer;
|
||||
} else if (sender.tag == 3) {
|
||||
selectedFilter = [self.inputSource.layer.filters objectAtIndex:self.layerFilterTableView.selectedRow];
|
||||
useLayer = self.inputSource.layer;
|
||||
}
|
||||
|
||||
if (selectedFilter)
|
||||
{
|
||||
[self openUserFilterPanel:selectedFilter forLayer:useLayer withType:filterType];
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)removeFilter:(NSButton *)sender
|
||||
{
|
||||
CIFilter *selectedFilter;
|
||||
|
||||
|
||||
if (sender.tag == 1)
|
||||
{
|
||||
selectedFilter = [self.inputSource.layer.backgroundFilters objectAtIndex:self.backgroundFilterTableView.selectedRow];
|
||||
[self.inputSource deleteBackgroundFilter:selectedFilter.name];
|
||||
|
||||
} else if (sender.tag == 2) {
|
||||
|
||||
selectedFilter = [self.inputSource.layer.sourceLayer.filters objectAtIndex:self.sourceFilterTableView.selectedRow];
|
||||
[self.inputSource deleteSourceFilter:selectedFilter.name];
|
||||
|
||||
} else if (sender.tag == 3) {
|
||||
selectedFilter = [self.inputSource.layer.filters objectAtIndex:self.layerFilterTableView.selectedRow];
|
||||
[self.inputSource deleteLayerFilter:selectedFilter.name];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)setSelectedVideoType:(NSString *)selectedVideoType
|
||||
{
|
||||
|
|
@ -83,7 +137,6 @@
|
|||
NSViewController *sourceViewController = [self.inputSource sourceConfigurationView];
|
||||
|
||||
|
||||
|
||||
NSView *configView = sourceViewController.view;
|
||||
self.view.hidden = NO;
|
||||
|
||||
|
|
@ -143,15 +196,118 @@
|
|||
}
|
||||
|
||||
|
||||
-(void)openUserFilterPanel:(CIFilter *)forFilter
|
||||
|
||||
-(NSString *)bindKeyForAffineTransform:(NSObject *)transform withProxy:(CSCIFilterConfigProxy *)withProxy
|
||||
{
|
||||
NSString *baseBinding = nil;
|
||||
|
||||
for (NSString *bindkey in transform.exposedBindings)
|
||||
{
|
||||
if ([bindkey isEqualToString:@"affineTransform"])
|
||||
{
|
||||
NSDictionary *bindInfo = [transform infoForBinding:bindkey];
|
||||
NSString *bindpath = bindInfo[NSObservedKeyPathKey];
|
||||
if (bindpath && [bindpath hasPrefix:@"selection."])
|
||||
{
|
||||
baseBinding = [bindpath substringFromIndex:@"selection.".length];
|
||||
[transform unbind:bindkey];
|
||||
[transform bind:bindkey toObject:withProxy withKeyPath:[NSString stringWithFormat:@"baseDict.%@",baseBinding] options:bindInfo[NSOptionsKey]];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return baseBinding;
|
||||
}
|
||||
-(NSString *)bindKeyForVector:(NSObject *)vector withProxy:(CSCIFilterConfigProxy *)withProxy
|
||||
{
|
||||
NSString *baseBinding = nil;
|
||||
|
||||
for (NSString *bindkey in vector.exposedBindings)
|
||||
{
|
||||
if ([bindkey isEqualToString:@"vector"])
|
||||
{
|
||||
NSDictionary *bindInfo = [vector infoForBinding:bindkey];
|
||||
NSString *bindpath = bindInfo[NSObservedKeyPathKey];
|
||||
if (bindpath && [bindpath hasPrefix:@"selection."])
|
||||
{
|
||||
baseBinding = [bindpath substringFromIndex:@"selection.".length];
|
||||
[vector unbind:bindkey];
|
||||
[vector bind:bindkey toObject:withProxy withKeyPath:[NSString stringWithFormat:@"baseDict.%@",baseBinding] options:bindInfo[NSOptionsKey]];
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return baseBinding;
|
||||
}
|
||||
|
||||
-(void)rebindViewControls:(NSView *)forView withProxy:(CSCIFilterConfigProxy *)withProxy
|
||||
{
|
||||
for (NSString *b in forView.exposedBindings)
|
||||
{
|
||||
|
||||
NSDictionary *bindingInfo = [forView infoForBinding:b];
|
||||
|
||||
|
||||
if (!bindingInfo)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
NSDictionary *bindingOptions = bindingInfo[NSOptionsKey];
|
||||
|
||||
NSString *bindPath = bindingInfo[NSObservedKeyPathKey];
|
||||
|
||||
NSObject *boundTo = bindingInfo[NSObservedObjectKey];
|
||||
|
||||
|
||||
NSString *baseBinding;
|
||||
|
||||
|
||||
if ([bindPath hasPrefix:@"selection."])
|
||||
{
|
||||
baseBinding = [bindPath substringFromIndex:@"selection.".length];
|
||||
[forView unbind:b];
|
||||
[forView bind:b toObject:withProxy withKeyPath:[NSString stringWithFormat:@"baseDict.%@",baseBinding] options:bindingOptions];
|
||||
|
||||
} else if ([boundTo.className isEqualToString:@"CIMutableVector"]) {
|
||||
[self bindKeyForVector:boundTo withProxy:withProxy];
|
||||
} else if ([boundTo.className isEqualToString:@"NSMutableAffineTransform"]) {
|
||||
[self bindKeyForAffineTransform:boundTo withProxy:withProxy];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for (NSView *subview in forView.subviews)
|
||||
{
|
||||
[self rebindViewControls:subview withProxy:withProxy];
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
-(void)openUserFilterPanel:(CIFilter *)forFilter forLayer:(CALayer *)forLayer withType:(NSString *)withType
|
||||
{
|
||||
if (!forFilter)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CSCIFilterConfigProxy *filterProxy = [[CSCIFilterConfigProxy alloc] init];
|
||||
|
||||
|
||||
filterProxy.baseLayer = forLayer;
|
||||
filterProxy.layerFilterName = forFilter.name;
|
||||
filterProxy.filterType = withType;
|
||||
|
||||
|
||||
IKFilterUIView *filterView = [forFilter viewForUIConfiguration:@{IKUISizeFlavor:IKUISizeMini} excludedKeys:@[kCIInputImageKey, kCIInputTargetImageKey, kCIInputTimeKey]];
|
||||
|
||||
|
||||
|
||||
[self rebindViewControls:filterView withProxy:filterProxy];
|
||||
|
||||
self.userFilterWindow = [[NSWindow alloc] init];
|
||||
|
||||
self.userFilterWindow.delegate = self;
|
||||
|
|
@ -164,6 +320,50 @@
|
|||
|
||||
}
|
||||
|
||||
- (IBAction)addFilterAction:(NSButton *)sender
|
||||
{
|
||||
NSString *filterName = [CSFilterChooserWindowController run];
|
||||
|
||||
if (sender.tag == 1)
|
||||
{
|
||||
[self.inputSource addBackgroundFilter:filterName];
|
||||
} else if (sender.tag == 2) {
|
||||
[self.inputSource addSourceFilter:filterName];
|
||||
} else if (sender.tag == 3) {
|
||||
[self.inputSource addLayerFilter:filterName];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-(void)tableViewSelectionDidChange:(NSNotification *)notification
|
||||
{
|
||||
NSTableView *tableView = notification.object;
|
||||
|
||||
if (tableView == self.backgroundFilterTableView)
|
||||
{
|
||||
if (tableView.selectedRow > -1)
|
||||
{
|
||||
self.backgroundTableHasSelection = YES;
|
||||
} else {
|
||||
self.backgroundTableHasSelection = NO;
|
||||
}
|
||||
} else if (tableView == self.sourceFilterTableView) {
|
||||
if (tableView.selectedRow > -1)
|
||||
{
|
||||
self.sourceTableHasSelection = YES;
|
||||
} else {
|
||||
self.sourceTableHasSelection = NO;
|
||||
}
|
||||
|
||||
} else if (tableView == self.layerFilterTableView) {
|
||||
if (tableView.selectedRow > -1)
|
||||
{
|
||||
self.layerTableHasSelection = YES;
|
||||
} else {
|
||||
self.layerTableHasSelection = NO;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)openTransitionFilterPanel:(CIFilter *)forFilter
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue