vcl/inc/quartz/salgdi.h              |    4 ++++
 vcl/osx/salframe.cxx                 |    2 +-
 vcl/quartz/salgdi.cxx                |   13 +++++++++++++
 vcl/source/app/IconThemeSelector.cxx |    4 ++--
 vcl/source/image/ImplImage.cxx       |    9 ++++++++-
 5 files changed, 28 insertions(+), 4 deletions(-)

New commits:
commit f4ef5435df5560e6b6b061ce4053c71e2819bf51
Author:     Patrick Luby <guibmac...@gmail.com>
AuthorDate: Mon Apr 29 09:35:30 2024 -0400
Commit:     Patrick Luby <guibomac...@gmail.com>
CommitDate: Tue Apr 30 01:24:29 2024 +0200

    tdf#130678 draw SVG icons at Retina resolution on macOS
    
    Also, change the default icon theme on macOS to SVG now that SVG icons
    support Retina display resolution and the existing PNG icon themes do not.
    
    Change-Id: I8c86c316b0db005661759c132ecf7e8667cf30bd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166867
    Reviewed-by: Patrick Luby <guibomac...@gmail.com>
    Tested-by: Jenkins

diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h
index c8befcc50280..b7fb674f7553 100644
--- a/vcl/inc/quartz/salgdi.h
+++ b/vcl/inc/quartz/salgdi.h
@@ -473,6 +473,10 @@ public:
                             GetTextLayout(int nFallbackLevel) override;
     virtual void            DrawTextLayout( const GenericSalLayout& ) override;
 
+#ifdef MACOSX
+    virtual bool            ShouldDownscaleIconsAtSurface(double* pScaleOut) 
const override;
+#endif
+
     virtual SystemGraphicsData
                             GetGraphicsData() const override;
 };
diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index b02dbc59585e..940337b770a1 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1390,7 +1390,7 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
     StyleSettings aStyleSettings = rSettings.GetStyleSettings();
 
     bool bUseDarkMode(GetUseDarkMode());
-    OUString sThemeName(!bUseDarkMode ? u"sukapura" : u"sukapura_dark");
+    OUString sThemeName(!bUseDarkMode ? u"sukapura_svg" : 
u"sukapura_dark_svg");
     aStyleSettings.SetPreferredIconTheme(sThemeName, bUseDarkMode);
 
     Color aControlBackgroundColor(getNSBoxBackgroundColor([NSColor 
controlBackgroundColor]));
diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx
index fd81f1a04512..8c9d3a6486dd 100644
--- a/vcl/quartz/salgdi.cxx
+++ b/vcl/quartz/salgdi.cxx
@@ -299,6 +299,19 @@ void AquaSalGraphics::DrawTextLayout(const 
GenericSalLayout& rLayout)
     mpBackend->drawTextLayout(rLayout);
 }
 
+#ifdef MACOSX
+
+bool AquaSalGraphics::ShouldDownscaleIconsAtSurface(double* pScaleOut) const
+{
+    if (comphelper::LibreOfficeKit::isActive())
+        return SalGraphics::ShouldDownscaleIconsAtSurface(pScaleOut);
+    if (pScaleOut)
+        *pScaleOut = sal::aqua::getWindowScaling();
+    return true;
+}
+
+#endif
+
 void AquaGraphicsBackend::drawTextLayout(const GenericSalLayout& rLayout)
 {
 #ifdef IOS
diff --git a/vcl/source/app/IconThemeSelector.cxx 
b/vcl/source/app/IconThemeSelector.cxx
index eb79752beb47..ae3af74b3da2 100644
--- a/vcl/source/app/IconThemeSelector.cxx
+++ b/vcl/source/app/IconThemeSelector.cxx
@@ -79,9 +79,9 @@ IconThemeSelector::GetIconThemeForDesktopEnvironment(const 
OUString& desktopEnvi
     }
     else if ( desktopEnvironment.equalsIgnoreAsciiCase("macosx") ) {
         if (!bPreferDarkIconTheme)
-            r = "sukapura";
+            r = "sukapura_svg";
         else
-            r = "sukapura_dark";
+            r = "sukapura_dark_svg";
     }
     else if ( desktopEnvironment.equalsIgnoreAsciiCase("gnome") ||
          desktopEnvironment.equalsIgnoreAsciiCase("mate") ||
diff --git a/vcl/source/image/ImplImage.cxx b/vcl/source/image/ImplImage.cxx
index cf70052a9fd7..f4b1cbba21a4 100644
--- a/vcl/source/image/ImplImage.cxx
+++ b/vcl/source/image/ImplImage.cxx
@@ -61,13 +61,20 @@ bool ImplImage::loadStockAtScale(SalGraphics* pGraphics, 
BitmapEx &rBitmapEx)
     sal_Int32 nScalePercentage = -1;
 
     double fScale(1.0);
+    OUString aIconTheme = 
Application::GetSettings().GetStyleSettings().DetermineIconTheme();
+#ifdef MACOSX
+    if (aIconTheme.endsWith("_svg"))
+    {
+#endif
     if (pGraphics && pGraphics->ShouldDownscaleIconsAtSurface(&fScale)) // 
scale at the surface
     {
         nScalePercentage = fScale * 100.0;
         eScalingFlags = ImageLoadFlags::IgnoreScalingFactor;
     }
+#ifdef MACOSX
+    }
+#endif
 
-    OUString aIconTheme = 
Application::GetSettings().GetStyleSettings().DetermineIconTheme();
     if (!ImageTree::get().loadImage(maStockName, aIconTheme, aBitmapEx, true,
                                     nScalePercentage, eScalingFlags))
     {

Reply via email to