* integration of vector icons with the registrar and the mime data base
* additional versions of SetIcon[ForType] and GetIcon[ForType] in BMimeType and BAppFileInfo, which handle flat vector icon data * changes in Tracker to support scalable icons (currently broken for non-vector icons and needs cleanup) and drawing icons correctly with alpha channel (large parts of this work done by Michael Lotz) If someone feels like looking over the changes, that would be much appreciated! :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18699 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1334,50 +1334,50 @@ GetAppIconFromAttr(BFile *file, BBitmap *result, icon_size size)
|
||||
// app icons -- the call is expensive because by default
|
||||
// the resource fork is scanned to read the icons
|
||||
|
||||
#ifdef B_APP_FILE_INFO_IS_FAST
|
||||
//#ifdef B_APP_FILE_INFO_IS_FAST
|
||||
BAppFileInfo appFileInfo(file);
|
||||
return appFileInfo.GetIcon(result, size);
|
||||
#else
|
||||
|
||||
const char *attrName = kAttrIcon;
|
||||
uint32 type = B_RAW_TYPE;
|
||||
|
||||
// try vector icon
|
||||
attr_info ainfo;
|
||||
status_t ret = file->GetAttrInfo(attrName, &ainfo);
|
||||
|
||||
if (ret == B_OK) {
|
||||
uint8 buffer[ainfo.size];
|
||||
ssize_t readResult = file->ReadAttr(attrName, type, 0, buffer,
|
||||
ainfo.size);
|
||||
if (readResult == ainfo.size) {
|
||||
if (BIconUtils::GetVectorIcon(buffer, ainfo.size, result) == B_OK)
|
||||
return B_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// try again with R5 icons
|
||||
attrName = size == B_LARGE_ICON ? kAttrLargeIcon : kAttrMiniIcon;
|
||||
type = size == B_LARGE_ICON ? LARGE_ICON_TYPE : MINI_ICON_TYPE;
|
||||
|
||||
ret = file->GetAttrInfo(attrName, &ainfo);
|
||||
if (ret < B_OK)
|
||||
return ret;
|
||||
|
||||
uint8 buffer[ainfo.size];
|
||||
|
||||
ssize_t readResult = file->ReadAttr(attrName, type, 0, buffer, ainfo.size);
|
||||
if (readResult <= 0)
|
||||
return (status_t)readResult;
|
||||
|
||||
if (result->ColorSpace() != B_CMAP8) {
|
||||
ret = BIconUtils::ConvertFromCMAP8(buffer, size, size, size, result);
|
||||
} else {
|
||||
result->SetBits(buffer, result->BitsLength(), 0, B_CMAP8);
|
||||
}
|
||||
|
||||
return ret;
|
||||
#endif // B_APP_FILE_INFO_IS_FAST
|
||||
//#else
|
||||
//
|
||||
// const char *attrName = kAttrIcon;
|
||||
// uint32 type = B_RAW_TYPE;
|
||||
//
|
||||
// // try vector icon
|
||||
// attr_info ainfo;
|
||||
// status_t ret = file->GetAttrInfo(attrName, &ainfo);
|
||||
//
|
||||
// if (ret == B_OK) {
|
||||
// uint8 buffer[ainfo.size];
|
||||
// ssize_t readResult = file->ReadAttr(attrName, type, 0, buffer,
|
||||
// ainfo.size);
|
||||
// if (readResult == ainfo.size) {
|
||||
// if (BIconUtils::GetVectorIcon(buffer, ainfo.size, result) == B_OK)
|
||||
// return B_OK;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // try again with R5 icons
|
||||
// attrName = size == B_LARGE_ICON ? kAttrLargeIcon : kAttrMiniIcon;
|
||||
// type = size == B_LARGE_ICON ? LARGE_ICON_TYPE : MINI_ICON_TYPE;
|
||||
//
|
||||
// ret = file->GetAttrInfo(attrName, &ainfo);
|
||||
// if (ret < B_OK)
|
||||
// return ret;
|
||||
//
|
||||
// uint8 buffer[ainfo.size];
|
||||
//
|
||||
// ssize_t readResult = file->ReadAttr(attrName, type, 0, buffer, ainfo.size);
|
||||
// if (readResult <= 0)
|
||||
// return (status_t)readResult;
|
||||
//
|
||||
// if (result->ColorSpace() != B_CMAP8) {
|
||||
// ret = BIconUtils::ConvertFromCMAP8(buffer, size, size, size, result);
|
||||
// } else {
|
||||
// result->SetBits(buffer, result->BitsLength(), 0, B_CMAP8);
|
||||
// }
|
||||
//
|
||||
// return ret;
|
||||
//#endif // B_APP_FILE_INFO_IS_FAST
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user