Added missing vector icon support.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34230 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin 2009-11-25 05:27:56 +00:00
parent e1d5f30e87
commit e899cf2aa0
4 changed files with 67 additions and 79 deletions

View File

@ -21,6 +21,7 @@
#include <Directory.h>
#include <Entry.h>
#include <File.h>
#include <IconUtils.h>
#include <Path.h>
#include <PathMonitor.h>
#include <Resources.h>
@ -52,29 +53,37 @@ public:
DeviceWatcher::DeviceWatcher()
: BLooper("MIDI devices watcher"),
fDeviceEndpointsMap()
fDeviceEndpointsMap(), fVectorIconData(NULL), fVectorIconDataSize(0),
fLargeIcon(NULL), fMiniIcon(NULL)
{
// TODO: add support for vector icons
fLargeIcon = new BBitmap(BRect(0, 0, 31, 31), B_CMAP8);
fMiniIcon = new BBitmap(BRect(0, 0, 15, 15), B_CMAP8);
// Load midi endpoint vector icon data
app_info info;
be_app->GetAppInfo(&info);
BFile file(&info.ref, B_READ_ONLY);
BResources res;
if (res.SetTo(&file) == B_OK) {
size_t size;
const void* bits;
bits = res.LoadResource(B_LARGE_ICON_TYPE, 10, &size);
fLargeIcon->SetBits(bits, size, 0, B_CMAP8);
bits = res.LoadResource(B_MINI_ICON_TYPE, 11, &size);
fMiniIcon->SetBits(bits, size, 0, B_CMAP8);
BResources resources;
if (resources.SetTo(&file) == B_OK) {
fVectorIconData = (const uint8*)resources.LoadResource(
B_VECTOR_ICON_TYPE, "endpoint_vector_icon", &fVectorIconDataSize);
}
// Render 32x32 and 16x16 icons for R5 compatibility
if (fVectorIconData != NULL) {
fLargeIcon = new(std::nothrow) BBitmap(BRect(0, 0, 31, 31), B_CMAP8);
fMiniIcon = new(std::nothrow) BBitmap(BRect(0, 0, 15, 15), B_CMAP8);
if (BIconUtils::GetVectorIcon(fVectorIconData, fVectorIconDataSize,
fLargeIcon) != B_OK) {
delete fLargeIcon;
fLargeIcon = NULL;
}
if (BIconUtils::GetVectorIcon(fVectorIconData, fVectorIconDataSize,
fMiniIcon) != B_OK) {
delete fMiniIcon;
fMiniIcon = NULL;
}
}
Start();
}
@ -234,8 +243,7 @@ DeviceWatcher::_RemoveDevice(const char* path)
if (!deviceEndpoints) {
TRACE(("_RemoveDevice(\"%s\") didn't find endpoint in map!!\n", path));
return;
}
}
TRACE((" _RemoveDevice(\"%s\") unregistering\n", path));
deviceEndpoints->fConsumer->Unregister();
@ -256,13 +264,20 @@ DeviceWatcher::_SetIcons(BMidiEndpoint* endpoint)
{
BMessage msg;
// TODO: handle Haiku vector icon type
msg.AddData("be:large_icon", B_LARGE_ICON_TYPE, fLargeIcon->Bits(),
fLargeIcon->BitsLength());
if (fVectorIconData && fVectorIconDataSize > 0) {
msg.AddData("haiku:vector_icon", B_VECTOR_ICON_TYPE, fVectorIconData,
fVectorIconDataSize);
}
msg.AddData("be:mini_icon", B_MINI_ICON_TYPE, fMiniIcon->Bits(),
fMiniIcon->BitsLength());
if (fLargeIcon) {
msg.AddData("be:large_icon", B_LARGE_ICON_TYPE, fLargeIcon->Bits(),
fLargeIcon->BitsLength());
}
if (fMiniIcon) {
msg.AddData("be:mini_icon", B_MINI_ICON_TYPE, fMiniIcon->Bits(),
fMiniIcon->BitsLength());
}
endpoint->SetProperties(&msg);
}

View File

@ -39,6 +39,8 @@ private:
typedef HashMap<HashString, DeviceEndpoints*> DeviceEndpointsMap;
DeviceEndpointsMap fDeviceEndpointsMap;
const uint8* fVectorIconData;
size_t fVectorIconDataSize;
BBitmap* fLargeIcon;
BBitmap* fMiniIcon;
};

View File

@ -2,6 +2,7 @@ SubDir HAIKU_TOP src servers midi ;
SetSubDirSupportedPlatformsBeOSCompatible ;
UseLibraryHeaders icon ;
UsePrivateHeaders midi shared storage ;
Server midi_server :
@ -12,7 +13,7 @@ Server midi_server :
# storage
NodeMonitorHandler.cpp
: be midi2 libshared.a $(TARGET_LIBSTDC++)
: be midi2 libshared.a libicon.a $(TARGET_LIBSTDC++)
: midi_server.rdef
;

View File

