cui/source/inc/border.hxx | 2 +- cui/source/tabpages/border.cxx | 8 ++++---- include/svx/fontworkgallery.hxx | 2 +- include/vcl/bitmap.hxx | 3 +++ include/vcl/weld.hxx | 6 +++--- sd/source/ui/sidebar/LayoutMenu.cxx | 2 +- sd/source/ui/sidebar/MasterPagesSelector.cxx | 2 +- starmath/source/ElementsDockingWindow.cxx | 2 +- svx/source/dialog/ThemeDialog.cxx | 4 ++-- svx/source/tbxctrls/StylesPreviewWindow.cxx | 3 +-- vcl/inc/jsdialog/jsdialogbuilder.hxx | 2 +- vcl/inc/qt5/QtInstanceIconView.hxx | 2 +- vcl/inc/salvtables.hxx | 2 +- vcl/jsdialog/jsdialogbuilder.cxx | 2 +- vcl/qt5/QtInstanceIconView.cxx | 4 ++-- vcl/source/app/salvtables.cxx | 2 +- vcl/source/bitmap/bitmap.cxx | 15 +++++++++++++++ vcl/unx/gtk3/gtkinst.cxx | 6 +++--- 18 files changed, 43 insertions(+), 26 deletions(-)
New commits: commit 80fbcc1ebed62dd4723cbfc1c20bfc010e0b4fed Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Mon Jul 28 20:40:20 2025 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue Jul 29 10:51:10 2025 +0200 BitmapEx->Bitmap in IconView now that Bitmap can handle transparency Change-Id: I9ac6e4a9337dd77e4a9f6052d681aaa9ea6a2138 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188507 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/cui/source/inc/border.hxx b/cui/source/inc/border.hxx index a7d3b695bafa..98c4acba7b2c 100644 --- a/cui/source/inc/border.hxx +++ b/cui/source/inc/border.hxx @@ -192,7 +192,7 @@ private: void UpdateRemoveAdjCellBorderCB( sal_uInt16 nPreset ); static OUString GetShadowTypeName(sal_uInt16 nIconViewIdx); - static BitmapEx GetPreviewAsBitmap(const Image& rImage); + static Bitmap GetPreviewAsBitmap(const Image& rImage); }; diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx index e38e0ff8100b..92a158783467 100644 --- a/cui/source/tabpages/border.cxx +++ b/cui/source/tabpages/border.cxx @@ -1453,7 +1453,7 @@ void SvxBorderTabPage::FillPresetIV() for( sal_uInt16 nIdx = 1; nIdx <= BORDER_PRESET_COUNT; ++nIdx ) { OUString sId = OUString::number(nIdx); - BitmapEx aPreviewBitmap = GetPreviewAsBitmap(m_aBorderImgVec[GetPresetImageId(nIdx) - 1]); + Bitmap aPreviewBitmap = GetPreviewAsBitmap(m_aBorderImgVec[GetPresetImageId(nIdx) - 1]); m_xWndPresets->insert(-1, nullptr, &sId, &aPreviewBitmap, nullptr); m_xWndPresets->set_item_accessible_name(m_xWndPresets->n_children() - 1, GetPresetName(nIdx)); @@ -1472,7 +1472,7 @@ void SvxBorderTabPage::FillShadowIV() for( sal_uInt16 nIdx = 1; nIdx <= BORDER_SHADOW_COUNT; ++nIdx ) { OUString sId = OUString::number(nIdx); - BitmapEx aPreviewBitmap = GetPreviewAsBitmap(m_aShadowImgVec[nIdx-1]); + Bitmap aPreviewBitmap = GetPreviewAsBitmap(m_aShadowImgVec[nIdx-1]); m_xWndShadows->insert(-1, nullptr, &sId, &aPreviewBitmap, nullptr); m_xWndShadows->set_item_accessible_name(m_xWndShadows->n_children() - 1, GetShadowTypeName(nIdx)); @@ -1482,9 +1482,9 @@ void SvxBorderTabPage::FillShadowIV() m_xWndShadows->select(0); } -BitmapEx SvxBorderTabPage::GetPreviewAsBitmap(const Image& rImage) +Bitmap SvxBorderTabPage::GetPreviewAsBitmap(const Image& rImage) { - BitmapEx aPreviewBitmap = rImage.GetBitmapEx(); + Bitmap aPreviewBitmap(rImage.GetBitmapEx()); ScopedVclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create(); if (pVDev->GetDPIScaleFactor() > 1) aPreviewBitmap.Scale(pVDev->GetDPIScaleFactor(), pVDev->GetDPIScaleFactor()); diff --git a/include/svx/fontworkgallery.hxx b/include/svx/fontworkgallery.hxx index a91aa0a95f90..1ff0cd5207ca 100644 --- a/include/svx/fontworkgallery.hxx +++ b/include/svx/fontworkgallery.hxx @@ -53,7 +53,7 @@ class SAL_WARN_UNUSED SVXCORE_DLLPUBLIC FontWorkGalleryDialog final : public wel rtl::Reference<SdrObject> mxSdrObject; SdrModel* mpDestModel; - std::vector<BitmapEx> maFavoritesHorizontal; + std::vector<Bitmap> maFavoritesHorizontal; // mapping between item ID and item title std::map<OUString, OUString> maIdToTitleMap; diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx index e63076a3339c..5d9f306302b6 100644 --- a/include/vcl/bitmap.hxx +++ b/include/vcl/bitmap.hxx @@ -36,6 +36,8 @@ #include <algorithm> #include <memory> +class BitmapEx; + inline sal_uInt8 GAMMA(double _def_cVal, double _def_InvGamma) { return basegfx::fround<sal_uInt8>(pow(_def_cVal / 255.0, _def_InvGamma) * 255.0); @@ -109,6 +111,7 @@ public: Bitmap(); Bitmap( const Bitmap& rBitmap ); + Bitmap( const BitmapEx& rBitmapEx ); Bitmap( const Size& rSizePixel, vcl::PixelFormat ePixelFormat, const BitmapPalette* pPal = nullptr ); SAL_DLLPRIVATE explicit Bitmap( std::shared_ptr<SalBitmap> xSalBitmap ); ~Bitmap(); diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 3fe5cb25e23d..5ed0ad5336d0 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -63,7 +63,7 @@ class TransferDataContainer; class OutputDevice; class VirtualDevice; struct SystemEnvData; -class BitmapEx; +class Bitmap; namespace vcl { @@ -1468,7 +1468,7 @@ public: const OUString* pIconName, TreeIter* pRet) = 0; - virtual void insert(int pos, const OUString* pStr, const OUString* pId, const BitmapEx* pIcon, + virtual void insert(int pos, const OUString* pStr, const OUString* pId, const Bitmap* pIcon, TreeIter* pRet) = 0; @@ -1479,7 +1479,7 @@ public: insert(-1, &rStr, &rId, &rImage, nullptr); } - void append(const OUString& rId, const OUString& rStr, const BitmapEx* pImage) + void append(const OUString& rId, const OUString& rStr, const Bitmap* pImage) { insert(-1, &rStr, &rId, pImage, nullptr); } diff --git a/sd/source/ui/sidebar/LayoutMenu.cxx b/sd/source/ui/sidebar/LayoutMenu.cxx index 5c485d75a33f..6dc386d0b702 100644 --- a/sd/source/ui/sidebar/LayoutMenu.cxx +++ b/sd/source/ui/sidebar/LayoutMenu.cxx @@ -530,7 +530,7 @@ void LayoutMenu::Fill() } else { - BitmapEx aPreviewBitmap = GetPreviewAsBitmap(aImg); + Bitmap aPreviewBitmap = GetPreviewAsBitmap(aImg); mxLayoutIconView->insert(id, &sLayoutName, &sId, &aPreviewBitmap, nullptr); } maLayoutToStringMap[elem.maAutoLayout] = elem.mpStrResId; diff --git a/sd/source/ui/sidebar/MasterPagesSelector.cxx b/sd/source/ui/sidebar/MasterPagesSelector.cxx index 13ba8a88180f..ae9b97b0f8c0 100644 --- a/sd/source/ui/sidebar/MasterPagesSelector.cxx +++ b/sd/source/ui/sidebar/MasterPagesSelector.cxx @@ -400,7 +400,7 @@ void MasterPagesSelector::SetItem ( } else { - BitmapEx aPreviewBitmap = GetPreviewAsBitmap(aPreview); + Bitmap aPreviewBitmap = GetPreviewAsBitmap(aPreview); OUString sId = OUString::number(aToken); mxPreviewIconView->insert(nIndex, nullptr, &sId, &aPreviewBitmap, nullptr); mxPreviewIconView->set_item_accessible_name( diff --git a/starmath/source/ElementsDockingWindow.cxx b/starmath/source/ElementsDockingWindow.cxx index 29b70920bf0e..f5143ada9e8c 100644 --- a/starmath/source/ElementsDockingWindow.cxx +++ b/starmath/source/ElementsDockingWindow.cxx @@ -594,7 +594,7 @@ void SmElementsControl::addElement(const OUString& aElementVisual, const OUStrin maItemDatas.push_back(std::make_unique<ElementData>(aElementSource, aHelpText, maItemDatas.size())); const OUString aId(weld::toId(maItemDatas.back().get())); - BitmapEx aBitmap( pDevice->GetBitmap(Point(0,0), pDevice->GetOutputSize()) ); + Bitmap aBitmap( pDevice->GetBitmap(Point(0,0), pDevice->GetOutputSize()) ); mpIconView->insert(-1, nullptr, &aId, &aBitmap, nullptr); mpIconView->set_item_accessible_name(mpIconView->n_children() - 1, GetElementHelpText(aId)); if (mpIconView->get_item_width() < aSize.Width()) diff --git a/svx/source/dialog/ThemeDialog.cxx b/svx/source/dialog/ThemeDialog.cxx index 6dd20e24d2b4..8c1cde9ad0c0 100644 --- a/svx/source/dialog/ThemeDialog.cxx +++ b/svx/source/dialog/ThemeDialog.cxx @@ -55,11 +55,11 @@ void ThemeDialog::initColorSets() { auto const& rColorSet = maColorSets[i]; VclPtr<VirtualDevice> pVirDev = CreateColorSetPreview(rColorSet); - BitmapEx aBitmapEx(pVirDev->GetBitmap(Point(0, 0), pVirDev->GetOutputSizePixel())); + Bitmap aBitmap(pVirDev->GetBitmap(Point(0, 0), pVirDev->GetOutputSizePixel())); OUString sId = OUString::number(i); OUString sName = rColorSet.getName(); - mxIconViewThemeColors->insert(-1, &sName, &sId, &aBitmapEx, nullptr); + mxIconViewThemeColors->insert(-1, &sName, &sId, &aBitmap, nullptr); } } diff --git a/svx/source/tbxctrls/StylesPreviewWindow.cxx b/svx/source/tbxctrls/StylesPreviewWindow.cxx index 53254c91ef99..0905fdd44371 100644 --- a/svx/source/tbxctrls/StylesPreviewWindow.cxx +++ b/svx/source/tbxctrls/StylesPreviewWindow.cxx @@ -657,8 +657,7 @@ void StylesPreviewWindow_Base::UpdateStylesList() if (it != aStylesHint.end()) pStyleHint = it->second; Bitmap aPreview = GetCachedPreview(rStyle, pStyleHint); - BitmapEx aPreviewTmp(aPreview); - m_xStylesView->append(rStyle.first, rStyle.second, &aPreviewTmp); + m_xStylesView->append(rStyle.first, rStyle.second, &aPreview); } else m_xStylesView->append(rStyle.first, rStyle.second, nullptr); diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 3fddebeddfe3..ecce71c9b1bd 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -743,7 +743,7 @@ public: virtual void insert(int pos, const OUString* pStr, const OUString* pId, const OUString* pIconName, weld::TreeIter* pRet) override; - virtual void insert(int pos, const OUString* pStr, const OUString* pId, const BitmapEx* pIcon, + virtual void insert(int pos, const OUString* pStr, const OUString* pId, const Bitmap* pIcon, weld::TreeIter* pRet) override; virtual void insert_separator(int pos, const OUString* pId) override; diff --git a/vcl/inc/qt5/QtInstanceIconView.hxx b/vcl/inc/qt5/QtInstanceIconView.hxx index 8cff84249a33..0422442e665d 100644 --- a/vcl/inc/qt5/QtInstanceIconView.hxx +++ b/vcl/inc/qt5/QtInstanceIconView.hxx @@ -31,7 +31,7 @@ public: virtual void insert(int nPos, const OUString* pStr, const OUString* pId, const OUString* pIconName, weld::TreeIter* pRet) override; - virtual void insert(int nPos, const OUString* pStr, const OUString* pId, const BitmapEx* pIcon, + virtual void insert(int nPos, const OUString* pStr, const OUString* pId, const Bitmap* pIcon, weld::TreeIter* pRet) override; virtual void insert_separator(int pos, const OUString* pId) override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 253f7a7f2a4c..d52483763a2b 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1929,7 +1929,7 @@ public: virtual void insert(int pos, const OUString* pStr, const OUString* pId, const OUString* pIconName, weld::TreeIter* pRet) override; - virtual void insert(int pos, const OUString* pStr, const OUString* pId, const BitmapEx* pIcon, + virtual void insert(int pos, const OUString* pStr, const OUString* pId, const Bitmap* pIcon, weld::TreeIter* pRet) override; virtual void insert_separator(int pos, const OUString* pId) override; diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index bb08127af8e4..c9bf2927a2ef 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1891,7 +1891,7 @@ void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId, sendUpdate(); } -void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId, const BitmapEx* pIcon, +void JSIconView::insert(int pos, const OUString* pStr, const OUString* pId, const Bitmap* pIcon, weld::TreeIter* pRet) { SalInstanceIconView::insert(pos, pStr, pId, pIcon, pRet); diff --git a/vcl/qt5/QtInstanceIconView.cxx b/vcl/qt5/QtInstanceIconView.cxx index 041041584f43..28bd78360cf8 100644 --- a/vcl/qt5/QtInstanceIconView.cxx +++ b/vcl/qt5/QtInstanceIconView.cxx @@ -55,7 +55,7 @@ void QtInstanceIconView::insert(int, const OUString*, const OUString*, const OUS } void QtInstanceIconView::insert(int nPos, const OUString* pStr, const OUString* pId, - const BitmapEx* pIcon, weld::TreeIter* pRet) + const Bitmap* pIcon, weld::TreeIter* pRet) { assert(!pRet && "Support for pRet param not implemented yet"); (void)pRet; @@ -73,7 +73,7 @@ void QtInstanceIconView::insert(int nPos, const OUString* pStr, const OUString* pItem->setData(toQString(*pId), ROLE_ID); if (pIcon) { - pItem->setIcon(QIcon(toQPixmap(*pIcon))); + pItem->setIcon(QIcon(toQPixmap(BitmapEx(*pIcon)))); // set list view icon size to avoid downscaling const QSize aIconSize = m_pListView->iconSize().expandedTo(toQSize(pIcon->GetSizePixel())); diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 265fdd7c4a04..e6122fc60135 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -5444,7 +5444,7 @@ void SalInstanceIconView::insert(int pos, const OUString* pStr, const OUString* } void SalInstanceIconView::insert(int pos, const OUString* pStr, const OUString* pId, - const BitmapEx* pIcon, weld::TreeIter* pRet) + const Bitmap* pIcon, weld::TreeIter* pRet) { const Image aImage = pIcon ? Image(*pIcon) : Image(); insert(pos, pStr, pId, aImage, pRet); diff --git a/vcl/source/bitmap/bitmap.cxx b/vcl/source/bitmap/bitmap.cxx index bfcc06f169ba..4dddda306ca7 100644 --- a/vcl/source/bitmap/bitmap.cxx +++ b/vcl/source/bitmap/bitmap.cxx @@ -132,6 +132,21 @@ Bitmap::Bitmap( const Size& rSizePixel, vcl::PixelFormat ePixelFormat, const Bit mxSalBmp->Create(rSizePixel, ePixelFormat, *pPal); } +Bitmap::Bitmap(const BitmapEx& rBitmapEx) + : maPrefMapMode(rBitmapEx.GetPrefMapMode()) + , maPrefSize(rBitmapEx.GetPrefSize()) +{ + if (!rBitmapEx.IsAlpha()) + mxSalBmp = rBitmapEx.GetBitmap().mxSalBmp; + else + { + ScopedVclPtrInstance<VirtualDevice> xDev(DeviceFormat::WITH_ALPHA); + xDev->SetOutputSize(maPrefSize); + xDev->DrawBitmapEx(Point(0, 0), maPrefSize, rBitmapEx); + mxSalBmp = xDev->GetBitmap(Point(0,0), maPrefSize).mxSalBmp; + } +} + #ifdef DBG_UTIL namespace diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index ec6b6cb1b731..3a74522da055 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -16875,7 +16875,7 @@ private: } } - void insert_item(GtkTreeIter& iter, int pos, const OUString* pId, const OUString* pText, const BitmapEx* pIcon) + void insert_item(GtkTreeIter& iter, int pos, const OUString* pId, const OUString* pText, const Bitmap* pIcon) { // m_nTextCol may be -1, so pass it last, to not terminate the sequence before the Id value gtk_tree_store_insert_with_values(m_pTreeStore, &iter, nullptr, pos, @@ -16884,7 +16884,7 @@ private: -1); if (pIcon) { - GdkPixbuf* pixbuf = getPixbuf(*pIcon); + GdkPixbuf* pixbuf = getPixbuf(BitmapEx(*pIcon)); gtk_tree_store_set(m_pTreeStore, &iter, m_nImageCol, pixbuf, -1); if (pixbuf) g_object_unref(pixbuf); @@ -17077,7 +17077,7 @@ public: enable_notify_events(); } - virtual void insert(int pos, const OUString* pText, const OUString* pId, const BitmapEx* pIcon, weld::TreeIter* pRet) override + virtual void insert(int pos, const OUString* pText, const OUString* pId, const Bitmap* pIcon, weld::TreeIter* pRet) override { disable_notify_events(); GtkTreeIter iter;