Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}