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:
Zakk 2015-04-20 09:31:27 -04:00
parent 386d6587c2
commit d1956a4c4f
17 changed files with 1036 additions and 57 deletions

View file

@ -238,7 +238,6 @@
CFAbsoluteTime nowTime = CFAbsoluteTimeGetCurrent();
CFAbsoluteTime elapsed = nowTime - _lastFrame;
_lastFrame = nowTime;
_lastFrame = nowTime;

View file

@ -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;

View 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

View 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

View file

@ -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;

View file

@ -191,7 +191,6 @@ void VideoCompressorReceiveFrame(void *, void *, OSStatus , VTEncodeInfoFlags ,
@property (strong) NSString *transitionDirection;
-(IBAction)testAnimationStuff:(id)sender;
- (IBAction)stagingViewToggle:(id)sender;
-(void)showStagingView;

View file

@ -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;

View file

@ -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];

View 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

View 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

View 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>

View file

@ -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"/>

View file

@ -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>

View file

@ -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

View file

@ -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
{

View file

@ -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;

View file

@ -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
{