[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 1/5] ui/cocoa: Set UI information
From: |
Gerd Hoffmann |
Subject: |
[PULL 1/5] ui/cocoa: Set UI information |
Date: |
Thu, 24 Jun 2021 10:32:42 +0200 |
From: Akihiko Odaki <akihiko.odaki@gmail.com>
Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Message-Id: <20210616141910.54188-1-akihiko.odaki@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
ui/cocoa.m | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index 37e1fb52eb4d..530c506489b2 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -518,6 +518,43 @@ QemuCocoaView *cocoaView;
}
}
+- (void) updateUIInfo
+{
+ NSSize frameSize;
+ QemuUIInfo info;
+
+ if (!qemu_console_is_graphic(dcl.con)) {
+ return;
+ }
+
+ if ([self window]) {
+ NSDictionary *description = [[[self window] screen] deviceDescription];
+ CGDirectDisplayID display = [[description
objectForKey:@"NSScreenNumber"] unsignedIntValue];
+ NSSize screenSize = [[[self window] screen] frame].size;
+ CGSize screenPhysicalSize = CGDisplayScreenSize(display);
+
+ frameSize = isFullscreen ? screenSize : [self frame].size;
+ info.width_mm = frameSize.width / screenSize.width *
screenPhysicalSize.width;
+ info.height_mm = frameSize.height / screenSize.height *
screenPhysicalSize.height;
+ } else {
+ frameSize = [self frame].size;
+ info.width_mm = 0;
+ info.height_mm = 0;
+ }
+
+ info.xoff = 0;
+ info.yoff = 0;
+ info.width = frameSize.width;
+ info.height = frameSize.height;
+
+ dpy_set_ui_info(dcl.con, &info);
+}
+
+- (void)viewDidMoveToWindow
+{
+ [self updateUIInfo];
+}
+
- (void) switchSurface:(pixman_image_t *)image
{
COCOA_DEBUG("QemuCocoaView: switchSurface\n");
@@ -1172,6 +1209,16 @@ QemuCocoaView *cocoaView;
return [self verifyQuit];
}
+- (void)windowDidChangeScreen:(NSNotification *)notification
+{
+ [cocoaView updateUIInfo];
+}
+
+- (void)windowDidResize:(NSNotification *)notification
+{
+ [cocoaView updateUIInfo];
+}
+
/* Called when the user clicks on a window's close button */
- (BOOL)windowShouldClose:(id)sender
{
@@ -1836,6 +1883,8 @@ static void cocoa_switch(DisplayChangeListener *dcl,
COCOA_DEBUG("qemu_cocoa: cocoa_switch\n");
+ [cocoaView updateUIInfo];
+
// The DisplaySurface will be freed as soon as this callback returns.
// We take a reference to the underlying pixman image here so it does
// not disappear from under our feet; the switchSurface method will
--
2.31.1
- [PULL 0/5] Ui 20210624 patches, Gerd Hoffmann, 2021/06/24
- [PULL 1/5] ui/cocoa: Set UI information,
Gerd Hoffmann <=
- [PULL 3/5] input: Add lang1 and lang2 to QKeyCode, Gerd Hoffmann, 2021/06/24
- [PULL 2/5] ui/cocoa: Add clipboard support, Gerd Hoffmann, 2021/06/24
- [PULL 4/5] Add display suboptions to man pages, Gerd Hoffmann, 2021/06/24
- [PULL 5/5] ui: Make the DisplayType enum entries conditional, Gerd Hoffmann, 2021/06/24
- Re: [PULL 0/5] Ui 20210624 patches, Peter Maydell, 2021/06/25