mirror of
https://github.com/zakk4223/CocoaSplit.git
synced 2026-05-15 14:15:50 -06:00
250 lines
7.4 KiB
Objective-C
250 lines
7.4 KiB
Objective-C
//
|
|
// InputPopupControllerViewController.m
|
|
// CocoaSplit
|
|
//
|
|
// Created by Zakk on 7/26/14.
|
|
// Copyright (c) 2014 Zakk. All rights reserved.
|
|
//
|
|
|
|
#import "InputPopupControllerViewController.h"
|
|
#import "InputSource.h"
|
|
#import "CSOverlayView.h"
|
|
|
|
@interface InputPopupControllerViewController ()
|
|
|
|
@end
|
|
|
|
@implementation InputPopupControllerViewController
|
|
|
|
|
|
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
|
{
|
|
|
|
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
|
if (self) {
|
|
// Initialization code here.
|
|
}
|
|
return self;
|
|
}
|
|
|
|
|
|
|
|
|
|
-(NSWindow *)detachableWindowForPopover:(NSPopover *)popover
|
|
{
|
|
//InputPopupControllerViewController *newViewController = [[InputPopupControllerViewController alloc] initWithNibName:@"InputPopupControllerViewController" bundle:nil];
|
|
|
|
//NSLog(@"IN DETACHED CREATE %p", newViewController);
|
|
|
|
self.popoverWindow = [[NSWindow alloc] init];
|
|
|
|
InputPopupControllerViewController *newViewController = self;
|
|
|
|
NSRect newFrame = [self.popoverWindow frameRectForContentRect:NSMakeRect(0.0f, 0.0f, newViewController.view.frame.size.width, newViewController.view.frame.size.height)];
|
|
//newViewController.myPopover = popover;
|
|
|
|
[self.popoverWindow setFrame:newFrame display:NO];
|
|
|
|
[self.popoverWindow setReleasedWhenClosed:NO];
|
|
|
|
self.popoverWindow.contentView = newViewController.view;
|
|
self.popoverWindow.delegate = self;
|
|
|
|
newViewController.transitionFilterWindow = self.transitionFilterWindow;
|
|
newViewController.InputController.content = self.InputController.content;
|
|
newViewController.multiSourceController.content = self.multiSourceController.content;
|
|
|
|
|
|
|
|
self.popoverWindow.title = [NSString stringWithFormat:@"CocoaSplit Input (%@)", [self.InputController.selection valueForKeyPath:@"name"]];
|
|
|
|
self.popoverWindow.styleMask = NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask;
|
|
return self.popoverWindow;
|
|
|
|
}
|
|
|
|
|
|
-(void)openUserFilterPanel:(CIFilter *)forFilter
|
|
{
|
|
if (!forFilter)
|
|
{
|
|
return;
|
|
}
|
|
|
|
IKFilterUIView *filterView = [forFilter viewForUIConfiguration:@{IKUISizeFlavor:IKUISizeMini} excludedKeys:@[kCIInputImageKey, kCIInputTargetImageKey, kCIInputTimeKey]];
|
|
|
|
self.userFilterWindow = [[NSWindow alloc] init];
|
|
|
|
self.userFilterWindow.delegate = self;
|
|
[self.userFilterWindow setContentSize:filterView.bounds.size];
|
|
[self.userFilterWindow.contentView addSubview:filterView];
|
|
self.userFilterWindow.styleMask = NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask;
|
|
[self.userFilterWindow setReleasedWhenClosed:NO];
|
|
|
|
[self.userFilterWindow makeKeyAndOrderFront:self.userFilterWindow];
|
|
|
|
}
|
|
|
|
|
|
-(void)openTransitionFilterPanel:(CIFilter *)forFilter
|
|
{
|
|
if (!forFilter)
|
|
{
|
|
return;
|
|
}
|
|
|
|
IKFilterUIView *filterView = [forFilter viewForUIConfiguration:@{IKUISizeFlavor:IKUISizeMini} excludedKeys:@[kCIInputImageKey, kCIInputTargetImageKey, kCIInputTimeKey]];
|
|
|
|
|
|
self.transitionFilterWindow = [[NSWindow alloc] init];
|
|
self.transitionFilterWindow.delegate = self;
|
|
[self.transitionFilterWindow setContentSize:filterView.bounds.size];
|
|
[self.transitionFilterWindow.contentView addSubview:filterView];
|
|
|
|
self.transitionFilterWindow.styleMask = NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask;
|
|
[self.transitionFilterWindow setReleasedWhenClosed:NO];
|
|
|
|
[self.transitionFilterWindow makeKeyAndOrderFront:self.transitionFilterWindow];
|
|
|
|
}
|
|
|
|
|
|
-(NSScreen *)findScreeenForDisplayID:(NSNumber *)displayID
|
|
{
|
|
|
|
NSArray *screens = [NSScreen screens];
|
|
|
|
for(NSScreen *screen in screens)
|
|
{
|
|
NSDictionary *screenDescr = [screen deviceDescription];
|
|
NSNumber *screenID = screenDescr[@"NSScreenNumber"];
|
|
if ([displayID isEqualToNumber:screenID])
|
|
{
|
|
return screen;
|
|
}
|
|
}
|
|
|
|
return nil;
|
|
}
|
|
|
|
|
|
-(void)openScreenCropWindow:(AbstractCaptureDevice *)captureDevice
|
|
{
|
|
|
|
NSScreen *cropScreen = [self findScreeenForDisplayID:captureDevice.captureDevice];
|
|
|
|
|
|
//self.screenCropWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(100.0f, 100.0f, 400, 400) styleMask:NSBorderlessWindowMask backing:NSBackingStoreRetained defer:NO];
|
|
|
|
|
|
//[self.screenCropWindow setContentView:oview];
|
|
|
|
|
|
|
|
[self.cropSelectionWindow setOpaque:NO];
|
|
[self.cropSelectionWindow setLevel:CGShieldingWindowLevel()];
|
|
//self.cropSelectionWindow.styleMask = NSBorderlessWindowMask;
|
|
|
|
[self.cropSelectionWindow setIgnoresMouseEvents:NO];
|
|
|
|
[self.cropSelectionWindow setBackgroundColor:[NSColor colorWithDeviceRed:0.0 green:0.0 blue:1.0 alpha:0.0]];
|
|
|
|
float screenX = NSMidX(cropScreen.frame) - self.cropSelectionWindow.frame.size.width/2;
|
|
float screenY = NSMidY(cropScreen.frame) - self.cropSelectionWindow.frame.size.height/2;
|
|
|
|
|
|
[self.cropSelectionWindow setFrameOrigin:NSMakePoint(screenX, screenY)];
|
|
[self.cropSelectionWindow orderFrontRegardless];
|
|
|
|
|
|
}
|
|
|
|
|
|
-(void)cropRegionSelected
|
|
{
|
|
if (!self.cropSelectionWindow)
|
|
{
|
|
return;
|
|
}
|
|
|
|
CSOverlayView *cropView = (CSOverlayView *)self.cropSelectionWindow.contentView;
|
|
NSScreen *onScreen = self.cropSelectionWindow.screen;
|
|
|
|
NSRect viewRect = cropView.bounds;
|
|
NSRect screenFrame = onScreen.frame;
|
|
|
|
|
|
|
|
NSRect windowRect = [cropView convertRect:viewRect fromView:cropView];
|
|
NSRect viewBounds = [self.cropSelectionWindow convertRectToScreen:windowRect];
|
|
|
|
|
|
|
|
|
|
|
|
//Clamp to screen bounds if we're outside of them
|
|
|
|
if (viewBounds.origin.x < screenFrame.origin.x)
|
|
{
|
|
viewBounds.origin.x = screenFrame.origin.x;
|
|
}
|
|
|
|
if (viewBounds.origin.y < screenFrame.origin.y)
|
|
{
|
|
viewBounds.origin.y = screenFrame.origin.y;
|
|
}
|
|
|
|
if ((viewBounds.origin.x+NSWidth(viewBounds)) > (screenFrame.origin.x + NSWidth(screenFrame)))
|
|
{
|
|
viewBounds.size.width = (screenFrame.origin.x+NSWidth(screenFrame))-viewBounds.origin.x;
|
|
}
|
|
|
|
if ((viewBounds.origin.y+NSHeight(viewBounds)) > (screenFrame.origin.y + NSHeight(screenFrame)))
|
|
{
|
|
viewBounds.size.height = (screenFrame.origin.y+NSHeight(screenFrame))-viewBounds.origin.y;
|
|
}
|
|
|
|
|
|
//adjust origin to screen relative point
|
|
viewBounds.origin.x = fabs(fabs(viewBounds.origin.x) - fabs(screenFrame.origin.x));
|
|
viewBounds.origin.y = fabs(fabs(viewBounds.origin.y) - fabs(screenFrame.origin.y) );
|
|
|
|
|
|
|
|
|
|
//adjust for CGDisplay's origin being top left
|
|
|
|
|
|
viewBounds.origin.y = -(viewBounds.origin.y - NSHeight(screenFrame)) - NSHeight(viewBounds);
|
|
|
|
|
|
|
|
id vidInput = self.InputController.selection;
|
|
|
|
|
|
|
|
|
|
[vidInput setValue:[NSNumber numberWithInt:(int)viewBounds.origin.x] forKeyPath:@"videoInput.x_origin"];
|
|
[vidInput setValue:[NSNumber numberWithInt:(int)viewBounds.origin.y] forKeyPath:@"videoInput.y_origin"];
|
|
|
|
[vidInput setValue:[NSNumber numberWithInt:(int)NSHeight(viewBounds)] forKeyPath:@"videoInput.region_height"];
|
|
[vidInput setValue:[NSNumber numberWithInt:(int)NSWidth(viewBounds)] forKeyPath:@"videoInput.region_width"];
|
|
|
|
|
|
|
|
[self.cropSelectionWindow close];
|
|
}
|
|
|
|
|
|
|
|
- (IBAction)deleteMultiSource:(id)sender
|
|
{
|
|
|
|
NSTableView *bTable = (NSTableView *)sender;
|
|
NSInteger deleteRow = [bTable clickedRow];
|
|
|
|
[self.multiSourceController removeObjectAtArrangedObjectIndex:deleteRow];
|
|
}
|
|
|
|
|
|
@end
|