mirror of https://code.videolan.org/videolan/vlc
macosx/main menu: allow custom crop and aspect ratio changes
Closes #19838
This commit is contained in:
parent
baf77ff56d
commit
89e4a7ad73
|
@ -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 */,
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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>
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue