From 1733903bfc492f18bb8957178f23a7a7bdd5af96 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Thu, 19 Jun 2014 13:05:08 +0000 Subject: [PATCH] supporting 2x display on retina displays, fixes #15887 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76738 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/osx/cocoa/taskbar.mm | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/osx/cocoa/taskbar.mm b/src/osx/cocoa/taskbar.mm index 46354d28cf..36b0f73fb1 100644 --- a/src/osx/cocoa/taskbar.mm +++ b/src/osx/cocoa/taskbar.mm @@ -355,18 +355,32 @@ bool wxTaskBarIconCustomStatusItemImpl::SetIcon(const wxIcon& icon, const wxStri m_icon.CopyFromIcon(icon); // status item doesn't scale automatically + // first scale to optimal pixel resolution - int dimension = m_icon.GetHeight(); - if ( m_icon.GetWidth() > dimension ) - dimension = m_icon.GetWidth(); - if ( dimension > 16 ) + int dimension = wxMax( m_icon.GetHeight(), m_icon.GetWidth() ); + int target_dimension = 16 * wxOSXGetMainScreenContentScaleFactor(); + if ( dimension > target_dimension ) { wxImage img = m_icon.ConvertToImage(); - int factor = (dimension+15)/16; + int factor = (dimension+(target_dimension-1))/target_dimension; m_icon = img.ShrinkBy(factor, factor); } - - [m_statusItem setImage:m_icon.GetNSImage()]; + + NSImage* nsimage = m_icon.GetNSImage(); + NSSize size = [nsimage size]; + + // then scale to optimal point resolution + + dimension = wxMax(size.width,size.height); + if ( dimension > 16 ) + { + int factor = (dimension+15)/16; + size.width /= factor; + size.height /= factor; + [nsimage setSize:size]; + } + [m_statusItem setImage:nsimage]; + wxCFStringRef cfTooltip(tooltip); [m_statusItem setToolTip:cfTooltip.AsNSString()]; return true;