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) {