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:
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -468,8 +468,6 @@ private:
|
||||
const int nHeight,
|
||||
const int nStride);
|
||||
|
||||
SAL_DLLPRIVATE void loadFromIconTheme( const OUString& rIconName );
|
||||
|
||||
Bitmap maBitmap;
|
||||
AlphaMask maAlphaMask;
|
||||
Size maBitmapSize;
|
||||
|
||||
@@ -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 {};
|
||||
|
||||
@@ -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
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ) :
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user