summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordynaflash <[email protected]>2009-01-21 03:46:14 +0000
committerdynaflash <[email protected]>2009-01-21 03:46:14 +0000
commite22c0e8c13d799104e616de5c469cb11b4defca0 (patch)
tree445364840421e5f40d84ec04e29246c8194ba9ce
parentcb23938da2747334ee19e359a64db9bb9eec4a55 (diff)
MacGui: Preview Window scale to screen initial implementation
- Allows scaling the preview to fit the screen when in full screen mode. - Also hopefully fixes a bug where multiple cycles of windowed and full screen cause the hud overlay to not appear. - hud overlay delay timer changed from 20 to 10 seconds git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2091 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r--macosx/English.lproj/PicturePreview.xib142
-rw-r--r--macosx/HBPreviewController.h6
-rw-r--r--macosx/HBPreviewController.mm399
-rw-r--r--macosx/PictureController.mm4
4 files changed, 384 insertions, 167 deletions
diff --git a/macosx/English.lproj/PicturePreview.xib b/macosx/English.lproj/PicturePreview.xib
index adf47df43..1c1bacd55 100644
--- a/macosx/English.lproj/PicturePreview.xib
+++ b/macosx/English.lproj/PicturePreview.xib
@@ -8,7 +8,7 @@
<string key="IBDocument.HIToolboxVersion">353.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="5"/>
+ <integer value="251"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -154,7 +154,7 @@
<object class="NSButton" id="537831590">
<reference key="NSNextResponder" ref="385854969"/>
<int key="NSvFlags">289</int>
- <string key="NSFrame">{{271, 11}, {69, 17}}</string>
+ <string key="NSFrame">{{233, 10}, {69, 17}}</string>
<reference key="NSSuperview" ref="385854969"/>
<object class="NSArray" key="NSViewContentFilters">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -187,7 +187,7 @@
<object class="NSButton" id="141370142">
<reference key="NSNextResponder" ref="385854969"/>
<int key="NSvFlags">289</int>
- <string key="NSFrame">{{346, 11}, {54, 17}}</string>
+ <string key="NSFrame">{{346, 10}, {54, 17}}</string>
<reference key="NSSuperview" ref="385854969"/>
<object class="NSArray" key="NSViewContentFilters">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -217,16 +217,49 @@
<int key="NSPeriodicInterval">25</int>
</object>
</object>
+ <object class="NSButton" id="81685190">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">289</int>
+ <string key="NSFrame">{{308, 10}, {34, 17}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSArray" key="NSViewContentFilters">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="CIColorMonochrome">
+ <object class="CIColor" key="CI_inputColor">
+ <float key="red">7.019608e-01</float>
+ <float key="green">7.019608e-01</float>
+ <float key="blue">7.019608e-01</float>
+ <float key="alpha">1.000000e+00</float>
+ </object>
+ <reference key="CI_inputIntensity" ref="9"/>
+ <bool key="CIEnabled">YES</bool>
+ </object>
+ </object>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="847033897">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134479872</int>
+ <string type="base64-UTF8" key="NSContents">PC0+A</string>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="81685190"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">164</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
<object class="NSTextField" id="66510867">
<reference key="NSNextResponder" ref="385854969"/>
<int key="NSvFlags">289</int>
- <string key="NSFrame">{{108, 15}, {89, 11}}</string>
+ <string key="NSFrame">{{100, 14}, {75, 11}}</string>
<reference key="NSSuperview" ref="385854969"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="567286013">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">71566336</int>
- <string key="NSContents">Duration (seconds):</string>
+ <string key="NSContents">Duration (sec):</string>
<reference key="NSSupport" ref="22"/>
<reference key="NSControlView" ref="66510867"/>
<object class="NSColor" key="NSBackgroundColor" id="407686733">
@@ -247,7 +280,7 @@
<object class="NSPopUpButton" id="598619000">
<reference key="NSNextResponder" ref="385854969"/>
<int key="NSvFlags">289</int>
- <string key="NSFrame">{{199, 12}, {45, 15}}</string>
+ <string key="NSFrame">{{178, 12}, {45, 15}}</string>
<reference key="NSSuperview" ref="385854969"/>
<object class="NSArray" key="NSViewContentFilters">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -366,7 +399,7 @@
<object class="NSTextField" id="628196212">
<reference key="NSNextResponder" ref="385854969"/>
<int key="NSvFlags">290</int>
- <string key="NSFrame">{{15, 66}, {388, 14}}</string>
+ <string key="NSFrame">{{15, 56}, {388, 20}}</string>
<reference key="NSSuperview" ref="385854969"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="921881842">
@@ -387,6 +420,23 @@
</object>
</object>
</object>
+ <object class="NSTextField" id="245200984">
+ <reference key="NSNextResponder" ref="385854969"/>
+ <int key="NSvFlags">290</int>
+ <string key="NSFrame">{{16, 81}, {388, 12}}</string>
+ <reference key="NSSuperview" ref="385854969"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1032360651">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">4456448</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="22"/>
+ <reference key="NSControlView" ref="245200984"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="407686733"/>
+ <reference key="NSTextColor" ref="978544139"/>
+ </object>
+ </object>
</object>
<string key="NSFrame">{{1, 1}, {418, 98}}</string>
<reference key="NSSuperview" ref="92351498"/>
@@ -754,6 +804,30 @@
</object>
<int key="connectionID">274</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fScaleToScreenToggleButton</string>
+ <reference key="source" ref="355312334"/>
+ <reference key="destination" ref="81685190"/>
+ </object>
+ <int key="connectionID">277</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">toggleScaleToScreen:</string>
+ <reference key="source" ref="355312334"/>
+ <reference key="destination" ref="81685190"/>
+ </object>
+ <int key="connectionID">279</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fscaleInfoField</string>
+ <reference key="source" ref="355312334"/>
+ <reference key="destination" ref="245200984"/>
+ </object>
+ <int key="connectionID">282</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -876,6 +950,8 @@
<reference ref="598619000"/>
<reference ref="537831590"/>
<reference ref="141370142"/>
+ <reference ref="81685190"/>
+ <reference ref="245200984"/>
</object>
<reference key="parent" ref="289177107"/>
</object>
@@ -1021,6 +1097,34 @@
<reference key="object" ref="606007744"/>
<reference key="parent" ref="141370142"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">275</int>
+ <reference key="object" ref="81685190"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="847033897"/>
+ </object>
+ <reference key="parent" ref="92351498"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">276</int>
+ <reference key="object" ref="847033897"/>
+ <reference key="parent" ref="81685190"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">280</int>
+ <reference key="object" ref="245200984"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1032360651"/>
+ </object>
+ <reference key="parent" ref="92351498"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">281</int>
+ <reference key="object" ref="1032360651"/>
+ <reference key="parent" ref="245200984"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -1081,6 +1185,14 @@
<string>271.IBViewIntegration.shadowOffsetHeight</string>
<string>271.IBViewIntegration.shadowOffsetWidth</string>
<string>272.IBPluginDependency</string>
+ <string>275.IBPluginDependency</string>
+ <string>275.IBViewIntegration.shadowBlurRadius</string>
+ <string>275.IBViewIntegration.shadowColor</string>
+ <string>275.IBViewIntegration.shadowOffsetHeight</string>
+ <string>275.IBViewIntegration.shadowOffsetWidth</string>
+ <string>276.IBPluginDependency</string>
+ <string>280.IBPluginDependency</string>
+ <string>280.ImportedFromIB2</string>
<string>38.IBPluginDependency</string>
<string>38.ImportedFromIB2</string>
<string>5.IBEditorWindowLastContentRect</string>
@@ -1156,6 +1268,14 @@
<reference ref="8"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="8"/>
+ <reference ref="864448722"/>
+ <reference ref="8"/>
+ <reference ref="8"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="9"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>{{34, 423}, {475, 433}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1191,7 +1311,7 @@
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">274</int>
+ <int key="maxID">282</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -1235,6 +1355,7 @@
<string>showMoviePreview:</string>
<string>showPictureSettings:</string>
<string>showPreviewWindow:</string>
+ <string>toggleScaleToScreen:</string>
<string>toggleScreenMode:</string>
</object>
<object class="NSMutableArray" key="dict.values">
@@ -1249,6 +1370,7 @@
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@@ -1270,7 +1392,9 @@
<string>fPreviewMovieLengthPopUp</string>
<string>fPreviewMovieStatusField</string>
<string>fPreviewWindow</string>
+ <string>fScaleToScreenToggleButton</string>
<string>fShowPreviewMovieButton</string>
+ <string>fscaleInfoField</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -1290,6 +1414,8 @@
<string>NSTextField</string>
<string>NSWindow</string>
<string>NSButton</string>
+ <string>NSButton</string>
+ <string>NSTextField</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
diff --git a/macosx/HBPreviewController.h b/macosx/HBPreviewController.h
index 278e20a27..28b6eb45f 100644
--- a/macosx/HBPreviewController.h
+++ b/macosx/HBPreviewController.h
@@ -23,7 +23,7 @@
IBOutlet NSWindow * fPreviewWindow;
NSWindow * fFullScreenWindow; // Full Screen window
- NSMutableDictionary * fPicturePreviews; // NSImages, one for each preview libhb creates, created lazily
+ NSMutableDictionary * fPicturePreviews; // NSImages, one for each preview libhb creates, created lazily
int fPicture;
IBOutlet NSImageView * fPictureView;
@@ -33,6 +33,7 @@
IBOutlet NSSlider * fPictureSlider;
IBOutlet NSTextField * fInfoField;
+ IBOutlet NSTextField * fscaleInfoField;
BOOL isEncoding;
@@ -49,8 +50,10 @@
/* Full Screen Mode Toggle */
IBOutlet NSButton * fFullScreenToggleButton;
+ IBOutlet NSButton * fScaleToScreenToggleButton;
IBOutlet NSButton * fPictureSettingsToggleButton;
BOOL isFullScreen;
+ BOOL scaleToScreen;
/* Movie Previews */
IBOutlet NSButton * fCreatePreviewMovieButton;
IBOutlet NSButton * fCancelPreviewMovieButton;
@@ -78,6 +81,7 @@
- (IBAction)showPictureSettings:(id)sender;
/* Full Screen */
- (IBAction)toggleScreenMode:(id)sender;
+- (IBAction)toggleScaleToScreen:(id)sender;
- (BOOL)fullScreen;
- (IBAction)goFullScreen:(id)sender;
- (IBAction)goWindowedScreen:(id)sender;
diff --git a/macosx/HBPreviewController.mm b/macosx/HBPreviewController.mm
index 10c885587..6a50d461b 100644
--- a/macosx/HBPreviewController.mm
+++ b/macosx/HBPreviewController.mm
@@ -6,7 +6,6 @@
#import "HBPreviewController.h"
#import "Controller.h"
-//#import "PictureController.h"
@interface PreviewController (Private)
@@ -43,117 +42,6 @@
}
-- (void) mouseMoved:(NSEvent *)theEvent
-{
- [super mouseMoved:theEvent];
-
- if (isEncoding == NO)
- {
- if (hudTimerSeconds == 0)
- {
- hudTimerSeconds ++;
- [self startHudTimer];
- }
-
- if (hudTimerSeconds > 20)
- {
-
-
- [self stopHudTimer];
- [self showHideHudControls];
- }
-
- }
-}
-
-- (void) startHudTimer
-{
- if (!fHudTimer)
- {
- fHudTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(hudTimerFired:) userInfo:nil repeats:YES];
- [fHudTimer retain];
- }
-}
-
-- (void) stopHudTimer
-{
- if (fHudTimer)
- {
- [fHudTimer invalidate];
- [fHudTimer release];
- fHudTimer = nil;
- hudTimerSeconds = 0;
- }
-}
-
-- (void) hudTimerFired: (NSTimer*)theTimer
-{
- hudTimerSeconds ++;
- [self showHideHudControls];
-
-}
-
-- (void) showHideHudControls
-{
- /* Test for mouse location to show/hide hud controls */
- NSPoint mouseLoc;
- NSRect targetFrame;
- NSRect controlBoxFrame;
- targetFrame = [fPictureViewArea frame];
- controlBoxFrame = [fPictureControlBox frame];
-
- if (isFullScreen)
- {
- mouseLoc = [fFullScreenWindow mouseLocationOutsideOfEventStream];
- }
- else
- {
- mouseLoc = [fPreviewWindow mouseLocationOutsideOfEventStream];
- }
-
- /* if the pointer is inside the picture view areas but not
- * in the controlbox, check the hudTimerSeconds to see if
- * its in the allowable time span
- */
- if ( hudTimerSeconds > 0 && hudTimerSeconds < 20)
- {
- if (NSPointInRect (mouseLoc, controlBoxFrame))
- {
- /* Mouse is over the preview area so show hud controls so just
- * reset the timer to keep the control box visible
- */
- //[fPictureControlBox setHidden: NO];
- hudTimerSeconds = 1;
- return;
- }
-
- /* Else, if we are not encoding a preview, we show/hide the hud controls */
- if (isEncoding == NO)
- {
- /* Re-verify we are within the target frame */
- if (NSPointInRect (mouseLoc, targetFrame))
- {
- /* Mouse is over the preview area so show hud controls */
- [[fPictureControlBox animator] setHidden: NO];
- /* increment our timer by one */
- hudTimerSeconds ++;
- }
- else
- {
- [[fPictureControlBox animator] setHidden: YES];
- [self stopHudTimer];
- }
- }
-
- }
- else
- {
- [[fPictureControlBox animator] setHidden: YES];
- }
-
-}
-
-
//------------------------------------------------------------------------------------
// Displays and brings the picture window to the front
@@ -163,6 +51,7 @@
[self showWindow:sender];
/* lets set the preview window to accept mouse moved events */
[fPreviewWindow setAcceptsMouseMovedEvents:YES];
+ hudTimerSeconds = 0;
[self pictureSliderChanged:nil];
[self startReceivingLibhbNotifications];
}
@@ -196,6 +85,7 @@
[fPictureSlider setWantsLayer:YES];
[fFullScreenToggleButton setWantsLayer:YES];
[fPictureSettingsToggleButton setWantsLayer:YES];
+ [fScaleToScreenToggleButton setWantsLayer:YES];
[fCreatePreviewMovieButton setWantsLayer:YES];
[fEncodingControlBox setWantsLayer:YES];
@@ -323,8 +213,10 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
[fPictureView setHidden:NO];
[fPictureView setImage: [self imageForPicture: fPicture]];
+
- NSSize displaySize = NSMakeSize( ( CGFloat )fTitle->width, ( CGFloat )fTitle->height );
+
+ NSSize displaySize = NSMakeSize( ( CGFloat )fTitle->width, ( CGFloat )fTitle->height );
/* Set the picture size display fields below the Preview Picture*/
if( fTitle->job->pixel_ratio == 1 ) // Original PAR Implementation
{
@@ -354,7 +246,8 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
}
NSSize viewSize = [self optimalViewSizeForImageSize:displaySize];
- if( [self viewNeedsToResizeToSize:viewSize] )
+ /* we also need to take into account scaling to full screen to activate switching the view size */
+ if( [self viewNeedsToResizeToSize:viewSize])
{
/* In the case of loose anamorphic, do not resize the window when scaling down */
// FIX ME: we need a new way to do this as we do not havefWidthField anymore
@@ -365,7 +258,8 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
[self setViewSize:viewSize];
}
}
-
+
+
// Show the scaled text (use the height to check since the width can vary
// with anamorphic video).
if( ( ( int )viewSize.height ) != fTitle->height )
@@ -375,22 +269,24 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
NSLocalizedString( @" (Preview scaled to %.0f%% actual size)",
@"String shown when a preview is scaled" ),
scale * 100.0];
- [fInfoField setStringValue: [[fInfoField stringValue] stringByAppendingString:scaleString]];
+ [fscaleInfoField setStringValue: [NSString stringWithFormat:
+ @"%@", scaleString]];
+
+ }
+ else
+ {
+ [fscaleInfoField setStringValue: @""];
}
}
- (IBAction) previewDurationPopUpChanged: (id) sender
{
-
-[[NSUserDefaults standardUserDefaults] setObject:[fPreviewMovieLengthPopUp titleOfSelectedItem] forKey:@"PreviewLength"];
-
-}
+ [[NSUserDefaults standardUserDefaults] setObject:[fPreviewMovieLengthPopUp titleOfSelectedItem] forKey:@"PreviewLength"];
+
+}
-
-
-
- (IBAction) SettingsChanged: (id) sender
{
// Purge the existing picture previews so they get recreated the next time
@@ -424,18 +320,133 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
{
[self SetTitle:title];
[self showWindow:sender];
+ [fPreviewWindow setAcceptsMouseMovedEvents:YES];
isFullScreen = NO;
+ scaleToScreen = NO;
hudTimerSeconds = 0;
+ [self startHudTimer];
}
- (IBAction)showPictureSettings:(id)sender
{
-[fHBController showPicturePanel:self];
+ [fHBController showPicturePanel:self];
}
+#pragma mark Hud Control Overlay
+- (void) mouseMoved:(NSEvent *)theEvent
+{
+ [super mouseMoved:theEvent];
+
+ if (isEncoding == NO)
+ {
+ if (hudTimerSeconds == 0)
+ {
+ hudTimerSeconds ++;
+ [self startHudTimer];
+ }
+
+ if (hudTimerSeconds > 20)
+ {
+
+
+ [self stopHudTimer];
+ [self showHideHudControls];
+ }
+
+ }
+}
-#pragma mark Cocoa For Fullscreen Mode
+- (void) startHudTimer
+{
+ if (!fHudTimer)
+ {
+ fHudTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(hudTimerFired:) userInfo:nil repeats:YES];
+ [fHudTimer retain];
+ }
+}
+
+- (void) stopHudTimer
+{
+ if (fHudTimer)
+ {
+ [fHudTimer invalidate];
+ [fHudTimer release];
+ fHudTimer = nil;
+ hudTimerSeconds = 0;
+ }
+}
+
+- (void) hudTimerFired: (NSTimer*)theTimer
+{
+ hudTimerSeconds ++;
+ [self showHideHudControls];
+
+}
+
+- (void) showHideHudControls
+{
+ /* Test for mouse location to show/hide hud controls */
+ NSPoint mouseLoc;
+ NSRect targetFrame;
+ NSRect controlBoxFrame;
+ targetFrame = [fPictureViewArea frame];
+ controlBoxFrame = [fPictureControlBox frame];
+
+ if (isFullScreen)
+ {
+ mouseLoc = [fFullScreenWindow mouseLocationOutsideOfEventStream];
+ [fScaleToScreenToggleButton setHidden:NO];
+ }
+ else
+ {
+ mouseLoc = [fPreviewWindow mouseLocationOutsideOfEventStream];
+ [fScaleToScreenToggleButton setHidden:YES];
+ }
+
+ /* if the pointer is inside the picture view areas but not
+ * in the controlbox, check the hudTimerSeconds to see if
+ * its in the allowable time span
+ */
+ if ( hudTimerSeconds > 0 && hudTimerSeconds < 20)
+ {
+
+ if (isEncoding == NO)
+ {
+ if (NSPointInRect (mouseLoc, controlBoxFrame))
+ {
+ /* Mouse is over the preview area so show hud controls so just
+ * reset the timer to keep the control box visible
+ */
+ [fPictureControlBox setHidden: NO];
+ hudTimerSeconds = 1;
+ return;
+ }
+ /* Re-verify we are within the target frame */
+ if (NSPointInRect (mouseLoc, targetFrame))
+ {
+ /* Mouse is over the preview area so show hud controls */
+ [[fPictureControlBox animator] setHidden: NO];
+ /* increment our timer by one */
+ hudTimerSeconds ++;
+ }
+ else
+ {
+ [[fPictureControlBox animator] setHidden: YES];
+ [self stopHudTimer];
+ }
+ }
+
+ }
+ else
+ {
+ [[fPictureControlBox animator] setHidden: YES];
+ }
+
+}
+
+
+#pragma mark Fullscreen Mode
- (IBAction)toggleScreenMode:(id)sender
{
@@ -449,6 +460,32 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
}
}
+- (IBAction)toggleScaleToScreen:(id)sender
+{
+ if (scaleToScreen == YES)
+ {
+ scaleToScreen = NO;
+ /* make sure we are set to a still preview */
+ [self pictureSliderChanged:nil];
+ [fScaleToScreenToggleButton setTitle:@"<->"];
+ }
+ else
+ {
+ scaleToScreen = YES;
+ /* make sure we are set to a still preview */
+ [self pictureSliderChanged:nil];
+ [fScaleToScreenToggleButton setTitle:@">-<"];
+ }
+
+ /* Actually perform the scaling */
+ /*
+ NSSize displaySize = NSMakeSize( ( CGFloat )fTitle->width, ( CGFloat )fTitle->height );
+ NSSize viewSize = [self optimalViewSizeForImageSize:displaySize];
+ [self resizeSheetForViewSize:viewSize];
+ [self setViewSize:viewSize];
+ */
+}
+
- (BOOL)fullScreen
{
return isFullScreen;
@@ -467,8 +504,15 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
if (err == CGDisplayNoErr)
{
+ /* make sure we are set to a still preview and not scaled to screen */
+ scaleToScreen = NO;
+ [self pictureSliderChanged:nil];
+
// Create the full-screen window.
- NSRect winRect = [fPreviewWindow frame];
+ //NSRect winRect = [mainScreen frame];
+ //fPictureViewArea
+ NSRect winRect = [fPictureViewArea frame];
+
fFullScreenWindow = [[NSWindow alloc] initWithContentRect:winRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
@@ -502,11 +546,7 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
[fFullScreenWindow setFrameOrigin:windowOrigin];
- /* Using the simple center method for NSWindow
- * though note this will cause the window to be slightly
- * higher than center
- */
- //[fFullScreenWindow center];
+
/* lets kill the timer for now */
[self stopReceivingLibhbNotifications];
@@ -524,9 +564,6 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
// Show the window.
[fFullScreenWindow makeKeyAndOrderFront:self];
- [fPreviewWindow setAcceptsMouseMovedEvents:NO];
- [fFullScreenWindow setAcceptsMouseMovedEvents:YES];
-
/* Change the name of fFullScreenToggleButton appropriately */
[fFullScreenToggleButton setTitle: @"Windowed"];
@@ -534,12 +571,17 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
[self startReceivingLibhbNotifications];
isFullScreen = YES;
+ [fScaleToScreenToggleButton setHidden:NO];
/* make sure we are set to a still preview */
[self pictureSliderChanged:nil];
- /* set the picture settings pallete above the shielding level */
- //[fHBController picturePanelFullScreen];
+ //[fPreviewWindow setAcceptsMouseMovedEvents:NO];
+ [fFullScreenWindow setAcceptsMouseMovedEvents:YES];
+
+
+ hudTimerSeconds = 0;
+ [self startHudTimer];
}
}
@@ -548,13 +590,16 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
/* Get the screen info to release the display but don't actually do
* it until the windowed screen is setup.
- */
+ */
+ scaleToScreen = NO;
+ [self pictureSliderChanged:nil];
+ [fScaleToScreenToggleButton setTitle:@"<->"];
+
NSScreen* mainScreen = [NSScreen mainScreen];
NSDictionary* screenInfo = [mainScreen deviceDescription];
NSNumber* screenID = [screenInfo objectForKey:@"NSScreenNumber"];
CGDirectDisplayID displayID = (CGDirectDisplayID)[screenID longValue];
- [fFullScreenWindow setAcceptsMouseMovedEvents:NO];
[fFullScreenWindow dealloc];
[fFullScreenWindow release];
@@ -569,22 +614,28 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
/* Set the window back to regular level */
[fPreviewWindow setLevel:NSNormalWindowLevel];
- [fPreviewWindow setAcceptsMouseMovedEvents:YES];
-
-
/* Set the isFullScreen flag back to NO */
isFullScreen = NO;
+ scaleToScreen = NO;
+ /* make sure we are set to a still preview */
+ [self pictureSliderChanged:nil];
[self showPreviewWindow:nil];
/* Change the name of fFullScreenToggleButton appropriately */
[fFullScreenToggleButton setTitle: @"Full Screen"];
-
+ // [fScaleToScreenToggleButton setHidden:YES];
/* set the picture settings pallete back to normal level */
[fHBController picturePanelWindowed];
/* Release the display now that the we are back in windowed mode */
CGDisplayRelease(displayID);
+ [fPreviewWindow setAcceptsMouseMovedEvents:YES];
+ //[fFullScreenWindow setAcceptsMouseMovedEvents:NO];
+
+ hudTimerSeconds = 0;
+ [self startHudTimer];
+
}
@@ -1016,14 +1067,13 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
/* We need to find out if the preview movie needs to be scaled down so
* that it doesn't overflow our available viewing container (just like for image
* in -displayPreview) for HD sources, etc. [fPictureViewArea frame].size.height*/
- if( ((int)movieBounds.size.height) > [fPictureView frame].size.height )
+ if( ((int)movieBounds.size.height) > [fPictureView frame].size.height || scaleToScreen == YES)
{
/* The preview movie would be larger than the available viewing area
* in the preview movie, so we go ahead and scale it down to the same size
* as the still preview or we readjust our window to allow for the added height if need be
*/
NSSize displaySize = NSMakeSize( (float)movieBounds.size.width, (float)movieBounds.size.height );
- //NSSize displaySize = NSMakeSize( (float)fTitle->width, (float)fTitle->height );
NSSize viewSize = [self optimalViewSizeForImageSize:displaySize];
if( [self viewNeedsToResizeToSize:viewSize] )
{
@@ -1033,6 +1083,7 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
}
+ [fMovieView setPreservesAspectRatio:YES];
[fMovieView setFrameSize:viewSize];
}
else
@@ -1040,8 +1091,12 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
/* Since the preview movie is smaller than the available viewing area
* we can go ahead and use the preview movies native size */
[fMovieView setFrameSize:movieBounds.size];
+
}
+
+
+
// lets reposition the movie if need be
NSPoint origin = [fPictureViewArea frame].origin;
@@ -1141,13 +1196,40 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
resultSize.height = maxHeight;
}
- return resultSize;
+ if (scaleToScreen == YES)
+ {
+ //CGFloat scaleToScreenWidth;
+ //CGFloat scaleToScreenHeight;
+ CGFloat screenAspect;
+ CGFloat viewAreaAspect;
+ //note, a mbp 15" at 1440 x 900 is a 1.6 ar
+ screenAspect = screenSize.width / screenSize.height;
+
+ // Note, a standard dvd will use 720 x 480 which is a 1.5
+ viewAreaAspect = viewAreaSize.width / viewAreaSize.height;
+
+ if (screenAspect < viewAreaAspect)
+ {
+ resultSize.width = screenSize.width;
+ resultSize.height = (screenSize.width / viewAreaAspect);
+ }
+ else
+ {
+ resultSize.height = screenSize.height;
+ resultSize.width = resultSize.height * viewAreaAspect;
+ }
+
+ }
+
+ return resultSize;
+
+
}
//
// -[PictureController(Private) resizePanelForViewSize:animate:]
//
-// Resizes the entire sheet to accomodate a view of a particular size.
+// Resizes the entire window to accomodate a view of a particular size.
//
- (void)resizeSheetForViewSize: (NSSize)viewSize
{
@@ -1155,7 +1237,7 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
NSSize currentSize = [fPictureViewArea frame].size;
CGFloat deltaX = viewSize.width - currentSize.width;
CGFloat deltaY = viewSize.height - currentSize.height;
-
+
// Now resize the whole panel by those same deltas, but don't exceed the min
NSRect frame = [[self window] frame];
NSSize maxSize = [[self window] maxSize];
@@ -1172,24 +1254,31 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
frame.size.height = minSize.height;
}
-
+
// But now the sheet is off-center, so also shift the origin to center it and
// keep the top aligned.
if( frame.size.width != [[self window] frame].size.width )
frame.origin.x -= (deltaX / 2.0);
-
+
if (isFullScreen)
{
- if( frame.size.height != [[self window] frame].size.height )
- frame.origin.y -= (deltaY / 2.0);
+ if( frame.size.height != [[self window] frame].size.height )
+ {
+ frame.origin.y -= (deltaY / 2.0);
+ }
+ else
+ {
+ if( frame.size.height != [[self window] frame].size.height )
+ frame.origin.y -= deltaY;
+ }
+
+ [[self window] setFrame:frame display:YES animate:NO];
}
else
{
- if( frame.size.height != [[self window] frame].size.height )
- frame.origin.y -= deltaY;
+ [[self window] setFrame:frame display:YES animate:YES];
}
-
- [[self window] setFrame:frame display:YES animate:YES];
+
}
//
diff --git a/macosx/PictureController.mm b/macosx/PictureController.mm
index 8752c24f5..9cf401098 100644
--- a/macosx/PictureController.mm
+++ b/macosx/PictureController.mm
@@ -56,7 +56,7 @@
{
int32_t shieldLevel = CGShieldingWindowLevel();
- [fPictureWindow setLevel:shieldLevel];
+ [fPictureWindow setLevel:shieldLevel + 1];
// Show the window.
[fPictureWindow makeKeyAndOrderFront:self];
}
@@ -182,8 +182,6 @@
MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
MaxOutputHeight = title->height - job->crop[0] - job->crop[1];
- //[fPreviewController SetTitle:fTitle];
-
[self SettingsChanged: nil];
}