BitmapEx->Bitmap in ImageTree

now that Bitmap supports transparency

Change-Id: I2aca23a6704c98908982a3eb3df062240e2c60b2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189019
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
This commit is contained in:
Noel Grandin
2025-08-06 20:29:26 +02:00
parent 32627a5807
commit bb281988b1
17 changed files with 58 additions and 57 deletions
+3 -3
View File
@@ -233,10 +233,10 @@ void TipOfTheDayDialog::UpdateTip()
RID_SVXBMP_TOTD_IMPRESS, RID_SVXBMP_TOTD_SOFFICE };
const OUString aIconTheme
= Application::GetSettings().GetStyleSettings().DetermineIconTheme();
BitmapEx aBmpEx;
ImageTree::get().loadImage(sModuleImage[nType], aIconTheme, aBmpEx, true,
Bitmap aBmp;
ImageTree::get().loadImage(sModuleImage[nType], aIconTheme, aBmp, true,
ImageLoadFlags::IgnoreDarkTheme);
aGraphic = aBmpEx;
aGraphic = aBmp;
}
if (!aGraphic.IsAnimated())
+1 -1
View File
@@ -38,7 +38,7 @@ VCL_DLLPUBLIC lookup_table const & get_unpremultiply_table();
VCL_DLLPUBLIC sal_uInt8 unpremultiply(sal_uInt8 c, sal_uInt8 a);
VCL_DLLPUBLIC sal_uInt8 premultiply(sal_uInt8 c, sal_uInt8 a);
BitmapEx VCL_DLLPUBLIC loadFromName(const OUString& rFileName, const ImageLoadFlags eFlags = ImageLoadFlags::NONE);
Bitmap VCL_DLLPUBLIC loadFromName(const OUString& rFileName, const ImageLoadFlags eFlags = ImageLoadFlags::NONE);
void loadFromSvg(SvStream& rStream, const OUString& sPath, Bitmap& rBitmap, double fScaleFactor);
+3 -3
View File
@@ -48,7 +48,7 @@ namespace com::sun::star::io {
}
class ImplImageTree;
class BitmapEx;
class Bitmap;
class SvMemoryStream;
class ImageTree
@@ -72,12 +72,12 @@ public:
VCL_DLLPUBLIC bool loadImage(
OUString const & name, OUString const & style,
BitmapEx & bitmap, bool localized,
Bitmap & bitmap, bool localized,
const ImageLoadFlags eFlags = ImageLoadFlags::NONE);
VCL_DLLPUBLIC bool loadImage(
OUString const & name, OUString const & style,
BitmapEx & bitmap, bool localized,
Bitmap & bitmap, bool localized,
sal_Int32 nScalePercentage,
const ImageLoadFlags eFlags = ImageLoadFlags::NONE);
+2
View File
@@ -110,6 +110,7 @@ class SAL_WARN_UNUSED VCL_DLLPUBLIC Bitmap final
public:
Bitmap();
Bitmap( const OUString& rIconName );
Bitmap( const Bitmap& rBitmap );
explicit Bitmap( const BitmapEx& rBitmapEx );
Bitmap( const Size& rSizePixel, vcl::PixelFormat ePixelFormat, const BitmapPalette* pPal = nullptr );
@@ -616,6 +617,7 @@ public:
private:
SAL_DLLPRIVATE bool ImplConvertUp(vcl::PixelFormat ePixelFormat, Color const* pExtColor = nullptr);
SAL_DLLPRIVATE bool ImplConvertDown8BPP(Color const* pExtColor = nullptr);
SAL_DLLPRIVATE void loadFromIconTheme( const OUString& rIconName );
private:
std::shared_ptr<SalBitmap> mxSalBmp;
-2
View File
@@ -468,8 +468,6 @@ private:
const int nHeight,
const int nStride);
SAL_DLLPRIVATE void loadFromIconTheme( const OUString& rIconName );
Bitmap maBitmap;
AlphaMask maAlphaMask;
Size maBitmapSize;
+2 -2
View File
@@ -6371,8 +6371,8 @@ static void lcl_paintBitmapExToRect(vcl::RenderContext *pOut, const Point& aPoin
SwTaggedPDFHelper aTaggedPDFHelper( nullptr, nullptr, nullptr, *_pViewShell->GetOut() );
static tools::DeleteOnDeinit<drawinglayer::primitive2d::DiscreteShadow> shadowMaskObj(
vcl::bitmap::loadFromName(BMP_PAGE_SHADOW_MASK,
ImageLoadFlags::IgnoreDarkTheme | ImageLoadFlags::IgnoreScalingFactor));
BitmapEx(vcl::bitmap::loadFromName(BMP_PAGE_SHADOW_MASK,
ImageLoadFlags::IgnoreDarkTheme | ImageLoadFlags::IgnoreScalingFactor)));
drawinglayer::primitive2d::DiscreteShadow& shadowMask = *shadowMaskObj.get();
static tools::DeleteOnDeinit< BitmapEx > aPageTopRightShadowObj {};
+2 -2
View File
@@ -21,7 +21,7 @@
#include <rtl/ustring.hxx>
class BitmapEx;
class Bitmap;
namespace vcl
@@ -44,7 +44,7 @@ namespace vcl
*/
static bool loadImage(
const OUString& _rName,
BitmapEx& _out_rImage
Bitmap& _out_rImage
);
};
+4 -4
View File
@@ -44,13 +44,13 @@ struct ImageRequestParameters
{
OUString msName;
OUString msStyle;
BitmapEx& mrBitmap;
Bitmap& mrBitmap;
bool mbLocalized;
ImageLoadFlags meFlags;
bool mbWriteImageToCache;
sal_Int32 mnScalePercentage;
ImageRequestParameters(OUString aName, OUString aStyle, BitmapEx& rBitmap, bool bLocalized,
ImageRequestParameters(OUString aName, OUString aStyle, Bitmap& rBitmap, bool bLocalized,
ImageLoadFlags eFlags, sal_Int32 nScalePercentage)
: msName(std::move(aName))
, msStyle(std::move(aStyle))
@@ -82,7 +82,7 @@ public:
bool loadImage(
OUString const & name, OUString const & style,
BitmapEx & bitmap, bool localized,
Bitmap & bitmap, bool localized,
const ImageLoadFlags eFlags,
sal_Int32 nScalePercentage = -1);
@@ -97,7 +97,7 @@ private:
ImplImageTree(const ImplImageTree&) = delete;
ImplImageTree& operator=(const ImplImageTree&) = delete;
typedef std::unordered_map<OUString, std::pair<bool,BitmapEx>> IconCache;
typedef std::unordered_map<OUString, std::pair<bool,Bitmap>> IconCache;
typedef std::unordered_map<sal_Int32, IconCache> ScaledIconCache;
typedef std::unordered_map<OUString, OUString> IconLinkHash;
+1 -19
View File
@@ -82,25 +82,7 @@ BitmapEx::BitmapEx(Size aSize, vcl::PixelFormat ePixelFormat)
BitmapEx::BitmapEx( const OUString& rIconName )
{
loadFromIconTheme( rIconName );
}
void BitmapEx::loadFromIconTheme( const OUString& rIconName )
{
bool bSuccess;
OUString aIconTheme;
try
{
aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
bSuccess = ImageTree::get().loadImage(rIconName, aIconTheme, *this, true);
}
catch (...)
{
bSuccess = false;
}
SAL_WARN_IF( !bSuccess, "vcl", "BitmapEx::BitmapEx(): could not load image " << rIconName << " via icon theme " << aIconTheme);
operator=(Bitmap(rIconName));
}
BitmapEx::BitmapEx( const Bitmap& rBmp ) :
+4 -4
View File
@@ -49,15 +49,15 @@ using drawinglayer::primitive2d::Primitive2DReference;
namespace vcl::bitmap
{
BitmapEx loadFromName(const OUString& rFileName, const ImageLoadFlags eFlags)
Bitmap loadFromName(const OUString& rFileName, const ImageLoadFlags eFlags)
{
bool bSuccess = true;
OUString aIconTheme;
BitmapEx aBitmapEx;
Bitmap aBitmap;
try
{
aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
ImageTree::get().loadImage(rFileName, aIconTheme, aBitmapEx, true, eFlags);
ImageTree::get().loadImage(rFileName, aIconTheme, aBitmap, true, eFlags);
}
catch (...)
{
@@ -66,7 +66,7 @@ BitmapEx loadFromName(const OUString& rFileName, const ImageLoadFlags eFlags)
SAL_WARN_IF(!bSuccess, "vcl", "vcl::bitmap::loadFromName : could not load image " << rFileName << " via icon theme " << aIconTheme);
return aBitmapEx;
return aBitmap;
}
void loadFromSvg(SvStream& rStream, const OUString& sPath, Bitmap& rBitmap, double fScalingFactor)
+24
View File
@@ -35,6 +35,7 @@
#include <vcl/skia/SkiaHelper.hxx>
#endif
#include <vcl/bitmap/BitmapMonochromeFilter.hxx>
#include <vcl/ImageTree.hxx>
#include <bitmap/BitmapScaleSuperFilter.hxx>
#include <bitmap/BitmapScaleConvolutionFilter.hxx>
@@ -148,6 +149,29 @@ Bitmap::Bitmap(const BitmapEx& rBitmapEx)
}
}
Bitmap::Bitmap( const OUString& rIconName )
{
loadFromIconTheme( rIconName );
}
void Bitmap::loadFromIconTheme( const OUString& rIconName )
{
bool bSuccess;
OUString aIconTheme;
try
{
aIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
bSuccess = ImageTree::get().loadImage(rIconName, aIconTheme, *this, true);
}
catch (...)
{
bSuccess = false;
}
SAL_WARN_IF( !bSuccess, "vcl", "BitmapEx::BitmapEx(): could not load image " << rIconName << " via icon theme " << aIconTheme);
}
#ifdef DBG_UTIL
namespace
+1 -1
View File
@@ -200,7 +200,7 @@ uno::Reference< ::graphic::XGraphic > GraphicProvider::implLoadRepositoryImage(
std::u16string_view sPathName;
if( o3tl::starts_with(rResourceURL, u"private:graphicrepository/", &sPathName) )
{
BitmapEx aBitmap;
Bitmap aBitmap;
if ( vcl::ImageRepository::loadImage( OUString(sPathName), aBitmap ) )
{
Graphic aGraphic(aBitmap);
+1 -1
View File
@@ -25,7 +25,7 @@
namespace vcl
{
bool ImageRepository::loadImage( const OUString& _rName, BitmapEx& _out_rImage )
bool ImageRepository::loadImage( const OUString& _rName, Bitmap& _out_rImage )
{
OUString sIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
+2 -2
View File
@@ -40,7 +40,7 @@ css::uno::Reference<css::io::XInputStream> ImageTree::getImageXInputStream(OUStr
}
bool ImageTree::loadImage(OUString const & rName, OUString const & rStyle,
BitmapEx & rBitmap, bool bLocalized,
Bitmap & rBitmap, bool bLocalized,
sal_Int32 nScalePercentage,
const ImageLoadFlags eFlags)
{
@@ -48,7 +48,7 @@ bool ImageTree::loadImage(OUString const & rName, OUString const & rStyle,
}
bool ImageTree::loadImage(OUString const & rName, OUString const & rStyle,
BitmapEx & rBitmap, bool bLocalized,
Bitmap & rBitmap, bool bLocalized,
const ImageLoadFlags eFlags)
{
return loadImage(rName, rStyle, rBitmap, bLocalized, -1, eFlags);
+4 -4
View File
@@ -57,7 +57,7 @@ ImplImage::ImplImage(const GDIMetaFile& rMetaFile)
bool ImplImage::loadStockAtScale(SalGraphics* pGraphics, Bitmap &rBitmap)
{
BitmapEx aBitmapEx;
Bitmap aBitmap;
ImageLoadFlags eScalingFlags = ImageLoadFlags::NONE;
sal_Int32 nScalePercentage = -1;
@@ -77,7 +77,7 @@ bool ImplImage::loadStockAtScale(SalGraphics* pGraphics, Bitmap &rBitmap)
}
#endif
if (!ImageTree::get().loadImage(maStockName, aIconTheme, aBitmapEx, true,
if (!ImageTree::get().loadImage(maStockName, aIconTheme, aBitmap, true,
nScalePercentage, eScalingFlags))
{
/* If the uno command has parameters, passed in from a toolbar,
@@ -89,7 +89,7 @@ bool ImplImage::loadStockAtScale(SalGraphics* pGraphics, Bitmap &rBitmap)
sal_Int32 nEnd = maStockName.lastIndexOf(".");
OUString aFileName = maStockName.replaceAt(nStart, nEnd - nStart, u"");
if (!ImageTree::get().loadImage(aFileName, aIconTheme, aBitmapEx, true,
if (!ImageTree::get().loadImage(aFileName, aIconTheme, aBitmap, true,
nScalePercentage, eScalingFlags))
{
SAL_WARN_IF(!bOptional, "vcl",
@@ -105,7 +105,7 @@ bool ImplImage::loadStockAtScale(SalGraphics* pGraphics, Bitmap &rBitmap)
return false;
}
}
rBitmap = Bitmap(aBitmapEx);
rBitmap = aBitmap;
return true;
}
+1 -1
View File
@@ -352,7 +352,7 @@ OUString ImplImageTree::fallbackStyle(std::u16string_view rsStyle)
return sResult;
}
bool ImplImageTree::loadImage(OUString const & rName, OUString const & rStyle, BitmapEx & rBitmap, bool localized,
bool ImplImageTree::loadImage(OUString const & rName, OUString const & rStyle, Bitmap & rBitmap, bool localized,
const ImageLoadFlags eFlags, sal_Int32 nScalePercentage)
{
OUString aCurrentStyle(rStyle);
+3 -8
View File
@@ -263,23 +263,18 @@ static void CreateNetWmAppIcon( sal_uInt16 nIcon, NetWmIconData& netwm_icon )
else
sIcon = SV_ICON_SIZE16[nIcon];
BitmapEx aIcon = vcl::bitmap::loadFromName(sIcon, ImageLoadFlags::IgnoreScalingFactor);
Bitmap aIcon = vcl::bitmap::loadFromName(sIcon, ImageLoadFlags::IgnoreScalingFactor);
if( aIcon.IsEmpty())
continue;
vcl::bitmap::convertBitmap32To24Plus8(aIcon, aIcon);
Bitmap icon = aIcon.GetBitmap();
AlphaMask mask = aIcon.GetAlphaMask();
BitmapScopedReadAccess iconData(icon);
BitmapScopedReadAccess maskData(mask);
BitmapScopedReadAccess iconData(aIcon);
netwm_icon[ pos++ ] = size; // width
netwm_icon[ pos++ ] = size; // height
for( int y = 0; y < size; ++y )
for( int x = 0; x < size; ++x )
{
BitmapColor col = iconData->GetColor( y, x );
BitmapColor alpha = maskData->GetColor( y, x );
netwm_icon[ pos++ ] = (((( 255 - alpha.GetBlue()) * 256U ) + col.GetRed()) * 256 + col.GetGreen()) * 256 + col.GetBlue();
netwm_icon[ pos++ ] = (((( 255 - col.GetAlpha()) * 256U ) + col.GetRed()) * 256 + col.GetGreen()) * 256 + col.GetBlue();
}
}
netwm_icon.resize( pos );