diff --git a/src/servers/midi/DeviceWatcher.cpp b/src/servers/midi/DeviceWatcher.cpp index d36d3b5f58..2a5ca8523d 100644 --- a/src/servers/midi/DeviceWatcher.cpp +++ b/src/servers/midi/DeviceWatcher.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -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); } diff --git a/src/servers/midi/DeviceWatcher.h b/src/servers/midi/DeviceWatcher.h index 838a9a5415..864f6bbd42 100644 --- a/src/servers/midi/DeviceWatcher.h +++ b/src/servers/midi/DeviceWatcher.h @@ -39,6 +39,8 @@ private: typedef HashMap DeviceEndpointsMap; DeviceEndpointsMap fDeviceEndpointsMap; + const uint8* fVectorIconData; + size_t fVectorIconDataSize; BBitmap* fLargeIcon; BBitmap* fMiniIcon; }; diff --git a/src/servers/midi/Jamfile b/src/servers/midi/Jamfile index 33b6c92950..431689f7ed 100644 --- a/src/servers/midi/Jamfile +++ b/src/servers/midi/Jamfile @@ -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 ; diff --git a/src/servers/midi/midi_server.rdef b/src/servers/midi/midi_server.rdef index 0701a77244..3598b912c7 100644 --- a/src/servers/midi/midi_server.rdef +++ b/src/servers/midi/midi_server.rdef @@ -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" -}; -