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;

Reply via email to