From 1f0c87711b31881f203b65d268b3413816dd9f4e Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 31 Aug 2022 16:16:43 -0400 Subject: [PATCH] shared/IconView: Add a variant of SetIcon which directly accepts a BBitmap. --- headers/private/shared/IconView.h | 1 + src/kits/shared/IconView.cpp | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/headers/private/shared/IconView.h b/headers/private/shared/IconView.h index efeccfdc8c..7035cc9a91 100644 --- a/headers/private/shared/IconView.h +++ b/headers/private/shared/IconView.h @@ -30,6 +30,7 @@ public: icon_size iconSize = B_LARGE_ICON); status_t SetIcon(const uint8_t* hvifData, size_t size, icon_size iconSize = B_LARGE_ICON); + status_t SetIcon(const BBitmap* icon); private: void _SetSize(); diff --git a/src/kits/shared/IconView.cpp b/src/kits/shared/IconView.cpp index 1fa696cd73..e69b6828c4 100644 --- a/src/kits/shared/IconView.cpp +++ b/src/kits/shared/IconView.cpp @@ -45,7 +45,7 @@ status_t IconView::SetIcon(const BPath& path, icon_size iconSize) { fDrawIcon = false; - + if (iconSize != fIconSize) { BBitmap* bitmap = new BBitmap(BRect(iconSize), B_RGBA32); if (bitmap == NULL) @@ -83,7 +83,7 @@ status_t IconView::SetIcon(const uint8_t* data, size_t size, icon_size iconSize) { fDrawIcon = false; - + if (iconSize != fIconSize) { BBitmap* bitmap = new BBitmap(BRect(iconSize), B_RGBA32); if (bitmap == NULL) @@ -113,6 +113,32 @@ IconView::SetIcon(const uint8_t* data, size_t size, icon_size iconSize) } +status_t +IconView::SetIcon(const BBitmap* icon) +{ + if (icon == NULL) { + fDrawIcon = false; + return B_OK; + } + + delete fIconBitmap; + fIconBitmap = new BBitmap(icon); + if (fIconBitmap == NULL) + return B_NO_MEMORY; + + status_t status = fIconBitmap->InitCheck(); + if (status != B_OK) + return status; + + fIconSize = (icon_size)(fIconBitmap->Bounds().IntegerWidth() + 1); + _SetSize(); + + fDrawIcon = true; + Invalidate(); + return B_OK; +} + + void IconView::DrawIcon(bool draw) {