Commit 8b20b9d8 authored by David Fuhrmann's avatar David Fuhrmann

macosx: Add helper class for multi-line text fields

Autolayout on 10.7 cannot handle multi line text fields
automatically. Add a helper class which help calulating the
intrinsic size of the text fields.

Use that class first in resume dialog.

refs #17730
parent 1057e3fe
......@@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
1C06F2A31F08F1250068846F /* osx_notifications.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C06F2A21F08F1250068846F /* osx_notifications.m */; };
1C18BE471F2926700053D329 /* keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C18BE461F2926700053D329 /* keychain.m */; };
1C1C62011F8260A90052DD4F /* VLCWrappableTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1C62001F8260A90052DD4F /* VLCWrappableTextField.m */; };
1C31138E1E508C6900D4DD76 /* VLCAboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C67C8A71D58C0A40079E1C1 /* VLCAboutWindowController.m */; };
1C3113901E508C6900D4DD76 /* VLCHelpWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C67C8A41D58C0980079E1C1 /* VLCHelpWindowController.m */; };
1C3113921E508C6900D4DD76 /* VLCAddonListItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF0435F1972E26A0022B534 /* VLCAddonListItem.m */; };
......@@ -106,6 +107,8 @@
1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
1C06F2A21F08F1250068846F /* osx_notifications.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = osx_notifications.m; path = ../../../modules/notify/osx_notifications.m; sourceTree = "<group>"; };
1C18BE461F2926700053D329 /* keychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = keychain.m; path = ../../../modules/keystore/keychain.m; sourceTree = "<group>"; };
1C1C61FF1F8260A90052DD4F /* VLCWrappableTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCWrappableTextField.h; sourceTree = "<group>"; };
1C1C62001F8260A90052DD4F /* VLCWrappableTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCWrappableTextField.m; sourceTree = "<group>"; };
1C39ABBC1DA9AB9B00FE052A /* VLCDocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCDocumentController.h; sourceTree = "<group>"; };
1C39ABBD1DA9AB9B00FE052A /* VLCDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCDocumentController.m; sourceTree = "<group>"; };
1C5716AB1F5B142200678627 /* coreaudio_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = coreaudio_common.c; path = ../../../modules/audio_output/coreaudio_common.c; sourceTree = "<group>"; };
......@@ -937,6 +940,8 @@
7D9516B91C60B6AB00D14E1A /* VLCStatusBarIcon.m */,
1CD366791B7A242E0054E39F /* VLCTimeSelectionPanelController.h */,
1CD3667A1B7A242E0054E39F /* VLCTimeSelectionPanelController.m */,
1C1C61FF1F8260A90052DD4F /* VLCWrappableTextField.h */,
1C1C62001F8260A90052DD4F /* VLCWrappableTextField.m */,
6BBBB8AF1D10A96B001BD9BA /* Renderers */,
6B846FE81CF5D89500112E54 /* HUD UI Classes */,
5CCED71414C0D4A90057F8D1 /* VLCUIWidgets.h */,
......@@ -1704,7 +1709,7 @@
};
};
};
buildConfigurationList = C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "VLC" */;
buildConfigurationList = C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "vlc" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 1;
......@@ -1794,6 +1799,7 @@
1C18BE471F2926700053D329 /* keychain.m in Sources */,
1C3113C71E508C6900D4DD76 /* VLCOpenWindowController.m in Sources */,
1C3113C91E508C6900D4DD76 /* VLCOutput.m in Sources */,
1C1C62011F8260A90052DD4F /* VLCWrappableTextField.m in Sources */,
6BBB05DA1EEFEA29003A1019 /* VLCHUDOutlineView.m in Sources */,
1C3113CB1E508C6900D4DD76 /* VLCPLItem.m in Sources */,
1C3113CD1E508C6900D4DD76 /* VLCPLModel.m in Sources */,
......@@ -2024,7 +2030,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "VLC" */ = {
C2F2A6EA09588F1B00018C74 /* Build configuration list for PBXProject "vlc" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C2F2A6EB09588F1B00018C74 /* Development */,
......
......@@ -70,6 +70,7 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/Windows.h gui/macosx/Windows.m \
gui/macosx/VLCAudioEffectsWindowController.h gui/macosx/VLCAudioEffectsWindowController.m \
gui/macosx/VLCBookmarksWindowController.h gui/macosx/VLCBookmarksWindowController.m \
gui/macosx/VLCBottomBarView.h gui/macosx/VLCBottomBarView.m \
gui/macosx/VLCCoreDialogProvider.h gui/macosx/VLCCoreDialogProvider.m \
gui/macosx/VLCLogMessage.h gui/macosx/VLCLogMessage.m \
gui/macosx/VLCLogWindowController.h gui/macosx/VLCLogWindowController.m \
......@@ -104,7 +105,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/VLCSliderCell.h gui/macosx/VLCSliderCell.m \
gui/macosx/VLCVolumeSlider.h gui/macosx/VLCVolumeSlider.m \
gui/macosx/VLCVolumeSliderCell.h gui/macosx/VLCVolumeSliderCell.m \
gui/macosx/VLCBottomBarView.h gui/macosx/VLCBottomBarView.m
gui/macosx/VLCWrappableTextField.h gui/macosx/VLCWrappableTextField.m
# User interface compilation
......
......@@ -21,18 +21,17 @@
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" hidesOnDeactivate="YES" oneShot="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1">
<windowStyleMask key="styleMask" titled="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="550" height="160"/>
<rect key="contentRect" x="196" y="240" width="549" height="160"/>
<rect key="screenRect" x="0.0" y="0.0" width="1280" height="778"/>
<value key="minSize" type="size" width="446" height="133"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="550" height="160"/>
<rect key="frame" x="0.0" y="0.0" width="549" height="160"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="560" translatesAutoresizingMaskIntoConstraints="NO" id="3">
<rect key="frame" x="102" y="83" width="430" height="32"/>
<textField horizontalHuggingPriority="750" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="3" customClass="VLCWrappableTextField">
<rect key="frame" x="102" y="83" width="429" height="32"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="32" id="YO6-yf-hXE"/>
<constraint firstAttribute="height" relation="lessThanOrEqual" constant="128" id="i6c-N2-KuS"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="425" id="kkj-bo-hIa"/>
</constraints>
<textFieldCell key="cell" truncatesLastVisibleLine="YES" sendsActionOnEndEditing="YES" title="Do you want to resume this file?
This-is-a-file" id="4">
<font key="font" metaFont="cellTitle"/>
......@@ -40,7 +39,7 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="42">
<textField horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="42">
<rect key="frame" x="102" y="123" width="132" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Continue playback?" id="43">
<font key="font" metaFont="systemBold"/>
......@@ -56,7 +55,7 @@
</constraints>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="VLC" id="56"/>
</imageView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="85X-TN-2Hu">
<button horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="85X-TN-2Hu">
<rect key="frame" x="102" y="59" width="219" height="18"/>
<buttonCell key="cell" type="check" title="Always continue media playback" bezelStyle="regularSquare" imagePosition="left" inset="2" id="xHm-jn-IdY">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
......@@ -66,8 +65,8 @@
<action selector="resumeSettingChanged:" target="-2" id="alS-ps-u5T"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="21">
<rect key="frame" x="441" y="13" width="95" height="32"/>
<button horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="21">
<rect key="frame" x="440" y="13" width="95" height="32"/>
<buttonCell key="cell" type="push" title="Continue" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="22">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
......@@ -79,8 +78,8 @@ DQ
<action selector="buttonClicked:" target="-2" id="54"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
<rect key="frame" x="357" y="13" width="84" height="32"/>
<button horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9">
<rect key="frame" x="356" y="13" width="84" height="32"/>
<buttonCell key="cell" type="push" title="Restart" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="10">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
......@@ -102,6 +101,7 @@ DQ
<constraint firstAttribute="bottom" secondItem="9" secondAttribute="bottom" constant="20" id="SZk-pu-Lgd"/>
<constraint firstAttribute="bottom" secondItem="21" secondAttribute="bottom" constant="20" id="fiW-7M-G63"/>
<constraint firstItem="55" firstAttribute="leading" secondItem="2" secondAttribute="leading" constant="20" id="lQU-ef-GZw"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="85X-TN-2Hu" secondAttribute="trailing" constant="20" id="mew-JH-yRV"/>
<constraint firstItem="21" firstAttribute="top" secondItem="85X-TN-2Hu" secondAttribute="bottom" constant="20" id="p8X-Vs-WZx"/>
<constraint firstItem="21" firstAttribute="leading" secondItem="9" secondAttribute="trailing" constant="12" id="xrB-He-ihV"/>
<constraint firstItem="42" firstAttribute="leading" secondItem="55" secondAttribute="trailing" constant="19" id="yR0-JV-Hcv"/>
......
/*****************************************************************************
* VLCWrappableTextField.h
*****************************************************************************
* Copyright (C) 2017 VideoLAN and authors
* Author: David Fuhrmann <dfuhrmann at videolan dot 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>
/**
* Helper class for wrappable text multi line text fields on 10.7.
*
* Makes sure to try to wrap the text while calulating an intrinsic size for
* the field.
*
* For this to work, make sure that:
* - Field has a minimum width (best is to use >= constraint)
* - Field has layout set to wrap
* - Fields preferred with setting is explicit with constant 0 (auto or runtime
* width are not compatible with 10.7)
* - If text can change, make sure to have vertical hugging priorities > 500 so
* that window height can shrink again if text gets smaller.
*
* TODO: Revisit that code one 10.7 is dropped.
*/
@interface VLCWrappableTextField : NSTextField
@end
\ No newline at end of file
/*****************************************************************************
* VLCWrappableTextField.m
*****************************************************************************
* Copyright (C) 2017 VideoLAN and authors
* Author: David Fuhrmann <dfuhrmann at videolan dot 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 "VLCWrappableTextField.h"
@implementation VLCWrappableTextField
- (NSSize)intrinsicContentSize
{
if (![self.cell wraps]) {
return [super intrinsicContentSize];
}
// Try to get minimum height needed, by assuming unlimited height being
// (theoretically) possible.
NSRect frame = [self frame];
frame.size.height = CGFLOAT_MAX;
CGFloat height = [self.cell cellSizeForBounds:frame].height;
return NSMakeSize(frame.size.width, height);
}
- (void)textDidChange:(NSNotification *)notification
{
[super textDidChange:notification];
[self invalidateIntrinsicContentSize];
}
@end
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment