Kaydet (Commit) 96b95f50 authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Tomaž Vajngerl

tdf#103626 don't scale application icon to prevent a start-up loop

Change-Id: I2e65ba16d93167dc4abb029c7e941e91be9a62ab
Reviewed-on: https://gerrit.libreoffice.org/32382Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst 995dca08
...@@ -53,6 +53,9 @@ struct ImageRequestParameters ...@@ -53,6 +53,9 @@ struct ImageRequestParameters
, mbLocalized(bLocalized) , mbLocalized(bLocalized)
, meFlags(eFlags) , meFlags(eFlags)
{} {}
bool convertToDarkTheme();
sal_Int32 scalePrecentage();
}; };
class ImplImageTree class ImplImageTree
......
...@@ -49,6 +49,25 @@ ...@@ -49,6 +49,25 @@
#include <vcl/BitmapTools.hxx> #include <vcl/BitmapTools.hxx>
#include <vcl/pngwrite.hxx> #include <vcl/pngwrite.hxx>
bool ImageRequestParameters::convertToDarkTheme()
{
static bool bIconsForDarkTheme = !!getenv("VCL_ICONS_FOR_DARK_THEME");
bool bConvertToDarkTheme = false;
if (!(meFlags & ImageLoadFlags::IgnoreDarkTheme))
bConvertToDarkTheme = bIconsForDarkTheme;
return bConvertToDarkTheme;
}
sal_Int32 ImageRequestParameters::scalePrecentage()
{
sal_Int32 aScalePercentage = 100;
if (!(meFlags & ImageLoadFlags::IgnoreScalingFactor))
aScalePercentage = Application::GetDefaultDevice()->GetDPIScalePercentage();
return aScalePercentage;
}
namespace namespace
{ {
...@@ -134,15 +153,8 @@ std::shared_ptr<SvStream> wrapStream(css::uno::Reference< css::io::XInputStream ...@@ -134,15 +153,8 @@ std::shared_ptr<SvStream> wrapStream(css::uno::Reference< css::io::XInputStream
void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString const & rPath, ImageRequestParameters& rParameters) void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString const & rPath, ImageRequestParameters& rParameters)
{ {
static bool bIconsForDarkTheme = !!getenv("VCL_ICONS_FOR_DARK_THEME"); bool bConvertToDarkTheme = rParameters.convertToDarkTheme();
sal_Int32 aScalePercentage = rParameters.scalePrecentage();
bool bConvertToDarkTheme = bIconsForDarkTheme;
if (rParameters.meFlags & ImageLoadFlags::IgnoreDarkTheme)
bConvertToDarkTheme = false;
float aScaleFactor = Application::GetDefaultDevice()->GetDPIScaleFactor();
if (rParameters.meFlags & ImageLoadFlags::IgnoreScalingFactor)
aScaleFactor = 1.0f;
if (rPath.endsWith(".png")) if (rPath.endsWith(".png"))
{ {
...@@ -152,7 +164,7 @@ void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString con ...@@ -152,7 +164,7 @@ void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString con
} }
else if (rPath.endsWith(".svg")) else if (rPath.endsWith(".svg"))
{ {
vcl::bitmap::loadFromSvg(*xStream.get(), rPath, rParameters.mrBitmap, double(aScaleFactor)); vcl::bitmap::loadFromSvg(*xStream.get(), rPath, rParameters.mrBitmap, aScalePercentage / 100.0);
if (bConvertToDarkTheme) if (bConvertToDarkTheme)
rParameters.mrBitmap = BitmapProcessor::createLightImage(rParameters.mrBitmap); rParameters.mrBitmap = BitmapProcessor::createLightImage(rParameters.mrBitmap);
return; return;
...@@ -165,8 +177,11 @@ void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString con ...@@ -165,8 +177,11 @@ void loadImageFromStream(std::shared_ptr<SvStream> const & xStream, OUString con
if (bConvertToDarkTheme) if (bConvertToDarkTheme)
rParameters.mrBitmap = BitmapProcessor::createLightImage(rParameters.mrBitmap); rParameters.mrBitmap = BitmapProcessor::createLightImage(rParameters.mrBitmap);
if (aScaleFactor > 1.0f) if (aScalePercentage > 100)
rParameters.mrBitmap.Scale(double(aScaleFactor), double(aScaleFactor), BmpScaleFlag::Fast); {
double aScaleFactor(aScalePercentage / 100.0);
rParameters.mrBitmap.Scale(aScaleFactor, aScaleFactor, BmpScaleFlag::Fast);
}
} }
} // end anonymous namespace } // end anonymous namespace
...@@ -283,15 +298,8 @@ bool ImplImageTree::loadDefaultImage(OUString const & style, BitmapEx& bitmap, c ...@@ -283,15 +298,8 @@ bool ImplImageTree::loadDefaultImage(OUString const & style, BitmapEx& bitmap, c
OUString createVariant(ImageRequestParameters& rParameters) OUString createVariant(ImageRequestParameters& rParameters)
{ {
static bool bIconsForDarkTheme = !!getenv("VCL_ICONS_FOR_DARK_THEME"); bool bConvertToDarkTheme = rParameters.convertToDarkTheme();
sal_Int32 aScalePercentage = rParameters.scalePrecentage();
bool bConvertToDarkTheme = bIconsForDarkTheme;
if (rParameters.meFlags & ImageLoadFlags::IgnoreDarkTheme)
bConvertToDarkTheme = false;
sal_Int32 aScalePercentage = Application::GetDefaultDevice()->GetDPIScalePercentage();
if (rParameters.meFlags & ImageLoadFlags::IgnoreScalingFactor)
aScalePercentage = 100;
OUString aVariant; OUString aVariant;
if (aScalePercentage == 100 && !bConvertToDarkTheme) if (aScalePercentage == 100 && !bConvertToDarkTheme)
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <vcl/settings.hxx> #include <vcl/settings.hxx>
#include <vcl/bitmapaccess.hxx> #include <vcl/bitmapaccess.hxx>
#include <vcl/opengl/OpenGLContext.hxx> #include <vcl/opengl/OpenGLContext.hxx>
#include <vcl/BitmapTools.hxx>
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xutil.h> #include <X11/Xutil.h>
...@@ -209,7 +210,10 @@ static void CreateNetWmAppIcon( sal_uInt16 nIcon, NetWmIconData& netwm_icon ) ...@@ -209,7 +210,10 @@ static void CreateNetWmAppIcon( sal_uInt16 nIcon, NetWmIconData& netwm_icon )
nIconSizeOffset = SV_ICON_SIZE32_START; nIconSizeOffset = SV_ICON_SIZE32_START;
else else
nIconSizeOffset = SV_ICON_SIZE16_START; nIconSizeOffset = SV_ICON_SIZE16_START;
BitmapEx aIcon( ResId(nIconSizeOffset + nIcon, *ImplGetResMgr()));
BitmapEx aIcon = vcl::bitmap::loadFromResource(ResId(nIconSizeOffset + nIcon, *ImplGetResMgr()),
ImageLoadFlags::IgnoreScalingFactor);
if( aIcon.IsEmpty()) if( aIcon.IsEmpty())
continue; continue;
Bitmap icon = aIcon.GetBitmap(); Bitmap icon = aIcon.GetBitmap();
...@@ -250,7 +254,6 @@ static bool lcl_SelectAppIconPixmap( SalDisplay *pDisplay, SalX11Screen nXScreen ...@@ -250,7 +254,6 @@ static bool lcl_SelectAppIconPixmap( SalDisplay *pDisplay, SalX11Screen nXScreen
sal_uInt16 nIcon, sal_uInt16 iconSize, sal_uInt16 nIcon, sal_uInt16 iconSize,
Pixmap& icon_pixmap, Pixmap& icon_mask, NetWmIconData& netwm_icon) Pixmap& icon_pixmap, Pixmap& icon_mask, NetWmIconData& netwm_icon)
{ {
return true;
if( ! ImplGetResMgr() ) if( ! ImplGetResMgr() )
return false; return false;
...@@ -267,7 +270,9 @@ static bool lcl_SelectAppIconPixmap( SalDisplay *pDisplay, SalX11Screen nXScreen ...@@ -267,7 +270,9 @@ static bool lcl_SelectAppIconPixmap( SalDisplay *pDisplay, SalX11Screen nXScreen
else else
return false; return false;
BitmapEx aIcon( ResId(nIconSizeOffset + nIcon, *ImplGetResMgr())); BitmapEx aIcon = vcl::bitmap::loadFromResource(ResId(nIconSizeOffset + nIcon, *ImplGetResMgr()),
ImageLoadFlags::IgnoreScalingFactor);
if( aIcon.IsEmpty() ) if( aIcon.IsEmpty() )
return false; return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment