Skip to content

Commit

Permalink
HaikuDepot: Added vector icons to package list and info area
Browse files Browse the repository at this point in the history
 * SharedBitmap can be pointed to a resource (later the icons will
   likely be fetched from somewhere else).
 * SharedBitmap caches 16, 32, and 64 icons.
 Ã * Added icon resources for WonderBrush and Paladin dummy packages.
  • Loading branch information
stippi committed Jul 31, 2013
1 parent d66a9a6 commit 0ee1699
Show file tree
Hide file tree
Showing 9 changed files with 193 additions and 16 deletions.
65 changes: 65 additions & 0 deletions src/apps/haiku-depot/HaikuDepot.rdef
Expand Up @@ -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"
};

4 changes: 2 additions & 2 deletions src/apps/haiku-depot/MainWindow.cpp
Expand Up @@ -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.",
Expand All @@ -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.",
Expand Down
82 changes: 80 additions & 2 deletions src/apps/haiku-depot/PackageInfo.cpp
Expand Up @@ -7,22 +7,100 @@

#include <stdio.h>

#include <Application.h>
#include <Bitmap.h>
#include <IconUtils.h>
#include <Resources.h>

#include "support.h"


// #pragma mark - SharedBitmap


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<const uint8*>(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];
}


Expand Down
18 changes: 14 additions & 4 deletions src/apps/haiku-depot/PackageInfo.h
Expand Up @@ -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* _CreateBitmap(int32 size) const;

private:
BBitmap* fBitmap;
int32 fResourceID;
BBitmap* fBitmap[3];
};


Expand All @@ -49,7 +59,7 @@ class UserInfo {
{ return fNickName; }

private:
BitmapRef fAvatar;
BitmapRef fAvatar;
BString fNickName;
};

Expand Down
19 changes: 12 additions & 7 deletions src/apps/haiku-depot/PackageInfoView.cpp
Expand Up @@ -35,7 +35,6 @@ class BitmapView : public BView {

virtual ~BitmapView()
{
delete fBitmap;
}

virtual void Draw(BRect updateRect)
Expand Down Expand Up @@ -67,14 +66,13 @@ class BitmapView : public BView {
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();
Expand All @@ -85,7 +83,7 @@ class BitmapView : public BView {
}

private:
BBitmap* fBitmap;
const BBitmap* fBitmap;
};


Expand Down Expand Up @@ -121,8 +119,13 @@ class TitleView : public BGroupView {

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();
}
Expand Down Expand Up @@ -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();
}
Expand Down
1 change: 1 addition & 0 deletions src/apps/haiku-depot/PackageInfoView.h
Expand Up @@ -28,6 +28,7 @@ class PackageInfoView : public BGroupView {
private:
TitleView* fTitleView;
PagesView* fPagesView;
PackageInfo fPackageInfo;
};

#endif // PACKAGE_INFO_VIEW_H
2 changes: 1 addition & 1 deletion src/apps/haiku-depot/PackageListView.cpp
Expand Up @@ -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
Expand Down
15 changes: 15 additions & 0 deletions src/apps/haiku-depot/support.cpp
Expand Up @@ -9,10 +9,13 @@
#include <stdio.h>
#include <string.h>

#include <Application.h>
#include <Directory.h>
#include <File.h>
#include <FindDirectory.h>
#include <Path.h>
#include <Resources.h>
#include <Roster.h>
#include <Screen.h>


Expand Down Expand Up @@ -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);
}

3 changes: 3 additions & 0 deletions src/apps/haiku-depot/support.h
Expand Up @@ -10,6 +10,7 @@


class BMessage;
class BResources;
class BWindow;


Expand All @@ -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

0 comments on commit 0ee1699

Please sign in to comment.