diff options
author | dynaflash <[email protected]> | 2009-01-21 03:46:14 +0000 |
---|---|---|
committer | dynaflash <[email protected]> | 2009-01-21 03:46:14 +0000 |
commit | e22c0e8c13d799104e616de5c469cb11b4defca0 (patch) | |
tree | 445364840421e5f40d84ec04e29246c8194ba9ce | |
parent | cb23938da2747334ee19e359a64db9bb9eec4a55 (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.xib | 142 | ||||
-rw-r--r-- | macosx/HBPreviewController.h | 6 | ||||
-rw-r--r-- | macosx/HBPreviewController.mm | 399 | ||||
-rw-r--r-- | macosx/PictureController.mm | 4 |
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]; } |