diff --git a/src/apps/haiku-depot/HaikuDepot.rdef b/src/apps/haiku-depot/HaikuDepot.rdef index c91dc910ca..efad9161dd 100644 --- a/src/apps/haiku-depot/HaikuDepot.rdef +++ b/src/apps/haiku-depot/HaikuDepot.rdef @@ -44,3 +44,68 @@ resource vector_icon { $"0A0A0106000A090107000A0001081001178400040A070108000A0B010900" }; +resource(601, "WonderBrush icon") #'VICN' array { + $"6E6369662604015F03010000020006023B24000000000000003B24004A570046" + $"240000E9C06AFFC7903302000602A83D70BA60513A6051A83D704A1085461F33" + $"00311F01FFC7903303462F0703663300020106023628F50000000000003628F5" + $"46D9FF46500000FFFFFFFFFF9800036B4315020106023628F500000000000036" + $"28F546D9FF46500000FFFFFFFFFFFF3303323298020106023628F50000000000" + $"003628F546D9FF46500000FFFFFFFF3398FF033B2C68020106023628F5000000" + $"0000003628F546D9FF46500000FFFFFFFFCB98CB020006023335C22CCCCCACCC" + $"CC3335C246819948C6E100FFFFFFFFCB98CB03003333020106023628F5000000" + $"0000003628F546D9FD46500000FFFFFFFF3366CB02001603352A3D2FCCCDAFCC" + $"CD352A3D46D9EB4804A300B710FFFFB7020006023338512CE148ACE148333851" + $"470199478E1400FFFFFFFF3366CB03003300020106023628F500000000000036" + $"28F546D9FF46500000FFFFFFFF33CB33020006023335C22CCCCCACCCCC3335C2" + $"46C1EB48A6E100FFFFFFFF33CB330352250E020106023628F500000000000036" + $"28F546D9FF46500000FFFFFFFFFF6633020006023335C22CCCCCACCCCC3335C2" + $"46C1EB48C6E100FFFFFFFFFF66330336470D020106023628F500000000000036" + $"28F546D9FF46500000FFFFFFFF98CB33020006023333332CCCCCACCCCC333333" + $"46C1C248C6CC00FFFFFFFF98CB3302000602BB0000A5D70025D700BB0000483F" + $"C2493FEB00FFFAD3FFFFF8C403E7B43303DAAA380200060237A28133B201B3B2" + $"0137A2814AEDDA4947D200C38644FFE7A738020006023AA6B83A34A3BA34A33A" + $"A6B847CE3D49E25100FFF073FFFFCB330200060238DA3D33851EB3851E38DA3D" + $"4A530A4A14F500CB9833FFE7A7380200060238DBD835A371B5A37138DBD84A30" + $"D04AD3B400275527FF379237020006023ACE3D382000B820003ACE3D483FEB4B" + $"1FF50022C775FF33986603CB983303FFFFCB03986600190608FAAA48604A5EC5" + $"C65EC4A15E525EC94E55CA19C8855654C5DCC669C9B4C1F2C6EAC027BEF2CC81" + $"0A04C228C62BC6EBC15EC6EB33BD5B2A0A053A2ABD70B85DC6EB37C6EB33BD5B" + $"2A0A0446413A2C523546410A044A3D523752334A390A044A3B4A3F523952350A" + $"044A4C524452374A3D0A06322B263426523E5E4A524A340A06322B2634263632" + $"2D4A364A340605FE01283A28B62E28B80D28B5B32C25B672B501B91CB4FB30B6" + $"2E30B5B130B879400607B62D2A2C282CB5D0B711B5D3B87DB5CD2E28B7C62CB8" + $"26B87DB826B712B8262AB7C70606B60D2A2E322CBA97B718BA95B87DBA9A2E32" + $"2E2CB8F3B877B8F6B718B8F0060566032A343C2E3E342CBB56B877BB5AB718BB" + $"540A063E3D263326373E414A384A340A04263526393E433E3F0A043E3F3E434A" + $"3A4A360A053E413E584A4EC3BABC913E410A043E563E5E4A524A4B0A043E523E" + $"544AC37C4AC2B00A042637264C3E583E410A04264B26523E5E3E560A0426C2BD" + $"26C3893E543E520204BAE0BFEEBC99C0CCB928BF11B712C03BB77BBF33B6AAC1" + $"43B96BC39EB7B2C2C1BB24C47BBD38C351BCD0C45ABDA0C2490A044046404848" + $"41483F0A04404A404C464746452D0A000100000A0101011001178300040A0201" + $"02000A030103000A050104000A1D0105000A1E0106000A010107100117830004" + $"0A050108000A05010920261B0A06010A20261B0A070109202CB2010A08010A20" + $"2CB2010A0901092032200A0A010A2032200A0B01092038220A0C010A2038220A" + $"10010B2038220A0D010C2038220A0E010920201E0A0F010A20201E0A10010B20" + $"201E0A11010C20201E0A1201092026200A13010A2026200A10010B2026200A14" + $"010C2026200A150109202CB3FF0A16010A202CB3FF0A10010B202CB3FF0A1701" + $"0C202CB3FF0A1801092032250A19010A2032250A10010B2032250A1A010C2032" + $"250A05010D000A1B010E000A1C010F000A1F0113000A200110000A2202141500" + $"0A21021112000A230116000A240116023EFF8A0000000000003EAE40443F1647" + $"0ED90A2502171800" +}; + + +resource(602, "Paladin icon") #'VICN' array { + $"6E63696606020006043957AF38D49DBE95C03F0D724AFEB8466CB70BF0EEFB78" + $"D2CCEC84928FA5F14B475F020006033D9E9C3D10ADBE95C03F0D724AFEB8466C" + $"B77DFFC14B7FC89634FFCCA75E0200060236FC4C36BBBFBEB37A3EF3444B4C94" + $"44B21800A3A3A3FF362F2F03EBB54C050104016F050A05235E265146304C3432" + $"5A0A044A2C512555284E300A06BCAEB6DCBEECB7DB523C5540C9D4BDA1BE60B5" + $"2A0A05C2B6B807433244374B37C58CBA120A065024502252225826592857290C" + $"0A0503000104163FFC930000000000003CF2864401484A928601158200040A05" + $"0102164015220000000000003DBCEA4284DF4A7FED01158400040A0401001001" + $"178403040A000100000A0401041001178300040A010104000A04010110011784" + $"00040A020101000A0401021001178400040A010102000A040103100117820004" + $"0A01010300" +}; + diff --git a/src/apps/haiku-depot/MainWindow.cpp b/src/apps/haiku-depot/MainWindow.cpp index 768b566bee..35b88816d1 100644 --- a/src/apps/haiku-depot/MainWindow.cpp +++ b/src/apps/haiku-depot/MainWindow.cpp @@ -153,7 +153,7 @@ MainWindow::_InitDummyModel() DepotInfo depot(B_TRANSLATE("Default")); PackageInfo wonderbrush( - BitmapRef(), + BitmapRef(new SharedBitmap(601), true), "WonderBrush", "2.1.2", "A vector based graphics editor.", @@ -172,7 +172,7 @@ MainWindow::_InitDummyModel() depot.AddPackage(wonderbrush); PackageInfo paladin( - BitmapRef(), + BitmapRef(new SharedBitmap(602), true), "Paladin", "1.2.0", "A C/C++ IDE based on Pe.", diff --git a/src/apps/haiku-depot/PackageInfo.cpp b/src/apps/haiku-depot/PackageInfo.cpp index dc718da679..5e249b1404 100644 --- a/src/apps/haiku-depot/PackageInfo.cpp +++ b/src/apps/haiku-depot/PackageInfo.cpp @@ -7,7 +7,12 @@ #include +#include #include +#include +#include + +#include "support.h" // #pragma mark - SharedBitmap @@ -15,14 +20,87 @@ SharedBitmap::SharedBitmap(BBitmap* bitmap) : - fBitmap(bitmap) + fResourceID(-1) { + fBitmap[0] = bitmap; + fBitmap[1] = NULL; + fBitmap[2] = NULL; +} + + +SharedBitmap::SharedBitmap(int32 resourceID) + : + fResourceID(resourceID) +{ + fBitmap[0] = NULL; + fBitmap[1] = NULL; + fBitmap[2] = NULL; +} + + +const BBitmap* +SharedBitmap::Bitmap(Size which) +{ + int32 index = 0; + int32 size = 16; + + switch (which) { + default: + case SIZE_16: + break; + + case SIZE_32: + index = 1; + size = 32; + break; + case SIZE_64: + index = 2; + size = 64; + break; + } + + if (fBitmap[index] == NULL) + fBitmap[index] = _CreateBitmap(size); + + return fBitmap[index]; +} + + +BBitmap* +SharedBitmap::_CreateBitmap(int32 size) const +{ + BResources resources; + status_t status = get_app_resources(resources); + if (status != B_OK) + return NULL; + + size_t dataSize; + const void* data = resources.LoadResource(B_VECTOR_ICON_TYPE, fResourceID, + &dataSize); + if (data == NULL) + return NULL; + + BBitmap* bitmap = new BBitmap(BRect(0, 0, size - 1, size - 1), 0, B_RGBA32); + status = bitmap->InitCheck(); + if (status == B_OK) { + status = BIconUtils::GetVectorIcon( + reinterpret_cast(data), dataSize, bitmap); + }; + + if (status != B_OK) { + delete bitmap; + bitmap = NULL; + } + + return bitmap; } SharedBitmap::~SharedBitmap() { - delete fBitmap; + delete fBitmap[0]; + delete fBitmap[1]; + delete fBitmap[2]; } diff --git a/src/apps/haiku-depot/PackageInfo.h b/src/apps/haiku-depot/PackageInfo.h index aa86e72b28..46fb90bbaf 100644 --- a/src/apps/haiku-depot/PackageInfo.h +++ b/src/apps/haiku-depot/PackageInfo.h @@ -17,14 +17,24 @@ class BBitmap; class SharedBitmap : public BReferenceable { public: + enum Size { + SIZE_16 = 0, + SIZE_32 = 1, + SIZE_64 = 2 + }; + SharedBitmap(BBitmap* bitmap); + SharedBitmap(int32 resourceID); ~SharedBitmap(); - const BBitmap* Bitmap() const - { return fBitmap; } + const BBitmap* Bitmap(Size which); private: - BBitmap* fBitmap; + BBitmap* _CreateBitmap(int32 size) const; + +private: + int32 fResourceID; + BBitmap* fBitmap[3]; }; @@ -49,7 +59,7 @@ public: { return fNickName; } private: - BitmapRef fAvatar; + BitmapRef fAvatar; BString fNickName; }; diff --git a/src/apps/haiku-depot/PackageInfoView.cpp b/src/apps/haiku-depot/PackageInfoView.cpp index 9b60ec1d72..14987fa844 100644 --- a/src/apps/haiku-depot/PackageInfoView.cpp +++ b/src/apps/haiku-depot/PackageInfoView.cpp @@ -35,7 +35,6 @@ public: virtual ~BitmapView() { - delete fBitmap; } virtual void Draw(BRect updateRect) @@ -67,14 +66,13 @@ public: return MinSize(); } - void SetBitmap(BBitmap* bitmap) + void SetBitmap(const BBitmap* bitmap) { if (bitmap == fBitmap) return; BSize size = MinSize(); - delete fBitmap; fBitmap = bitmap; BSize newSize = MinSize(); @@ -85,7 +83,7 @@ public: } private: - BBitmap* fBitmap; + const BBitmap* fBitmap; }; @@ -121,8 +119,13 @@ public: void SetPackage(const PackageInfo& package) { - // TODO: Fetch icon + if (package.Icon().Get() != NULL) + fIconView->SetBitmap(package.Icon()->Bitmap(SharedBitmap::SIZE_32)); + else + fIconView->SetBitmap(NULL); + fTitleView->SetText(package.Title()); + InvalidateLayout(); Invalidate(); } @@ -277,14 +280,16 @@ PackageInfoView::MessageReceived(BMessage* message) void PackageInfoView::SetPackage(const PackageInfo& package) { - fTitleView->SetPackage(package); - fPagesView->SetPackage(package); + fPackageInfo = package; + fTitleView->SetPackage(fPackageInfo); + fPagesView->SetPackage(fPackageInfo); } void PackageInfoView::Clear() { + fPackageInfo = PackageInfo(); fTitleView->Clear(); fPagesView->Clear(); } diff --git a/src/apps/haiku-depot/PackageInfoView.h b/src/apps/haiku-depot/PackageInfoView.h index 683c28eea7..0af22d5f1a 100644 --- a/src/apps/haiku-depot/PackageInfoView.h +++ b/src/apps/haiku-depot/PackageInfoView.h @@ -28,6 +28,7 @@ public: private: TitleView* fTitleView; PagesView* fPagesView; + PackageInfo fPackageInfo; }; #endif // PACKAGE_INFO_VIEW_H diff --git a/src/apps/haiku-depot/PackageListView.cpp b/src/apps/haiku-depot/PackageListView.cpp index 961f7c57d0..94ac30dec8 100644 --- a/src/apps/haiku-depot/PackageListView.cpp +++ b/src/apps/haiku-depot/PackageListView.cpp @@ -251,7 +251,7 @@ PackageRow::PackageRow(const PackageInfo& package) // NOTE: The icon BBitmap is referenced by the fPackage member. const BBitmap* icon = NULL; if (package.Icon().Get() != NULL) - icon = package.Icon()->Bitmap(); + icon = package.Icon()->Bitmap(SharedBitmap::SIZE_16); SetField(new BBitmapStringField(icon, package.Title()), kTitleColumn); // Rating diff --git a/src/apps/haiku-depot/support.cpp b/src/apps/haiku-depot/support.cpp index 022040db5d..b1d57f6454 100644 --- a/src/apps/haiku-depot/support.cpp +++ b/src/apps/haiku-depot/support.cpp @@ -9,10 +9,13 @@ #include #include +#include #include #include #include #include +#include +#include #include @@ -130,3 +133,15 @@ make_sure_frame_is_on_screen(BRect& frame, float borderWidth, return true; } + +status_t +get_app_resources(BResources& resources) +{ + app_info info; + status_t status = be_app->GetAppInfo(&info); + if (status != B_OK) + return status; + + return resources.SetTo(&info.ref); +} + diff --git a/src/apps/haiku-depot/support.h b/src/apps/haiku-depot/support.h index a23b3ac5ef..ca3d23094b 100644 --- a/src/apps/haiku-depot/support.h +++ b/src/apps/haiku-depot/support.h @@ -10,6 +10,7 @@ class BMessage; +class BResources; class BWindow; @@ -22,5 +23,7 @@ status_t save_settings(BMessage* message, const char* fileName, bool make_sure_frame_is_on_screen(BRect& frame, float borderWidth = 5.0f, float tabHeight = 20.0f, BWindow* window = NULL); +status_t get_app_resources(BResources& resources); + #endif // SUPPORT_H