static PyObject *Icn_GetIconFamilyData(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; IconFamilyHandle iconFamily; OSType iconType; Handle h; #ifndef GetIconFamilyData PyMac_PRECHECK(GetIconFamilyData); #endif if (!PyArg_ParseTuple(_args, "O&O&O&", ResObj_Convert, &iconFamily, PyMac_GetOSType, &iconType, ResObj_Convert, &h)) return NULL; _err = GetIconFamilyData(iconFamily, iconType, h); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; }
OSErr IconFamilyToIPIconWithSelector(IconFamilyHandle theIconFamily, const IPIconSelector *ipSelector,IPIconRec *ipIcon) { OSErr err=noErr; Handle dataHandle; long dataSize; if (ipSelector->selector != 0) { err=IconFamilyToIconSuite(theIconFamily,ipSelector->selector,&ipIcon->iconSuite); if (err==noErr) { /* Mac OS X 10.8 (Mavericks) で動作させると、32ビットデータがコピーされないので、 手作業でコピーする */ if (ipSelector->selector|kLarge32BitData) { Handle dummyHandle; dummyHandle = NewHandle(0); err=GetIconFamilyData(theIconFamily,kLarge32BitData,dummyHandle); if (err==noErr) { dataSize=GetHandleSize(dummyHandle); err=AddIconToSuite(dummyHandle,ipIcon->iconSuite,kLarge32BitData); } else { DisposeHandle(dummyHandle); err=noErr; } } if (ipSelector->selector|kSmall32BitData) { Handle dummyHandle; dummyHandle = NewHandle(0); err=GetIconFamilyData(theIconFamily,kSmall32BitData,dummyHandle); if (err==noErr) { dataSize=GetHandleSize(dummyHandle); err=AddIconToSuite(dummyHandle,ipIcon->iconSuite,kSmall32BitData); } else { DisposeHandle(dummyHandle); err=noErr; } } } } else ipIcon->iconSuite = NULL; if (err==noErr) { if (isThumbnailIconsAvailable) { /* the others */ if (ipSelector->it32) { dataHandle=NewHandle(0); err=GetIconFamilyData(theIconFamily,kThumbnail32BitData,dataHandle); if (err==noErr) { dataSize = GetHandleSize(dataHandle); if (dataSize > 0) { ipIcon->it32Data = dataHandle; HandToHand(&ipIcon->it32Data); } else ipIcon->it32Data = NULL; } else if (err == noIconDataAvailableErr || err == paramErr) // 1.20b14 { err = noErr; ipIcon->it32Data = NULL; } DisposeHandle(dataHandle); } else ipIcon->it32Data = NULL; if (ipSelector->t8mk) { dataHandle=NewHandle(0); err=GetIconFamilyData(theIconFamily,kThumbnail8BitMask,dataHandle); if (err==noErr) { dataSize = GetHandleSize(dataHandle); if (dataSize > 0) { ipIcon->t8mkData = dataHandle; HandToHand(&ipIcon->t8mkData); } else ipIcon->t8mkData = NULL; } else if (err == noIconDataAvailableErr || err == paramErr) // 1.20b14 { err = noErr; ipIcon->t8mkData = NULL; } DisposeHandle(dataHandle); } else ipIcon->t8mkData = NULL; } else { ipIcon->it32Data = NULL; ipIcon->t8mkData = NULL; } } return err; }