[vlc-commits] macosx: Fix animations for playmode buttons in controls bar
David Fuhrmann
git at videolan.org
Sat Jul 1 12:58:27 CEST 2017
vlc | branch: master | David Fuhrmann <dfuhrmann at videolan.org> | Sat Jul 1 11:37:14 2017 +0200| [9615d4c428fe569bb58bc3f449769d5ad8493a9d] | committer: David Fuhrmann
macosx: Fix animations for playmode buttons in controls bar
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9615d4c428fe569bb58bc3f449769d5ad8493a9d
---
modules/gui/macosx/UI/MainWindow.xib | 6 ++-
modules/gui/macosx/UI/Open.xib | 17 +++---
modules/gui/macosx/VLCMainWindowControlsBar.h | 3 ++
modules/gui/macosx/VLCMainWindowControlsBar.m | 78 ++++++++++++++-------------
4 files changed, 58 insertions(+), 46 deletions(-)
diff --git a/modules/gui/macosx/UI/MainWindow.xib b/modules/gui/macosx/UI/MainWindow.xib
index f4b2a655b1..6b401e5ebf 100644
--- a/modules/gui/macosx/UI/MainWindow.xib
+++ b/modules/gui/macosx/UI/MainWindow.xib
@@ -14,7 +14,7 @@
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
- <window title="VLC media player" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" tabbingMode="disallowed" id="21" userLabel="Main Window" customClass="VLCMainWindow">
+ <window title="VLC media player" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="21" userLabel="Main Window" customClass="VLCMainWindow">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" topStrut="YES"/>
<rect key="contentRect" x="53" y="419" width="716" height="333"/>
@@ -560,6 +560,7 @@
<button translatesAutoresizingMaskIntoConstraints="NO" id="2789">
<rect key="frame" x="28" y="0.0" width="28" height="23"/>
<constraints>
+ <constraint firstAttribute="width" constant="28" id="3Ww-8A-Fh7"/>
<constraint firstAttribute="height" constant="23" id="JJL-a1-CWG"/>
</constraints>
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="repeat" imagePosition="only" alignment="center" alternateImage="repeat-pressed" inset="2" id="4316">
@@ -573,6 +574,7 @@
<button translatesAutoresizingMaskIntoConstraints="NO" id="2208">
<rect key="frame" x="56" y="0.0" width="29" height="23"/>
<constraints>
+ <constraint firstAttribute="width" constant="29" id="6Z4-L0-Wzo"/>
<constraint firstAttribute="height" constant="23" id="7YJ-zp-9if"/>
</constraints>
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="shuffle" imagePosition="only" alignment="center" alternateImage="shuffle-pressed" inset="2" id="4313">
@@ -850,7 +852,9 @@
<outlet property="progressBar" destination="3584" id="d57-az-Grm"/>
<outlet property="progressView" destination="5335" id="dBT-U1-rmL"/>
<outlet property="repeatButton" destination="2789" id="lRj-JN-Yry"/>
+ <outlet property="repeatButtonWidthConstraint" destination="3Ww-8A-Fh7" id="i89-fY-S9w"/>
<outlet property="shuffleButton" destination="2208" id="kf1-mU-75T"/>
+ <outlet property="shuffleButtonWidthConstraint" destination="6Z4-L0-Wzo" id="xFz-7x-Vlz"/>
<outlet property="stopButton" destination="3647" id="ddx-Gq-iPV"/>
<outlet property="timeField" destination="4423" id="Wvo-az-Lou"/>
<outlet property="timeSlider" destination="4422" id="I3H-rQ-4GH"/>
diff --git a/modules/gui/macosx/UI/Open.xib b/modules/gui/macosx/UI/Open.xib
index a1a908d430..4db0d252a4 100644
--- a/modules/gui/macosx/UI/Open.xib
+++ b/modules/gui/macosx/UI/Open.xib
@@ -1,9 +1,8 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11542" systemVersion="15G1217" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10117" systemVersion="16F73" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
- <deployment identifier="macosx"/>
<development version="7000" identifier="xcode"/>
- <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11542"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10117"/>
<capability name="box content view" minToolsVersion="7.0"/>
</dependencies>
<objects>
@@ -148,7 +147,7 @@
<windowStyleMask key="styleMask" titled="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="162" y="354" width="574" height="380"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+ <rect key="screenRect" x="0.0" y="0.0" width="1280" height="778"/>
<value key="minSize" type="size" width="213" height="107"/>
<view key="contentView" id="637">
<rect key="frame" x="0.0" y="0.0" width="574" height="380"/>
@@ -199,7 +198,7 @@ Gw
<rect key="frame" x="10" y="33" width="528" height="232"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
- <box autoresizesSubviews="NO" borderType="line" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="3487">
+ <box autoresizesSubviews="NO" title="Box" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="3487">
<rect key="frame" x="1" y="-1" width="526" height="47"/>
<view key="contentView" id="7Lj-Zt-bjd">
<rect key="frame" x="1" y="1" width="524" height="45"/>
@@ -607,7 +606,7 @@ Gw
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="37" y="107" width="531" height="324"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+ <rect key="screenRect" x="0.0" y="0.0" width="1280" height="778"/>
<value key="minSize" type="size" width="213" height="107"/>
<view key="contentView" id="1264">
<rect key="frame" x="0.0" y="0.0" width="531" height="324"/>
@@ -1247,7 +1246,7 @@ DQ
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="246" y="437" width="656" height="249"/>
- <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+ <rect key="screenRect" x="0.0" y="0.0" width="1280" height="778"/>
<value key="minSize" type="size" width="213" height="107"/>
<view key="contentView" id="2793">
<rect key="frame" x="0.0" y="0.0" width="656" height="249"/>
@@ -1381,7 +1380,7 @@ Gw
<action selector="openNetUDPButtonAction:" target="-2" id="jxT-wR-kT9"/>
</connections>
</button>
- <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="2811">
+ <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2811">
<rect key="frame" x="17" y="60" width="622" height="70"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" id="2986">
<font key="font" metaFont="smallSystem"/>
diff --git a/modules/gui/macosx/VLCMainWindowControlsBar.h b/modules/gui/macosx/VLCMainWindowControlsBar.h
index a9e66acc51..e3134d49c1 100644
--- a/modules/gui/macosx/VLCMainWindowControlsBar.h
+++ b/modules/gui/macosx/VLCMainWindowControlsBar.h
@@ -41,7 +41,10 @@
@property (readwrite, strong) IBOutlet NSButton *playlistButton;
@property (readwrite, strong) IBOutlet NSButton *repeatButton;
+ at property (readwrite, strong) IBOutlet NSLayoutConstraint *repeatButtonWidthConstraint;
+
@property (readwrite, strong) IBOutlet NSButton *shuffleButton;
+ at property (readwrite, strong) IBOutlet NSLayoutConstraint *shuffleButtonWidthConstraint;
@property (readwrite, strong) IBOutlet VLCVolumeSliderCommon * volumeSlider;
@property (readwrite, strong) IBOutlet NSImageView *volumeTrackImageView;
diff --git a/modules/gui/macosx/VLCMainWindowControlsBar.m b/modules/gui/macosx/VLCMainWindowControlsBar.m
index d6ac135361..08c41e43f4 100644
--- a/modules/gui/macosx/VLCMainWindowControlsBar.m
+++ b/modules/gui/macosx/VLCMainWindowControlsBar.m
@@ -56,15 +56,12 @@
NSLayoutConstraint *_hideNextButtonConstraint;
NSLayoutConstraint *_hideEffectsButtonConstraint;
-
- NSLayoutConstraint *_hideRepeatButtonConstraint;
- NSLayoutConstraint *_hideShuffleButtonConstraint;
}
- (void)addJumpButtons:(BOOL)b_fast;
- (void)removeJumpButtons:(BOOL)b_fast;
-- (void)addPlaymodeButtons:(BOOL)b_fast;
-- (void)removePlaymodeButtons:(BOOL)b_fast;
+- (void)addPlaymodeButtons:(BOOL)withAnimation;
+- (void)removePlaymodeButtons:(BOOL)withAnimation;
@end
@@ -208,23 +205,9 @@
if (!var_InheritBool(getIntf(), "macosx-show-effects-button"))
[self removeEffectsButton:YES];
- _hideRepeatButtonConstraint = [NSLayoutConstraint constraintWithItem:self.repeatButton
- attribute:NSLayoutAttributeWidth
- relatedBy:NSLayoutRelationEqual
- toItem:nil
- attribute:NSLayoutAttributeNotAnAttribute
- multiplier:1
- constant:0];
- _hideShuffleButtonConstraint = [NSLayoutConstraint constraintWithItem:self.shuffleButton
- attribute:NSLayoutAttributeWidth
- relatedBy:NSLayoutRelationEqual
- toItem:nil
- attribute:NSLayoutAttributeNotAnAttribute
- multiplier:1
- constant:0];
b_show_playmode_buttons = var_InheritBool(getIntf(), "macosx-show-playmode-buttons");
if (!b_show_playmode_buttons)
- [self removePlaymodeButtons:YES];
+ [self removePlaymodeButtons:NO];
_hidePrevButtonConstraint = [NSLayoutConstraint constraintWithItem:self.prevButton
attribute:NSLayoutAttributeWidth
@@ -252,6 +235,22 @@
#pragma mark interface customization
+- (void)hideButtonWithConstraint:(NSLayoutConstraint *)constraint animation:(BOOL)animation
+{
+ NSAssert([constraint.firstItem isKindOfClass:[NSButton class]], @"Constraint must be for NSButton object");
+
+ NSLayoutConstraint *animatedConstraint = animation ? constraint.animator : constraint;
+ animatedConstraint.constant = 0;
+}
+
+- (void)showButtonWithConstraint:(NSLayoutConstraint *)constraint animation:(BOOL)animation
+{
+ NSAssert([constraint.firstItem isKindOfClass:[NSButton class]], @"Constraint must be for NSButton object");
+
+ NSLayoutConstraint *animatedConstraint = animation ? constraint.animator : constraint;
+ animatedConstraint.constant = ((NSButton *)constraint.firstItem).image.size.width;
+}
+
- (void)toggleEffectsButton
{
if (config_GetInt(getIntf(), "macosx-show-effects-button"))
@@ -356,37 +355,44 @@
b_show_playmode_buttons = config_GetInt(getIntf(), "macosx-show-playmode-buttons");
if (b_show_playmode_buttons)
- [self addPlaymodeButtons:NO];
+ [self addPlaymodeButtons:YES];
else
- [self removePlaymodeButtons:NO];
+ [self removePlaymodeButtons:YES];
}
-- (void)addPlaymodeButtons:(BOOL)b_fast
+- (void)addPlaymodeButtons:(BOOL)withAnimation
{
- [self.repeatButton removeConstraint:_hideRepeatButtonConstraint];
- [self.shuffleButton removeConstraint:_hideShuffleButtonConstraint];
+ [NSAnimationContext beginGrouping];
+ [self showButtonWithConstraint:self.repeatButtonWidthConstraint animation:withAnimation];
+ [self showButtonWithConstraint:self.shuffleButtonWidthConstraint animation:withAnimation];
+ id button = withAnimation ? self.playlistButton.animator : self.playlistButton;
if (self.darkInterface) {
- [[self.playlistButton animator] setImage:imageFromRes(@"playlist_dark")];
- [[self.playlistButton animator] setAlternateImage:imageFromRes(@"playlist-pressed_dark")];
+ [button setImage:imageFromRes(@"playlist_dark")];
+ [button setAlternateImage:imageFromRes(@"playlist-pressed_dark")];
} else {
- [[self.playlistButton animator] setImage:imageFromRes(@"playlist-btn")];
- [[self.playlistButton animator] setAlternateImage:imageFromRes(@"playlist-btn-pressed")];
+ [button setImage:imageFromRes(@"playlist-btn")];
+ [button setAlternateImage:imageFromRes(@"playlist-btn-pressed")];
}
+ [NSAnimationContext endGrouping];
}
-- (void)removePlaymodeButtons:(BOOL)b_fast
+- (void)removePlaymodeButtons:(BOOL)withAnimation
{
- [self.repeatButton addConstraint:_hideRepeatButtonConstraint];
- [self.shuffleButton addConstraint:_hideShuffleButtonConstraint];
+ [NSAnimationContext beginGrouping];
+
+ [self hideButtonWithConstraint:self.repeatButtonWidthConstraint animation:withAnimation];
+ [self hideButtonWithConstraint:self.shuffleButtonWidthConstraint animation:withAnimation];
+ id button = withAnimation ? self.playlistButton.animator : self.playlistButton;
if (self.darkInterface) {
- [[self.playlistButton animator] setImage:imageFromRes(@"playlist-1btn-dark")];
- [[self.playlistButton animator] setAlternateImage:imageFromRes(@"playlist-1btn-dark-pressed")];
+ [button setImage:imageFromRes(@"playlist-1btn-dark")];
+ [button setAlternateImage:imageFromRes(@"playlist-1btn-dark-pressed")];
} else {
- [[self.playlistButton animator] setImage:imageFromRes(@"playlist-1btn")];
- [[self.playlistButton animator] setAlternateImage:imageFromRes(@"playlist-1btn-pressed")];
+ [button setImage:imageFromRes(@"playlist-1btn")];
+ [button setAlternateImage:imageFromRes(@"playlist-1btn-pressed")];
}
+ [NSAnimationContext endGrouping];
}
#pragma mark -
More information about the vlc-commits
mailing list