[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 01/10] ui/cocoa: Fix several full screen issues on Ma
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 01/10] ui/cocoa: Fix several full screen issues on Mac OS X |
Date: |
Tue, 19 May 2015 09:23:46 +0100 |
From: Programmingkid <address@hidden>
This patch makes several changes:
- Minimizes distorted full screen display by respecting aspect
ratios.
- Makes full screen mode available on Mac OS 10.7 and higher.
- Allows user to decide if video should be stretched to fill the
screen, using a menu item called "Zoom To Fit".
- Hides the normalWindow so it won't show up in full screen mode.
- Allows user to exit full screen mode.
Signed-off-by: John Arbuckle <address@hidden>
[PMM: minor whitespace tweaks, remove incorrectly duplicated
use of 'f' menu accelerator key]
Signed-off-by: Peter Maydell <address@hidden>
---
ui/cocoa.m | 49 +++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index d37c29b..351b71f 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -64,6 +64,7 @@ static int last_buttons;
int gArgc;
char **gArgv;
+bool stretch_video;
// keymap conversion
int keymap[] =
@@ -418,6 +419,18 @@ QemuCocoaView *cocoaView;
if (isFullscreen) {
cdx = [[NSScreen mainScreen] frame].size.width / (float)screen.width;
cdy = [[NSScreen mainScreen] frame].size.height / (float)screen.height;
+
+ /* stretches video, but keeps same aspect ratio */
+ if (stretch_video == true) {
+ /* use smallest stretch value - prevents clipping on sides */
+ if (MIN(cdx, cdy) == cdx) {
+ cdy = cdx;
+ } else {
+ cdx = cdy;
+ }
+ } else { /* No stretching */
+ cdx = cdy = 1;
+ }
cw = screen.width * cdx;
ch = screen.height * cdy;
cx = ([[NSScreen mainScreen] frame].size.width - cw) / 2.0;
@@ -502,6 +515,7 @@ QemuCocoaView *cocoaView;
#endif
} else { // switch from desktop to fullscreen
isFullscreen = TRUE;
+ [normalWindow orderOut: nil]; /* Hide the window */
[self grabMouse];
[self setContentDimensions];
// test if host supports "enterFullScreenMode:withOptions" at compile time
@@ -518,8 +532,11 @@ QemuCocoaView *cocoaView;
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
+ [fullScreenWindow setAcceptsMouseMovedEvents: YES];
[fullScreenWindow setHasShadow:NO];
- [fullScreenWindow setContentView:self];
+ [fullScreenWindow setBackgroundColor: [NSColor blackColor]];
+ [self setFrame:NSMakeRect(cx, cy, cw, ch)];
+ [[fullScreenWindow contentView] addSubview: self];
[fullScreenWindow makeKeyAndOrderFront:self];
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
}
@@ -561,7 +578,7 @@ QemuCocoaView *cocoaView;
}
// release Mouse grab when pressing ctrl+alt
- if (!isFullscreen && ([event modifierFlags] & NSControlKeyMask) &&
([event modifierFlags] & NSAlternateKeyMask)) {
+ if (([event modifierFlags] & NSControlKeyMask) && ([event
modifierFlags] & NSAlternateKeyMask)) {
[self ungrabMouse];
}
break;
@@ -798,9 +815,11 @@ QemuCocoaView *cocoaView;
}
- (void)startEmulationWithArgc:(int)argc argv:(char**)argv;
- (void)openPanelDidEnd:(NSOpenPanel *)sheet returnCode:(int)returnCode
contextInfo:(void *)contextInfo;
+- (void)doToggleFullScreen:(id)sender;
- (void)toggleFullScreen:(id)sender;
- (void)showQEMUDoc:(id)sender;
- (void)showQEMUTec:(id)sender;
+- (void)zoomToFit:(id) sender;
@end
@implementation QemuCocoaAppController
@@ -832,7 +851,7 @@ QemuCocoaView *cocoaView;
[normalWindow useOptimizedDrawing:YES];
[normalWindow makeKeyAndOrderFront:self];
[normalWindow center];
-
+ stretch_video = false;
}
return self;
}
@@ -921,6 +940,16 @@ QemuCocoaView *cocoaView;
[self startEmulationWithArgc:3 argv:(char**)argv];
}
}
+
+/* We abstract the method called by the Enter Fullscreen menu item
+ * because Mac OS 10.7 and higher disables it. This is because of the
+ * menu item's old selector's name toggleFullScreen:
+ */
+- (void) doToggleFullScreen:(id)sender
+{
+ [self toggleFullScreen:(id)sender];
+}
+
- (void)toggleFullScreen:(id)sender
{
COCOA_DEBUG("QemuCocoaAppController: toggleFullScreen\n");
@@ -943,6 +972,17 @@ QemuCocoaView *cocoaView;
[[NSWorkspace sharedWorkspace] openFile:[NSString
stringWithFormat:@"%@/../doc/qemu/qemu-tech.html",
[[NSBundle mainBundle] resourcePath]] withApplication:@"Help Viewer"];
}
+
+/* Stretches video to fit host monitor size */
+- (void)zoomToFit:(id) sender
+{
+ stretch_video = !stretch_video;
+ if (stretch_video == true) {
+ [sender setState: NSOnState];
+ } else {
+ [sender setState: NSOffState];
+ }
+}
@end
@@ -1005,7 +1045,8 @@ int main (int argc, const char * argv[]) {
// View menu
menu = [[NSMenu alloc] initWithTitle:@"View"];
- [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen"
action:@selector(toggleFullScreen:) keyEquivalent:@"f"] autorelease]]; //
Fullscreen
+ [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen"
action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] autorelease]]; //
Fullscreen
+ [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Zoom To Fit"
action:@selector(zoomToFit:) keyEquivalent:@""] autorelease]];
menuItem = [[[NSMenuItem alloc] initWithTitle:@"View" action:nil
keyEquivalent:@""] autorelease];
[menuItem setSubmenu:menu];
[[NSApp mainMenu] addItem:menuItem];
--
1.9.1
- [Qemu-devel] [PULL 00/10] cocoa queue, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 10/10] ui/cocoa: Add console items to the View menu, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 09/10] ui/cocoa: Avoid deprecated NSOKButton/NSCancelButton constants, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 05/10] ui/cocoa: Remove compatibility ifdefs for OSX 10.4, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 04/10] ui/cocoa: Drop tests for CGImageCreateWithImageInRect support, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 01/10] ui/cocoa: Fix several full screen issues on Mac OS X,
Peter Maydell <=
- [Qemu-devel] [PULL 06/10] ui/cocoa: openPanelDidEnd returnCode should be NSInteger, not int, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 07/10] ui/cocoa: Declare that QemuCocoaAppController implements NSApplicationDelegate, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 08/10] ui/cocoa: Don't use NSWindow useOptimizedDrawing on OSX 10.10 and up, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 02/10] ui/cocoa: Make -full-screen option work on Mac OS X, Peter Maydell, 2015/05/19
- [Qemu-devel] [PULL 03/10] Makefile.target: set icon for binary file on Mac OS X, Peter Maydell, 2015/05/19
- Re: [Qemu-devel] [PULL 00/10] cocoa queue, Peter Maydell, 2015/05/19