QString QDesktopServices::storageLocation(StandardLocation type) { if (QDesktopServices::HomeLocation == type) return QDir::homePath(); short domain = kOnAppropriateDisk; if (QDesktopServices::DataLocation == type || QDesktopServices::CacheLocation == type) domain = kUserDomain; // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/Reference/reference.html FSRef ref; OSErr err = FSFindFolder(domain, translateLocation(type), false, &ref); if (err) return QString(); QString path = getFullPath(ref); QString appName = QCoreApplication::applicationName(); if (!appName.isEmpty() && (QDesktopServices::DataLocation == type || QDesktopServices::CacheLocation == type)) path += QLatin1String("/") + appName; return path; }
QString QDesktopServices::storageLocation(StandardLocation type) { if (type == HomeLocation) return QDir::homePath(); if (type == TempLocation) return QDir::tempPath(); short domain = kOnAppropriateDisk; if (type == DataLocation || type == CacheLocation) domain = kUserDomain; // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/Reference/reference.html FSRef ref; OSErr err = FSFindFolder(domain, translateLocation(type), false, &ref); if (err) return QString(); QString path = getFullPath(ref); if (type == DataLocation || type == CacheLocation) { if (QCoreApplication::organizationName().isEmpty() == false) path += QLatin1Char('/') + QCoreApplication::organizationName(); if (QCoreApplication::applicationName().isEmpty() == false) path += QLatin1Char('/') + QCoreApplication::applicationName(); } return path; }
QString QDesktopServices::storageLocation(const Location type) { if (QDesktopServices::Home == type) return QDir::homePath(); // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/folder_manager_ref/chapter_1.4_section_7.htm FSRef ref; OSErr err = FSFindFolder(kOnAppropriateDisk, translateLocation(type), false, &ref); if (err) return QString(); return getFullPath(ref); }
QString QDesktopServices::displayName(StandardLocation type) { if (QDesktopServices::HomeLocation == type) return QObject::tr("Home"); FSRef ref; OSErr err = FSFindFolder(kOnAppropriateDisk, translateLocation(type), false, &ref); if (err) return QString(); QCFString displayName; err = LSCopyDisplayNameForRef(&ref, &displayName); if (err) return QString(); return static_cast<QString>(displayName); }
static QString macLocation(QStandardPaths::StandardLocation type, short domain) { // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/Reference/reference.html FSRef ref; OSErr err = FSFindFolder(domain, translateLocation(type), false, &ref); if (err) return QString(); QString path = getFullPath(ref); if (type == QStandardPaths::DataLocation || type == QStandardPaths::CacheLocation) { if (!QCoreApplication::organizationName().isEmpty()) path += QLatin1Char('/') + QCoreApplication::organizationName(); if (!QCoreApplication::applicationName().isEmpty()) path += QLatin1Char('/') + QCoreApplication::applicationName(); } return path; }
QString QStandardPaths::displayName(StandardLocation type) { if (QStandardPaths::HomeLocation == type) return QCoreApplication::translate("QStandardPaths", "Home"); FSRef ref; OSErr err = FSFindFolder(kOnAppropriateDisk, translateLocation(type), false, &ref); if (err) return QString(); CFStringRef displayName = 0; err = LSCopyDisplayNameForRef(&ref, &displayName); if (err) return QString(); QString result = QString::fromUtf16((ushort*)CFStringGetCharactersPtr(displayName), CFStringGetLength(displayName)); CFRelease(displayName); return result; }
// Number of cameras not used. Multiple cameras never used in 7.1.5 bool readCamera(M2Camera const* cam, uint32 buffSize, M2Header const* header, CinematicCameraEntry const* dbcentry) { char const* buffer = reinterpret_cast<char const*>(header); FlyByCameraCollection cameras; FlyByCameraCollection targetcam; G3D::Vector4 dbcData; dbcData.x = dbcentry->Origin.X; dbcData.y = dbcentry->Origin.Y; dbcData.z = dbcentry->Origin.Z; dbcData.w = dbcentry->OriginFacing; // Read target locations, only so that we can calculate orientation for (uint32 k = 0; k < cam->target_positions.timestamps.number; ++k) { // Extract Target positions if (cam->target_positions.timestamps.offset_elements + sizeof(M2Array) > buffSize) return false; M2Array const* targTsArray = reinterpret_cast<M2Array const*>(buffer + cam->target_positions.timestamps.offset_elements); if (targTsArray->offset_elements + sizeof(uint32) > buffSize || cam->target_positions.values.offset_elements + sizeof(M2Array) > buffSize) return false; uint32 const* targTimestamps = reinterpret_cast<uint32 const*>(buffer + targTsArray->offset_elements); M2Array const* targArray = reinterpret_cast<M2Array const*>(buffer + cam->target_positions.values.offset_elements); if (targArray->offset_elements + sizeof(M2SplineKey<G3D::Vector3>) > buffSize) return false; M2SplineKey<G3D::Vector3> const* targPositions = reinterpret_cast<M2SplineKey<G3D::Vector3> const*>(buffer + targArray->offset_elements); // Read the data for this set uint32 currPos = targArray->offset_elements; for (uint32 i = 0; i < targTsArray->number; ++i) { if (currPos + sizeof(M2SplineKey<G3D::Vector3>) > buffSize) return false; // Translate co-ordinates G3D::Vector3 newPos = translateLocation(&dbcData, &cam->target_position_base, &targPositions->p0); // Add to vector FlyByCamera thisCam; thisCam.timeStamp = targTimestamps[i]; thisCam.locations.Relocate(newPos.x, newPos.y, newPos.z, 0.0f); targetcam.push_back(thisCam); targPositions++; currPos += sizeof(M2SplineKey<G3D::Vector3>); } } // Read camera positions and timestamps (translating first position of 3 only, we don't need to translate the whole spline) for (uint32 k = 0; k < cam->positions.timestamps.number; ++k) { // Extract Camera positions for this set if (cam->positions.timestamps.offset_elements + sizeof(M2Array) > buffSize) return false; M2Array const* posTsArray = reinterpret_cast<M2Array const*>(buffer + cam->positions.timestamps.offset_elements); if (posTsArray->offset_elements + sizeof(uint32) > buffSize || cam->positions.values.offset_elements + sizeof(M2Array) > buffSize) return false; uint32 const* posTimestamps = reinterpret_cast<uint32 const*>(buffer + posTsArray->offset_elements); M2Array const* posArray = reinterpret_cast<M2Array const*>(buffer + cam->positions.values.offset_elements); if (posArray->offset_elements + sizeof(M2SplineKey<G3D::Vector3>) > buffSize) return false; M2SplineKey<G3D::Vector3> const* positions = reinterpret_cast<M2SplineKey<G3D::Vector3> const*>(buffer + posArray->offset_elements); // Read the data for this set uint32 currPos = posArray->offset_elements; for (uint32 i = 0; i < posTsArray->number; ++i) { if (currPos + sizeof(M2SplineKey<G3D::Vector3>) > buffSize) return false; // Translate co-ordinates G3D::Vector3 newPos = translateLocation(&dbcData, &cam->position_base, &positions->p0); // Add to vector FlyByCamera thisCam; thisCam.timeStamp = posTimestamps[i]; thisCam.locations.Relocate(newPos.x, newPos.y, newPos.z); if (targetcam.size() > 0) { // Find the target camera before and after this camera FlyByCamera lastTarget; FlyByCamera nextTarget; // Pre-load first item lastTarget = targetcam[0]; nextTarget = targetcam[0]; for (uint32 j = 0; j < targetcam.size(); ++j) { nextTarget = targetcam[j]; if (targetcam[j].timeStamp > posTimestamps[i]) break; lastTarget = targetcam[j]; } float x = lastTarget.locations.GetPositionX(); float y = lastTarget.locations.GetPositionY(); float z = lastTarget.locations.GetPositionZ(); // Now, the timestamps for target cam and position can be different. So, if they differ we interpolate if (lastTarget.timeStamp != posTimestamps[i]) { uint32 timeDiffTarget = nextTarget.timeStamp - lastTarget.timeStamp; uint32 timeDiffThis = posTimestamps[i] - lastTarget.timeStamp; float xDiff = nextTarget.locations.GetPositionX() - lastTarget.locations.GetPositionX(); float yDiff = nextTarget.locations.GetPositionY() - lastTarget.locations.GetPositionY(); float zDiff = nextTarget.locations.GetPositionZ() - lastTarget.locations.GetPositionZ(); x = lastTarget.locations.GetPositionX() + (xDiff * (float(timeDiffThis) / float(timeDiffTarget))); y = lastTarget.locations.GetPositionY() + (yDiff * (float(timeDiffThis) / float(timeDiffTarget))); z = lastTarget.locations.GetPositionZ() + (zDiff * (float(timeDiffThis) / float(timeDiffTarget))); } float xDiff = x - thisCam.locations.GetPositionX(); float yDiff = y - thisCam.locations.GetPositionY(); thisCam.locations.SetOrientation(std::atan2(yDiff, xDiff)); } cameras.push_back(thisCam); positions++; currPos += sizeof(M2SplineKey<G3D::Vector3>); } } sFlyByCameraStore[dbcentry->ID] = cameras; return true; }