[PATCH v11 6/6] ui/cocoa: Remove stretch_video flag

Akihiko Odaki posted 6 patches 8 months, 2 weeks ago
Maintainers: Peter Maydell <peter.maydell@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Akihiko Odaki <akihiko.odaki@daynix.com>, Gerd Hoffmann <kraxel@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>
There is a newer version of this series
[PATCH v11 6/6] ui/cocoa: Remove stretch_video flag
Posted by Akihiko Odaki 8 months, 2 weeks ago
Evaluate [normalWindow styleMask] & NSWindowStyleMaskResizable instead.

Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
---
 ui/cocoa.m | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/ui/cocoa.m b/ui/cocoa.m
index 81de8d92669b..401ed0c3f1f5 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -103,7 +103,6 @@ static void cocoa_switch(DisplayChangeListener *dcl,
 static int left_command_key_enabled = 1;
 static bool swap_opt_cmd;
 
-static bool stretch_video;
 static NSTextField *pauseLabel;
 
 static bool allow_events;
@@ -533,7 +532,7 @@ - (void) resizeWindow
 {
     [[self window] setContentAspectRatio:NSMakeSize(screen.width, screen.height)];
 
-    if (!stretch_video) {
+    if (!([[self window] styleMask] & NSWindowStyleMaskResizable)) {
         [[self window] setContentSize:NSMakeSize(screen.width, screen.height)];
         [[self window] center];
     } else if ([[self window] styleMask] & NSWindowStyleMaskFullScreen) {
@@ -1296,7 +1295,7 @@ - (BOOL)windowShouldClose:(id)sender
 
 - (NSSize) window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
 {
-    if (stretch_video) {
+    if ([normalWindow styleMask] & NSWindowStyleMaskResizable) {
         return [cocoaView fixZoomedFullScreenSize:proposedSize];
     }
 
@@ -1377,8 +1376,7 @@ - (void)showQEMUDoc:(id)sender
 /* Stretches video to fit host monitor size */
 - (void)zoomToFit:(id) sender
 {
-    stretch_video = !stretch_video;
-    if (stretch_video == true) {
+    if (([normalWindow styleMask] & NSWindowStyleMaskResizable) == 0) {
         [normalWindow setStyleMask:[normalWindow styleMask] | NSWindowStyleMaskResizable];
         [sender setState: NSControlStateValueOn];
     } else {
@@ -1650,7 +1648,7 @@ static void create_initial_menus(void)
     menu = [[NSMenu alloc] initWithTitle:@"View"];
     [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen" action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] autorelease]]; // Fullscreen
     menuItem = [[[NSMenuItem alloc] initWithTitle:@"Zoom To Fit" action:@selector(zoomToFit:) keyEquivalent:@""] autorelease];
-    [menuItem setState: stretch_video ? NSControlStateValueOn : NSControlStateValueOff];
+    [menuItem setState: [normalWindow styleMask] & NSWindowStyleMaskResizable ? NSControlStateValueOn : NSControlStateValueOff];
     [menu addItem: menuItem];
     menuItem = [[[NSMenuItem alloc] initWithTitle:@"View" action:nil keyEquivalent:@""] autorelease];
     [menuItem setSubmenu:menu];
@@ -2036,7 +2034,6 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
     }
 
     if (opts->u.cocoa.has_zoom_to_fit && opts->u.cocoa.zoom_to_fit) {
-        stretch_video = true;
         [normalWindow setStyleMask:[normalWindow styleMask] | NSWindowStyleMaskResizable];
     }
 

-- 
2.43.1
Re: [PATCH v11 6/6] ui/cocoa: Remove stretch_video flag
Posted by Peter Maydell 8 months, 1 week ago
On Sat, 17 Feb 2024 at 11:19, Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>
> Evaluate [normalWindow styleMask] & NSWindowStyleMaskResizable instead.
>
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
> ---
>  ui/cocoa.m | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/ui/cocoa.m b/ui/cocoa.m
> index 81de8d92669b..401ed0c3f1f5 100644
> --- a/ui/cocoa.m
> +++ b/ui/cocoa.m
> @@ -103,7 +103,6 @@ static void cocoa_switch(DisplayChangeListener *dcl,
>  static int left_command_key_enabled = 1;
>  static bool swap_opt_cmd;
>
> -static bool stretch_video;
>  static NSTextField *pauseLabel;
>
>  static bool allow_events;
> @@ -533,7 +532,7 @@ - (void) resizeWindow
>  {
>      [[self window] setContentAspectRatio:NSMakeSize(screen.width, screen.height)];
>
> -    if (!stretch_video) {
> +    if (!([[self window] styleMask] & NSWindowStyleMaskResizable)) {
>          [[self window] setContentSize:NSMakeSize(screen.width, screen.height)];
>          [[self window] center];
>      } else if ([[self window] styleMask] & NSWindowStyleMaskFullScreen) {
> @@ -1296,7 +1295,7 @@ - (BOOL)windowShouldClose:(id)sender
>
>  - (NSSize) window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
>  {
> -    if (stretch_video) {
> +    if ([normalWindow styleMask] & NSWindowStyleMaskResizable) {
>          return [cocoaView fixZoomedFullScreenSize:proposedSize];
>      }
>
> @@ -1377,8 +1376,7 @@ - (void)showQEMUDoc:(id)sender
>  /* Stretches video to fit host monitor size */
>  - (void)zoomToFit:(id) sender
>  {
> -    stretch_video = !stretch_video;
> -    if (stretch_video == true) {
> +    if (([normalWindow styleMask] & NSWindowStyleMaskResizable) == 0) {
>          [normalWindow setStyleMask:[normalWindow styleMask] | NSWindowStyleMaskResizable];
>          [sender setState: NSControlStateValueOn];
>      } else {
> @@ -1650,7 +1648,7 @@ static void create_initial_menus(void)
>      menu = [[NSMenu alloc] initWithTitle:@"View"];
>      [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen" action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] autorelease]]; // Fullscreen
>      menuItem = [[[NSMenuItem alloc] initWithTitle:@"Zoom To Fit" action:@selector(zoomToFit:) keyEquivalent:@""] autorelease];
> -    [menuItem setState: stretch_video ? NSControlStateValueOn : NSControlStateValueOff];
> +    [menuItem setState: [normalWindow styleMask] & NSWindowStyleMaskResizable ? NSControlStateValueOn : NSControlStateValueOff];
>      [menu addItem: menuItem];
>      menuItem = [[[NSMenuItem alloc] initWithTitle:@"View" action:nil keyEquivalent:@""] autorelease];
>      [menuItem setSubmenu:menu];
> @@ -2036,7 +2034,6 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
>      }
>
>      if (opts->u.cocoa.has_zoom_to_fit && opts->u.cocoa.zoom_to_fit) {
> -        stretch_video = true;
>          [normalWindow setStyleMask:[normalWindow styleMask] | NSWindowStyleMaskResizable];
>      }

It's nice to get rid of the boolean, but
 [normalWindow styleMask] & NSWindowStyleMaskResizable
feels a bit clunky -- maybe we should wrap it in a method with
a suitable name ? (isZoomToFit, maybe? but I'm not too familiar
with what cocoa function naming style is.)

-- PMM
Re: [PATCH v11 6/6] ui/cocoa: Remove stretch_video flag
Posted by Akihiko Odaki 8 months, 1 week ago
On 2024/02/23 1:53, Peter Maydell wrote:
> On Sat, 17 Feb 2024 at 11:19, Akihiko Odaki <akihiko.odaki@daynix.com> wrote:
>>
>> Evaluate [normalWindow styleMask] & NSWindowStyleMaskResizable instead.
>>
>> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
>> ---
>>   ui/cocoa.m | 11 ++++-------
>>   1 file changed, 4 insertions(+), 7 deletions(-)
>>
>> diff --git a/ui/cocoa.m b/ui/cocoa.m
>> index 81de8d92669b..401ed0c3f1f5 100644
>> --- a/ui/cocoa.m
>> +++ b/ui/cocoa.m
>> @@ -103,7 +103,6 @@ static void cocoa_switch(DisplayChangeListener *dcl,
>>   static int left_command_key_enabled = 1;
>>   static bool swap_opt_cmd;
>>
>> -static bool stretch_video;
>>   static NSTextField *pauseLabel;
>>
>>   static bool allow_events;
>> @@ -533,7 +532,7 @@ - (void) resizeWindow
>>   {
>>       [[self window] setContentAspectRatio:NSMakeSize(screen.width, screen.height)];
>>
>> -    if (!stretch_video) {
>> +    if (!([[self window] styleMask] & NSWindowStyleMaskResizable)) {
>>           [[self window] setContentSize:NSMakeSize(screen.width, screen.height)];
>>           [[self window] center];
>>       } else if ([[self window] styleMask] & NSWindowStyleMaskFullScreen) {
>> @@ -1296,7 +1295,7 @@ - (BOOL)windowShouldClose:(id)sender
>>
>>   - (NSSize) window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
>>   {
>> -    if (stretch_video) {
>> +    if ([normalWindow styleMask] & NSWindowStyleMaskResizable) {
>>           return [cocoaView fixZoomedFullScreenSize:proposedSize];
>>       }
>>
>> @@ -1377,8 +1376,7 @@ - (void)showQEMUDoc:(id)sender
>>   /* Stretches video to fit host monitor size */
>>   - (void)zoomToFit:(id) sender
>>   {
>> -    stretch_video = !stretch_video;
>> -    if (stretch_video == true) {
>> +    if (([normalWindow styleMask] & NSWindowStyleMaskResizable) == 0) {
>>           [normalWindow setStyleMask:[normalWindow styleMask] | NSWindowStyleMaskResizable];
>>           [sender setState: NSControlStateValueOn];
>>       } else {
>> @@ -1650,7 +1648,7 @@ static void create_initial_menus(void)
>>       menu = [[NSMenu alloc] initWithTitle:@"View"];
>>       [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter Fullscreen" action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] autorelease]]; // Fullscreen
>>       menuItem = [[[NSMenuItem alloc] initWithTitle:@"Zoom To Fit" action:@selector(zoomToFit:) keyEquivalent:@""] autorelease];
>> -    [menuItem setState: stretch_video ? NSControlStateValueOn : NSControlStateValueOff];
>> +    [menuItem setState: [normalWindow styleMask] & NSWindowStyleMaskResizable ? NSControlStateValueOn : NSControlStateValueOff];
>>       [menu addItem: menuItem];
>>       menuItem = [[[NSMenuItem alloc] initWithTitle:@"View" action:nil keyEquivalent:@""] autorelease];
>>       [menuItem setSubmenu:menu];
>> @@ -2036,7 +2034,6 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
>>       }
>>
>>       if (opts->u.cocoa.has_zoom_to_fit && opts->u.cocoa.zoom_to_fit) {
>> -        stretch_video = true;
>>           [normalWindow setStyleMask:[normalWindow styleMask] | NSWindowStyleMaskResizable];
>>       }
> 
> It's nice to get rid of the boolean, but
>   [normalWindow styleMask] & NSWindowStyleMaskResizable
> feels a bit clunky -- maybe we should wrap it in a method with
> a suitable name ? (isZoomToFit, maybe? but I'm not too familiar
> with what cocoa function naming style is.)

I don't think we should have a method for this. It's verbose but the 
main reason of that is NSWindowStyleMaskResizable is wordy; otherwise 
it's quite a simple. There are few places that use this construct after all.

In any case, I put a bit more effort to simplify style mask references 
with v12 so please check it out.

Regards,
Akihiko Odaki
Re: [PATCH v11 6/6] ui/cocoa: Remove stretch_video flag
Posted by BALATON Zoltan 8 months, 1 week ago
On Sat, 24 Feb 2024, Akihiko Odaki wrote:
> On 2024/02/23 1:53, Peter Maydell wrote:
>> On Sat, 17 Feb 2024 at 11:19, Akihiko Odaki <akihiko.odaki@daynix.com> 
>> wrote:
>>> 
>>> Evaluate [normalWindow styleMask] & NSWindowStyleMaskResizable instead.
>>> 
>>> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
>>> ---
>>>   ui/cocoa.m | 11 ++++-------
>>>   1 file changed, 4 insertions(+), 7 deletions(-)
>>> 
>>> diff --git a/ui/cocoa.m b/ui/cocoa.m
>>> index 81de8d92669b..401ed0c3f1f5 100644
>>> --- a/ui/cocoa.m
>>> +++ b/ui/cocoa.m
>>> @@ -103,7 +103,6 @@ static void cocoa_switch(DisplayChangeListener *dcl,
>>>   static int left_command_key_enabled = 1;
>>>   static bool swap_opt_cmd;
>>> 
>>> -static bool stretch_video;
>>>   static NSTextField *pauseLabel;
>>>
>>>   static bool allow_events;
>>> @@ -533,7 +532,7 @@ - (void) resizeWindow
>>>   {
>>>       [[self window] setContentAspectRatio:NSMakeSize(screen.width, 
>>> screen.height)];
>>> 
>>> -    if (!stretch_video) {
>>> +    if (!([[self window] styleMask] & NSWindowStyleMaskResizable)) {
>>>           [[self window] setContentSize:NSMakeSize(screen.width, 
>>> screen.height)];
>>>           [[self window] center];
>>>       } else if ([[self window] styleMask] & NSWindowStyleMaskFullScreen) 
>>> {
>>> @@ -1296,7 +1295,7 @@ - (BOOL)windowShouldClose:(id)sender
>>>
>>>   - (NSSize) window:(NSWindow *)window 
>>> willUseFullScreenContentSize:(NSSize)proposedSize
>>>   {
>>> -    if (stretch_video) {
>>> +    if ([normalWindow styleMask] & NSWindowStyleMaskResizable) {
>>>           return [cocoaView fixZoomedFullScreenSize:proposedSize];
>>>       }
>>> 
>>> @@ -1377,8 +1376,7 @@ - (void)showQEMUDoc:(id)sender
>>>   /* Stretches video to fit host monitor size */
>>>   - (void)zoomToFit:(id) sender
>>>   {
>>> -    stretch_video = !stretch_video;
>>> -    if (stretch_video == true) {
>>> +    if (([normalWindow styleMask] & NSWindowStyleMaskResizable) == 0) {
>>>           [normalWindow setStyleMask:[normalWindow styleMask] | 
>>> NSWindowStyleMaskResizable];
>>>           [sender setState: NSControlStateValueOn];
>>>       } else {
>>> @@ -1650,7 +1648,7 @@ static void create_initial_menus(void)
>>>       menu = [[NSMenu alloc] initWithTitle:@"View"];
>>>       [menu addItem: [[[NSMenuItem alloc] initWithTitle:@"Enter 
>>> Fullscreen" action:@selector(doToggleFullScreen:) keyEquivalent:@"f"] 
>>> autorelease]]; // Fullscreen
>>>       menuItem = [[[NSMenuItem alloc] initWithTitle:@"Zoom To Fit" 
>>> action:@selector(zoomToFit:) keyEquivalent:@""] autorelease];
>>> -    [menuItem setState: stretch_video ? NSControlStateValueOn : 
>>> NSControlStateValueOff];
>>> +    [menuItem setState: [normalWindow styleMask] & 
>>> NSWindowStyleMaskResizable ? NSControlStateValueOn : 
>>> NSControlStateValueOff];
>>>       [menu addItem: menuItem];
>>>       menuItem = [[[NSMenuItem alloc] initWithTitle:@"View" action:nil 
>>> keyEquivalent:@""] autorelease];
>>>       [menuItem setSubmenu:menu];
>>> @@ -2036,7 +2034,6 @@ static void cocoa_display_init(DisplayState *ds, 
>>> DisplayOptions *opts)
>>>       }
>>>
>>>       if (opts->u.cocoa.has_zoom_to_fit && opts->u.cocoa.zoom_to_fit) {
>>> -        stretch_video = true;
>>>           [normalWindow setStyleMask:[normalWindow styleMask] | 
>>> NSWindowStyleMaskResizable];
>>>       }
>> 
>> It's nice to get rid of the boolean, but
>>   [normalWindow styleMask] & NSWindowStyleMaskResizable
>> feels a bit clunky -- maybe we should wrap it in a method with
>> a suitable name ? (isZoomToFit, maybe? but I'm not too familiar
>> with what cocoa function naming style is.)
>
> I don't think we should have a method for this. It's verbose but the main 
> reason of that is NSWindowStyleMaskResizable is wordy; otherwise it's quite a 
> simple. There are few places that use this construct after all.

If not a method how about a macro just to make it less long? But if Peter 
is otherwise happy with the current version just this does not need 
another version IMO.

Regards,
BALATON Zoltan