From 5e3d344c77006fce03459a851e30cb798e568756 Mon Sep 17 00:00:00 2001 From: Grant G Date: Sat, 15 Oct 2022 03:57:33 -0700 Subject: [PATCH] fix(macos): scale menu item icon height to 18, closes #584 (#590) * fix(macos): scale menu item icon height to 18, closes #584 * fix imports and get_size order * changefile Co-authored-by: amrbashir --- .changes/macos-menu-item-dpi.md | 5 +++++ src/platform_impl/macos/menu.rs | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .changes/macos-menu-item-dpi.md diff --git a/.changes/macos-menu-item-dpi.md b/.changes/macos-menu-item-dpi.md new file mode 100644 index 000000000..225c01e8e --- /dev/null +++ b/.changes/macos-menu-item-dpi.md @@ -0,0 +1,5 @@ +--- +"tao": patch +--- + +On macOS, scale menu item icons height to 18. \ No newline at end of file diff --git a/src/platform_impl/macos/menu.rs b/src/platform_impl/macos/menu.rs index f1525d5cd..50ce4a1ce 100644 --- a/src/platform_impl/macos/menu.rs +++ b/src/platform_impl/macos/menu.rs @@ -5,7 +5,7 @@ use cocoa::{ appkit::{NSApp, NSApplication, NSButton, NSEventModifierFlags, NSImage, NSMenu, NSMenuItem}, base::{id, nil, selector}, - foundation::{NSAutoreleasePool, NSData, NSString}, + foundation::{NSAutoreleasePool, NSData, NSSize, NSString}, }; use objc::{ declare::ClassDecl, @@ -85,9 +85,13 @@ impl MenuItemAttributes { } pub fn set_icon(&mut self, icon: Icon) { - unsafe { - let icon = icon.inner.to_png(); + let (width, height) = icon.inner.get_size(); + let icon = icon.inner.to_png(); + + let icon_height: f64 = 18.0; + let icon_width: f64 = (width as f64) / (height as f64 / icon_height); + unsafe { let nsdata = NSData::dataWithBytes_length_( nil, icon.as_ptr() as *const std::os::raw::c_void, @@ -95,6 +99,8 @@ impl MenuItemAttributes { ); let nsimage = NSImage::initWithData_(NSImage::alloc(nil), nsdata); + let new_size = NSSize::new(icon_width, icon_height); + let _: () = msg_send![nsimage, setSize: new_size]; let _: () = msg_send![self.1, setImage: nsimage]; } }