macosx/main menu: allow custom crop and aspect ratio changes

Closes #19838
This commit is contained in:
Felix Paul Kühne 2019-08-28 17:05:18 +02:00
parent baf77ff56d
commit 89e4a7ad73
7 changed files with 300 additions and 1 deletions

View File

@ -137,6 +137,7 @@
7D903EAF224392B400917358 /* timespec_get.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D903EAE224392B400917358 /* timespec_get.c */; };
7D903EB6224394BE00917358 /* specific.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D903EB5224394BE00917358 /* specific.c */; };
7D903EB92243952100917358 /* threads.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D903EB82243952100917358 /* threads.c */; };
7D93D8FC2316C2DC001C0063 /* VLCCustomCropArWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D93D8FB2316C2DC001C0063 /* VLCCustomCropArWindowController.m */; };
7DB40D2A20CBCEB500F63173 /* VLCMainMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DB40D2920CBCEB500F63173 /* VLCMainMenu.m */; };
7DB40D2D20CBCEC200F63173 /* VLCStatusBarIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DB40D2B20CBCEC200F63173 /* VLCStatusBarIcon.m */; };
7DB7F1EC20CC036D00C2CAED /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DB7F1EB20CC036D00C2CAED /* AudioUnit.framework */; };
@ -527,6 +528,9 @@
7D903EAE224392B400917358 /* timespec_get.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = timespec_get.c; path = ../../../../compat/timespec_get.c; sourceTree = "<group>"; };
7D903EB5224394BE00917358 /* specific.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = specific.c; path = ../../../src/darwin/specific.c; sourceTree = "<group>"; };
7D903EB82243952100917358 /* threads.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = threads.c; path = ../../../../src/misc/threads.c; sourceTree = "<group>"; };
7D93D8F92316C142001C0063 /* VLCCustomCropARPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCCustomCropARPanel.xib; sourceTree = "<group>"; };
7D93D8FA2316C2DC001C0063 /* VLCCustomCropArWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCCustomCropArWindowController.h; sourceTree = "<group>"; };
7D93D8FB2316C2DC001C0063 /* VLCCustomCropArWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCCustomCropArWindowController.m; sourceTree = "<group>"; };
7DB40D2820CBCEB500F63173 /* VLCMainMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCMainMenu.h; sourceTree = "<group>"; };
7DB40D2920CBCEB500F63173 /* VLCMainMenu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCMainMenu.m; sourceTree = "<group>"; };
7DB40D2B20CBCEC200F63173 /* VLCStatusBarIcon.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCStatusBarIcon.m; sourceTree = "<group>"; };
@ -1105,6 +1109,8 @@
CC461F6D160078340022423C /* VLCTextfieldPanelController.m */,
1C7CB91A1D787E7600388902 /* VLCPopupPanelController.h */,
1C7CB91B1D787E7600388902 /* VLCPopupPanelController.m */,
7D93D8FA2316C2DC001C0063 /* VLCCustomCropArWindowController.h */,
7D93D8FB2316C2DC001C0063 /* VLCCustomCropArWindowController.m */,
);
path = dialogs;
sourceTree = "<group>";
@ -1540,6 +1546,7 @@
7DF14FBC2270CB1C0008ABE4 /* VLCMediaSourceDeviceCollectionViewItem.xib */,
6B82241A1E4D2A9000833BE1 /* VLCStatusBarIconMainMenu.xib */,
6B8224181E4D2A9000833BE1 /* VLCFullScreenPanel.xib */,
7D93D8F92316C142001C0063 /* VLCCustomCropARPanel.xib */,
6B8223FE1E4D2A8F00833BE1 /* About.xib */,
6B8223FF1E4D2A9000833BE1 /* AddonManager.xib */,
6B8224001E4D2A9000833BE1 /* AudioEffects.xib */,
@ -1707,6 +1714,7 @@
7DFBDCB7226CDFD600B700A5 /* VLCImageView.m in Sources */,
7D404ABF2281892C00B28EF4 /* NSView+VLCAdditions.m in Sources */,
7DE9C7DD220728420089108F /* VLCPlayerController.m in Sources */,
7D93D8FC2316C2DC001C0063 /* VLCCustomCropArWindowController.m in Sources */,
1C3113941E508C6900D4DD76 /* VLCAddonsWindowController.m in Sources */,
7D2E0EDE20CD206F0033A221 /* VLCVideoWindowCommon.m in Sources */,
1C3113961E508C6900D4DD76 /* applescript.m in Sources */,

View File