@ -37,57 +37,27 @@ resource vector_icon array {
$"20A04622"
};
resource(10, "bus_large") #'ICON' array {
$"FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFF00000000000A0A0A0A0A0A0A0A0000000000FFFFFFFFFFFFFF"
$"FFFFFFFFFFFF000000000A0A0A0A0A0A0A0A0A0A0A0A00000000FFFFFFFFFFFF"
$"FFFFFFFFFF0000000A0A0A0A0A0A0A00000A0A0A0A0A0A0A000000FFFFFFFFFF"
$"FFFFFFFF0000000A0A0A0A0A0A0A000000000A0A0A0A0A0A0A000000FFFFFFFF"
$"FFFFFF0000000C0C0C0C0C0C0C0C000000000C0C0C0C0C0C0C0C000000FFFFFF"
$"FFFF0000000C0C0C00000C0C0C0C0C00000C0C0C0C0C00000C0C0C000000FFFF"
$"FFFF00000C0C0C000000000C0C0C0C0C0C0C0C0C0C000000000C0C0C0000FFFF"
$"FF0000000C0C0C000000000C0C0C0C0C0C0C0C0C0C000000000C0C0C000000FF"
$"FF00000E0E0E0E0E00000E0E0E0E0E0E0E0E0E0E0E0E00000E0E0E0E0E0000FF"
$"FF00000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0000FF"
$"00000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0000"
$"00000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0000"
$"0000101010000010101010101010101010101010101010101000001010100000"
$"0000101000000000101010101010101010101010101010100000000010100000"
$"0000101000000000101010101010101010101010101010100000000010100000"
$"0000101010000010101010101010101010101010101010101000001010100000"
$"0000121212121212121212121212121212121212121212121212121212120000"
$"0000121212121212121212121212121212121212121212121212121212120000"
$"FF000012121212121212121212121212121212121212121212121212120000FF"
$"FF000012121212121212121212121212121212121212121212121212120000FF"
$"FF000000141414141414141414141414141414141414141414141414000000FF"
$"FFFF00001414141414141414141414141414141414141414141414140000FFFF"
$"FFFF00000014141414141414141414141414141414141414141414000000FFFF"
$"FFFFFF0000001414141414141414141414141414141414141414000000FFFFFF"
$"FFFFFFFF000000161616161616161616161616161616161616000000FFFFFFFF"
$"FFFFFFFFFF00000016161616161616161616161616161616000000FFFFFFFFFF"
$"FFFFFFFFFFFF0000000016161616161616161616161600000000FFFFFFFFFFFF"
$"FFFFFFFFFFFFFF000000000016161616161616160000000000FFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFF"
$"FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"
resource(10, "endpoint_vector_icon") #'VICN' array {
$"6E63696609050102001605BF2F31BF38ED3ED85CBECFC4499A0C4B5022000137"
$"7000716D73FFFF020116033EB0000000000000003EB000482000482000BE4B00"
$"84FF3202000604BE37C8B7C456379553BE1C1A4B24CF4C81BE0E0000008F0402"
$"02FF685B5BFFFFFFFF02030603BCD4ABBC8A9D3DAD85BE0C574A5F474B05CB8A"
$"080808FFC9C4C4FFB2A7A702000603BA8802BC993B3DD226BBB8D249CA264BD1"
$"370008010100FFAA00FF08010102000603BA51E2B9CF15B97D653A20214B3949"
$"4A12BA0008010100FFAA00FF08010102000603390B9BBB2FCAB9D8B1B7AD044A"
$"23004B7F990008010100FFAA00FF0801010200060336A66635F2E6BB18843C13"
$"D84A921C4AB34F00F9EED70037290DFFF9EED70302044022C65922B926222240"
$"22B92622C659405EB9265EC6595E5E405EC6595EB9260A043A4E3A5A465A464E"
$"060AFEF107BF7348BF73C46EBF73C46EBF73C46E3DC5ED3DC46E3DC76BBF73C7"
$"6BBF73C7A6BF73C73057C00CC00CC76BC00CC777C00CC75F43C5ED43C76B43C4"
$"6EC00CC462C00CC457C00CC46E480C0A0001001001178400040A040100123FAF"
$"C50000000000003FB0194301D643017D01178500040A030100123FA000000000"
$"0000003FA04841FFFB42FB8801178200040A010100023F77770000000000003F"
$"77774422224422220A080101123F62760000000000003F6276447627CA100001"
$"178100040A050101023F569FB154F43154F43F569F447A31CA030C0A06010230"
$"202201158000040A070102123F3E45BE57593E57593F3E45C6D250493A4C0115"
$"8000040A060102123EE5493EC273BEC2733EE54949CC6EC6FEAD01158000040A"
$"060102123C90423FCA00BFCA003C90424B274EC67A9201158000040A07010212"
$"3C7791BFCE173FCE173C7791C4F4BD4B400301158000040A0000023866660000"
$"0000000038AAAA49AB33499AAA"
};
resource(11, "bus_small") #'MICN' array {
$"FFFFFFFFFFFF00000000FFFFFFFFFFFF"
$"FFFFFFFF00000A0A0A0A0000FFFFFFFF"
$"FFFFFF000A0A0A00000A0A0A00FFFFFF"
$"FFFF000C0C0C0C00000C0C0C0C00FFFF"
$"FF000C00000C0C0C0C0C0C00000C00FF"
$"FF000E00000E0E0E0E0E0E00000E00FF"
$"000E0E0E0E0E0E0E0E0E0E0E0E0E0E00"
$"00100000101010101010101000001000"
$"00100000101010101010101000001000"
$"00121212121212121212121212121200"
$"FF0012121212121212121212121200FF"
$"FF0014141414141414141414141400FF"
$"FFFF001414141414141414141400FFFF"
$"FFFFFF00161616161616161600FFFFFF"
$"FFFFFFFF0000161616160000FFFFFFFF"
$"FFFFFFFFFFFF00000000FFFFFFFFFFFF"
};