// =========================================================================== // CarbonScrap.cp // =========================================================================== #include "CarbonScrap.h" #include #include "CThrownResult.h" ScrapRef CarbonScrap::GetCurrentScrap() { ScrapRef scrapRef = NULL; ::GetCurrentScrap(&scrapRef); return scrapRef; } SInt32 CarbonScrap::GetDataSize(ScrapRef inRef, ScrapFlavorType inDataType) { return CarbonScrap::GetData(inRef, inDataType, NULL); } SInt32 CarbonScrap::GetData( ScrapRef inRef, ScrapFlavorType inDataType, Handle ioData) { SInt32 byteCount = 0; OSStatus status = ::GetScrapFlavorSize(inRef, inDataType, &byteCount); if ( (ioData != NULL) && (status != noTypeErr) && (status != cantGetFlavorErr) ) { CThrownOSStatus err = status; ::SetHandleSize(ioData, byteCount); err = ::MemError(); StHandleLocker lock(ioData); err = ::GetScrapFlavorData(inRef, inDataType, &byteCount, *ioData ); } return byteCount; } bool CarbonScrap::HasData( ScrapRef inRef, ScrapFlavorType inDataType) { ScrapFlavorFlags flags; return ( ::GetScrapFlavorFlags(inRef, inDataType, &flags) == noErr ); } void CarbonScrap::SetData( ScrapRef &ioRef, ScrapFlavorType inDataType, const void* inDataPtr, SInt32 inDataLength, bool inClear) { if (inClear) { CarbonScrap::ClearData(ioRef); } CThrownOSStatus err = ::PutScrapFlavor( ioRef, inDataType, kScrapFlavorMaskNone, inDataLength, inDataPtr ); } void CarbonScrap::SetData( ScrapRef &ioRef, ScrapFlavorType inDataType, Handle inData, bool inClear) { StHandleLocker lock(inData); CarbonScrap::SetData(ioRef, inDataType, *inData, ::GetHandleSize(inData), inClear); } void CarbonScrap::ClearData(ScrapRef &ioRef) { CThrownOSStatus err = ::ClearScrap(&ioRef); }