@ -133,6 +133,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/panels/VLCVideoEffectsWindowController.m \
gui/macosx/panels/dialogs/VLCCoreDialogProvider.h \
gui/macosx/panels/dialogs/VLCCoreDialogProvider.m \
gui/macosx/panels/dialogs/VLCCustomCropArWindowController.h \
gui/macosx/panels/dialogs/VLCCustomCropArWindowController.m \
gui/macosx/panels/dialogs/VLCPopupPanelController.h \
gui/macosx/panels/dialogs/VLCPopupPanelController.m \
gui/macosx/panels/dialogs/VLCResumeDialogController.h \
@ -269,6 +271,7 @@ libmacosx_plugin_la_XIB_SOURCES = \
gui/macosx/UI/Help.xib \
gui/macosx/UI/LogMessageWindow.xib \
gui/macosx/UI/MainMenu.xib \
gui/macosx/UI/VLCCustomCropARPanel.xib \
gui/macosx/UI/VLCLibraryAlbumTableCellView.xib \
gui/macosx/UI/VLCLibraryWindow.xib \
gui/macosx/UI/VLCLibraryTableCellView.xib \

View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="VLCCustomCropArWindowController">
<connections>
<outlet property="applyButton" destination="ggs-u2-5DB" id="KYB-GX-w4R"/>
<outlet property="cancelButton" destination="J1x-uo-ZpT" id="oVQ-qk-o98"/>
<outlet property="denominatorTextField" destination="Smg-Kh-Pjv" id="WhX-dO-loi"/>
<outlet property="numeratorTextField" destination="KFt-K5-ogc" id="dE7-LF-UfA"/>
<outlet property="titleLabel" destination="bB6-Le-Ilg" id="MQv-r9-Qdw"/>
<outlet property="window" destination="Fqe-af-Tt9" id="u4H-rX-p0W"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Custom Crop" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="Fqe-af-Tt9" userLabel="CustomCropAr">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="429" y="553" width="265" height="110"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
<view key="contentView" id="NrR-3A-NOR">
<rect key="frame" x="0.0" y="0.0" width="265" height="122"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="bB6-Le-Ilg" userLabel="Testlabel">
<rect key="frame" x="86" y="99" width="93" height="17"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title="Custom Crop" id="vXn-nw-Nrc">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Smg-Kh-Pjv" userLabel="Mins Text Field">
<rect key="frame" x="145" y="59" width="33" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" title="0" drawsBackground="YES" id="2wj-p0-8uH">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="nextKeyView" destination="J1x-uo-ZpT" id="jSh-vr-TWH"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KFt-K5-ogc" userLabel="Hours Text Field">
<rect key="frame" x="87" y="59" width="33" height="22"/>
<constraints>
<constraint firstAttribute="width" constant="33" id="xwZ-sK-Qq8"/>
</constraints>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="center" title="0" drawsBackground="YES" id="UWz-WZ-unY">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
<outlet property="nextKeyView" destination="Smg-Kh-Pjv" id="OlL-xH-Oc6"/>
</connections>
</textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vW2-B8-0jf" userLabel="Testlabel">
<rect key="frame" x="126" y="62" width="13" height="17"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title=":" id="OUw-pe-eva">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ggs-u2-5DB">
<rect key="frame" x="176" y="13" width="75" height="32"/>
<buttonCell key="cell" type="push" title="Apply" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="1nM-QF-enb">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
DQ
</string>
</buttonCell>
<connections>
<action selector="buttonPressed:" target="-2" id="irY-sT-eAB"/>
<outlet property="nextKeyView" destination="KFt-K5-ogc" id="SZR-3a-Nhx"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="J1x-uo-ZpT">
<rect key="frame" x="94" y="13" width="82" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="AHd-5X-fcR">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="buttonPressed:" target="-2" id="dp8-L6-N7m"/>
<outlet property="nextKeyView" destination="ggs-u2-5DB" id="tW3-MQ-uef"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="ggs-u2-5DB" secondAttribute="trailing" constant="20" id="1W0-1s-3gv"/>
<constraint firstItem="KFt-K5-ogc" firstAttribute="width" secondItem="Smg-Kh-Pjv" secondAttribute="width" id="24N-1L-5Qx"/>
<constraint firstItem="Smg-Kh-Pjv" firstAttribute="centerY" secondItem="vW2-B8-0jf" secondAttribute="centerY" id="2mI-T4-igU"/>
<constraint firstItem="J1x-uo-ZpT" firstAttribute="top" secondItem="Smg-Kh-Pjv" secondAttribute="bottom" constant="18" id="4tw-eG-Guy"/>
<constraint firstItem="ggs-u2-5DB" firstAttribute="centerY" secondItem="J1x-uo-ZpT" secondAttribute="centerY" id="5tD-9J-E96"/>
<constraint firstAttribute="bottom" secondItem="ggs-u2-5DB" secondAttribute="bottom" constant="20" id="8kZ-L4-ND0"/>
<constraint firstItem="bB6-Le-Ilg" firstAttribute="top" secondItem="NrR-3A-NOR" secondAttribute="top" constant="6" id="AmG-Sh-CJP"/>
<constraint firstItem="Smg-Kh-Pjv" firstAttribute="leading" secondItem="vW2-B8-0jf" secondAttribute="trailing" constant="8" id="OEg-PS-VM3"/>
<constraint firstItem="ggs-u2-5DB" firstAttribute="leading" secondItem="J1x-uo-ZpT" secondAttribute="trailing" constant="12" id="aCf-3u-Xfg"/>
<constraint firstItem="vW2-B8-0jf" firstAttribute="centerX" secondItem="NrR-3A-NOR" secondAttribute="centerX" id="ddl-Ly-MTh"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="bB6-Le-Ilg" secondAttribute="trailing" constant="20" symbolic="YES" id="epj-mp-Lnm"/>
<constraint firstItem="bB6-Le-Ilg" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="NrR-3A-NOR" secondAttribute="leading" constant="20" symbolic="YES" id="j6a-V4-oje"/>
<constraint firstItem="KFt-K5-ogc" firstAttribute="centerY" secondItem="vW2-B8-0jf" secondAttribute="centerY" id="kWs-Sa-960"/>
<constraint firstItem="Smg-Kh-Pjv" firstAttribute="baseline" secondItem="KFt-K5-ogc" secondAttribute="baseline" id="mOE-Qf-1wF"/>
<constraint firstItem="KFt-K5-ogc" firstAttribute="top" secondItem="bB6-Le-Ilg" secondAttribute="bottom" constant="18" id="oqx-8I-mgW"/>
<constraint firstItem="vW2-B8-0jf" firstAttribute="leading" secondItem="KFt-K5-ogc" secondAttribute="trailing" constant="8" id="sHD-Ov-r3y"/>
<constraint firstItem="bB6-Le-Ilg" firstAttribute="centerX" secondItem="NrR-3A-NOR" secondAttribute="centerX" id="uga-pS-4jS"/>
</constraints>
</view>
<connections>
<outlet property="initialFirstResponder" destination="KFt-K5-ogc" id="RUn-tc-Qvg"/>
</connections>
<point key="canvasLocation" x="146.5" y="157"/>
</window>
</objects>
</document>

