status_t _get_next_image_info(team_id teamID, int32 *cookie, image_info *info, size_t size) { if (size > sizeof(image_info)) return B_BAD_VALUE; // get the team Team* team = Team::Get(teamID); if (team == NULL) return B_BAD_TEAM_ID; BReference<Team> teamReference(team, true); // iterate through the team's images MutexLocker imageLocker(sImageMutex); struct image* image = NULL; int32 count = 0; while ((image = (struct image*)list_get_next_item(&team->image_list, image)) != NULL) { if (count == *cookie) { memcpy(info, &image->info.basic_info, size); (*cookie)++; return B_OK; } count++; } return B_ENTRY_NOT_FOUND; }
/** * \brief Sets the delays between each image in an animation */ void MythUIImage::SetDelays(QVector<int> delays) { QWriteLocker updateLocker(&d->m_UpdateLock); QMutexLocker imageLocker(&m_ImagesLock); QVector<int>::iterator it; for (it = delays.begin(); it != delays.end(); ++it) m_Delays[m_Delays.size()] = *it; if (m_Delay == -1) m_Delay = m_Delays[0]; m_LastDisplay = QTime::currentTime(); m_CurPos = 0; }
struct image* image_iterate_through_team_images(team_id teamID, image_iterator_callback callback, void* cookie) { // get the team Team* team = Team::Get(teamID); if (team == NULL) return NULL; BReference<Team> teamReference(team, true); // iterate through the team's images MutexLocker imageLocker(sImageMutex); struct image* image = NULL; while ((image = (struct image*)list_get_next_item(&team->image_list, image)) != NULL) { if (callback(image, cookie)) break; } return image; }