View File

@ -37,6 +37,7 @@
#import "panels/VLCVideoEffectsWindowController.h"
#import "panels/VLCBookmarksWindowController.h"
#import "panels/dialogs/VLCCoreDialogProvider.h"
#import "panels/dialogs/VLCCustomCropArWindowController.h"
#import "panels/VLCInformationWindowController.h"
#import "panels/VLCTimeSelectionPanelController.h"
@ -106,6 +107,7 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
NSMenu *_playlistTableColumnsContextMenu;
__strong VLCTimeSelectionPanelController *_timeSelectionPanel;
__strong VLCCustomCropArWindowController *_customARController;
}
@end
@ -647,12 +649,14 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
objectType:VLCObjectTypeVout
var:"aspect-ratio"
selector:@selector(toggleVar:)];
[self appendCustomizationItem:_aspect_ratio];
[self setupVarMenuItem:_crop
target:VLC_OBJECT(p_vout)
objectType:VLCObjectTypeVout
var:"crop"
selector:@selector(toggleVar:)];
[self appendCustomizationItem:_crop];
[self setupVarMenuItem:_deinterlace
target:VLC_OBJECT(p_vout)
@ -1619,7 +1623,6 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
free(text);
}
- (void)setupVarMenu:(NSMenu *)menu
forMenuItem:(NSMenuItem *)parent
target:(vlc_object_t *)p_object
@ -1772,6 +1775,49 @@ typedef NS_ENUM(NSInteger, VLCObjectType) {
}
}
#pragma mark - crop and AR customization
- (void)appendCustomizationItem:(NSMenuItem *)menuItem
{
NSMenu *submenu = menuItem.submenu;
NSMenuItem *customizationItem = [[NSMenuItem alloc] initWithTitle:_NS("Custom")
action:menuItem == _aspect_ratio ? @selector(performCustomAspectRatio:) : @selector(performCustomCrop:)
keyEquivalent:@""];
[customizationItem setTarget:self];
[submenu addItem:[NSMenuItem separatorItem]];
[submenu addItem:customizationItem];
}
- (void)performCustomCropOrAspectRatioActionWithVariable:(const char *)variable andl10nString:(NSString *)l10nString
{
if (!_customARController) {
_customARController = [[VLCCustomCropArWindowController alloc] init];
}
_customARController.title = l10nString;
[_customARController runModalForWindow:[NSApp mainWindow]
completionHandler:^(NSInteger returnCode, NSString * _Nonnull geometry) {
if (returnCode != NSModalResponseOK) {
return;
}
vout_thread_t *p_vout = [self->_playerController videoOutputThreadForKeyWindow];
if (p_vout) {
var_SetString(p_vout, variable, [geometry UTF8String]);
vout_Release(p_vout);
}
}];
}
- (void)performCustomAspectRatio:(id)sender
{
[self performCustomCropOrAspectRatioActionWithVariable:"aspect-ratio" andl10nString:_NS("Aspect Ratio")];
}
- (void)performCustomCrop:(id)sender
{
[self performCustomCropOrAspectRatioActionWithVariable:"crop" andl10nString:_NS("Crop")];
}
#pragma mark - menu delegation
- (void)menuWillOpen:(NSMenu *)menu

View File

@ -0,0 +1,52 @@
/*****************************************************************************
* VLCCustomCropArWindowController.h: Controller for custom crop / AR panel
*****************************************************************************
* Copyright (C) 2019 VideoLAN and authors
* Author: Felix Paul Kühne <fkuehne # videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface VLCCustomCropArWindowController : NSWindowController
@property (readwrite, weak) IBOutlet NSButton *cancelButton;
@property (readwrite, weak) IBOutlet NSButton *applyButton;
@property (readwrite, weak) IBOutlet NSTextField *titleLabel;
@property (readwrite, weak) IBOutlet NSTextField *numeratorTextField;
@property (readwrite, weak) IBOutlet NSTextField *denominatorTextField;
@property (readwrite, retain) NSString *title;
- (IBAction)buttonPressed:(id)sender;
/**
* \param returnCode Result from panel. Can be NSModalResponseOK or NSModalResponseCancel.
* \param geometry Geometry based on numbers entered in panel
*/
typedef void(^CustomCropArCompletionHandler)(NSInteger returnCode, NSString *geometry);
/**
* Shows the panel as a modal dialog with window as its owner.
* \param window Parent window for the dialog.
* \param handler Completion block.
*/
- (void)runModalForWindow:(NSWindow *)window completionHandler:(CustomCropArCompletionHandler)handler;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,63 @@
/*****************************************************************************
* VLCCustomCropArWindowController.m: Controller for custom crop / AR panel
*****************************************************************************
* Copyright (C) 2019 VideoLAN and authors
* Author: Felix Paul Kühne <fkuehne # videolan.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import "VLCCustomCropArWindowController.h"
#import "extensions/NSString+Helpers.h"
@interface VLCCustomCropArWindowController ()
{
CustomCropArCompletionHandler _completionHandler;
}
@end
@implementation VLCCustomCropArWindowController
- (instancetype)init
{
self = [super initWithWindowNibName:@"VLCCustomCropARPanel"];
return self;
}
- (void)windowDidLoad {
[super windowDidLoad];
[_applyButton setTitle:_NS("Apply")];
[_cancelButton setTitle:_NS("Cancel")];
[_titleLabel setStringValue:self.title];
}
- (void)buttonPressed:(id)sender
{
[self.window orderOut:sender];
[NSApp endSheet: self.window];
NSString *geometry = [NSString stringWithFormat:@"%@:%@", _numeratorTextField.stringValue, _denominatorTextField.stringValue];
if (_completionHandler)
_completionHandler(sender == _applyButton ? NSModalResponseOK : NSModalResponseCancel, geometry);
}
- (void)runModalForWindow:(NSWindow *)window completionHandler:(CustomCropArCompletionHandler)handler
{
_completionHandler = handler;
[window beginSheet:self.window completionHandler:nil];
}
@end

View File

@ -539,6 +539,8 @@ modules/gui/macosx/panels/VLCVideoEffectsWindowController.h
modules/gui/macosx/panels/VLCVideoEffectsWindowController.m
modules/gui/macosx/panels/dialogs/VLCCoreDialogProvider.h
modules/gui/macosx/panels/dialogs/VLCCoreDialogProvider.m
modules/gui/macosx/panels/dialogs/VLCCustomCropArWindowController.h
modules/gui/macosx/panels/dialogs/VLCCustomCropArWindowController.m
modules/gui/macosx/panels/dialogs/VLCPopupPanelController.h
modules/gui/macosx/panels/dialogs/VLCPopupPanelController.m
modules/gui/macosx/panels/dialogs/VLCResumeDialogController.h