void TemplateActor::handleNotification(VisualNotification& aNotification) { //VisualActor::handleNotification(aNotification); // debug VisualNotificationKey notificationKey = aNotification.getKey(); switch (notificationKey) { case kStringWithIdentifierLoadedAndCreatedMsg: if (aNotification.getIdentifier() == this->similarArtistsStringRequestId) { this->handleSimilarArtistsStringCompleted(); } break; case kAudioPlayTrackChangedEvt: this->createStringOfSimilarArtists(); break; default: char notificationString[64]; VisualNotification::convertNotificationKeyToString(notificationKey, notificationString); char errLog[256]; sprintf(errLog, "Unhandled VisualNotificationKey %s in file: %s (line: %d) [%s])", notificationString, __FILE__, __LINE__, __FUNCTION__); writeLog(errLog); break; } }
OSStatus VisualStageControl::handleKeyPressed(const char keyboadVal, const PlayerShowMode showMode) { OSStatus status = unimpErr; VisualNotification aNotification; switch (keyboadVal) { case 's': case 'S': if ((showMode & kIsShowing) == kIsShowing) { //VisualMessaging::post(kToggleShowProcessMonitorMsg); aNotification.setKey(kToggleShowProcessMonitorMsg); VisualStageControl::dispatchNotification(aNotification); } break; case 'a': case 'A': if ((showMode & kIsShowing) == kIsShowing) { //VisualMessaging::post(kToggleProcessMonitorAudioInfoMsg); aNotification.setKey(kToggleProcessMonitorAudioInfoMsg); VisualStageControl::dispatchNotification(aNotification); } break; default: // nothing break; } return status; }
OSStatus VisualImage::createHistogramOfRGBPixelsThread(void* visualImageHistogramPixelColors) { OSStatus retVal = noErr; #endif #if TARGET_OS_WIN DWORD VisualImage::createHistogramOfRGBPixelsThread(LPVOID visualImageHistogramPixelColors) { DWORD retVal = 0; #endif VisualHistogram::PixelColorHistogram aHistogram = VisualHistogram::createHistogramOfRGBPixels(((VisualImageHistogramPixelColors*)visualImageHistogramPixelColors)->pixelColorValuesVector); VisualImage* image = ((VisualImageHistogramPixelColors*)visualImageHistogramPixelColors)->visualImage; if (image->histogram != NULL) { delete image->histogram; image->histogram = NULL; } if (aHistogram.size() > 0) { image->histogram = new VisualHistogram::PixelColorHistogram(aHistogram); } delete (VisualImageHistogramPixelColors*)visualImageHistogramPixelColors; if (image->histogram != NULL) { VisualNotification aNotification; aNotification.setPointer(image); aNotification.setKey(kImageHistogramCompletedMsg); aNotification.post(); } return retVal; }
void VisualImage::writeToPNGFileAsyncAndDelete(VisualFile& aVisualFile) { // Only in the main thread we can transfer the memory of the graphics card to the CPU memory VisualNotification aNotification; aNotification.setPointer(this); aNotification.setObject(aVisualFile); aNotification.setKey(kImageWriteToPNGFileAndDeleteMsg); aNotification.post(); }
void TrackLyricsActor::handleNotification(const VisualNotification& aNotification) { //VisualActor::handleNotification(aNotification); // debug VisualString trackLyricsStr; const VisualString missingValueString("missing value"); // "missing value" is literally sent with streams that do not convey any lyrics VisualNotificationKey notificationKey = aNotification.getKey(); switch (notificationKey) { case kAudioMetadataIsAvailableMsg: VisualDataStore::createLyricsOfCurrentTrack(); break; case kLyricsAreAvailableMsg: trackLyricsStr = VisualDataStore::getLyricsOfCurrentTrack(); if (trackLyricsStr.getNumberOfNonWhitespaceCharacters() > 0 && trackLyricsStr != missingValueString) { OSStatus status = this->trackLyrics->makeTextureOfTrackLyrics(trackLyricsStr); if (status == noErr) { this->trackLyrics->calcPositionOnScreen(); VisualNotification::post(kLyricsTextureIsAvailableMsg); } } break; case kLyricsTextureIsAvailableMsg: this->textureOfCurrentTrackLyricsIsAvailable = true; this->trackLyrics->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnPlayInMS)); break; case kAudioPlayStartedEvt: this->trackLyrics->clear(); this->textureOfCurrentTrackLyricsIsAvailable = false; break; case kAudioPlayStoppedEvt: this->trackLyrics->clear(); this->textureOfCurrentTrackLyricsIsAvailable = false; break; case kAudioPlayPausedEvt: this->trackLyrics->fadeOut(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeOutTimeOnPauseInMS), 0.15f); break; case kAudioPlayResumedEvt: this->trackLyrics->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnResumeInMS)); break; case kAudioPlayReachedFadeOutTimeBeforeEndOfTrackEvt: this->trackLyrics->fadeOut(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeOutTimeBeforeEndOfTrackInMS)); break; case kCanvasReshapeEvt: if (textureOfCurrentTrackLyricsIsAvailable == true) { this->trackLyrics->calcPositionOnScreen(); } break; case kTrackInfoTextureChangedMsg: if (textureOfCurrentTrackLyricsIsAvailable == true) { this->trackLyrics->calcPositionOnScreen(); } break; default: writeLog("unhandled Notification in TrackLyricsActor"); break; } }
void VisualActor::handleNotification(VisualNotification& aNotification) { // hook method that can be implemented by subclass // notification is logged in case the actor registered for a notification but did not implement it VisualNotificationKey aKey = aNotification.getKey(); char notificationStr[64]; char logStr[128]; VisualNotification::convertNotificationKeyToString(aKey, notificationStr); sprintf(logStr, "VisualActor::handleNotification: %s -- %s", this->actorName, notificationStr); writeLog(logStr); }
void TrackTitleActor::handleNotification(const VisualNotification& aNotification) { //VisualActor::handleNotification(aNotification); // debug VisualNotificationKey notificationKey = aNotification.getKey(); switch (notificationKey) { case kAudioMetadataIsAvailableMsg: { const VisualString trackName = VisualDataStore::getNameOfCurrentTrack(); if (trackName.getNumberOfNonWhitespaceCharacters() > 0) { OSStatus status = this->trackTitle->makeTextureOfTrackTitle(trackName); if (status == noErr) { this->trackTitle->calcPositionOnScreen(); VisualDataStore::setValueInt(VisualConfiguration::kTrackInfoTextureHeight, this->trackTitle->getTrackInfoTextureHeightInPixels()); VisualNotification::post(kTrackInfoTextureIsAvailableMsg); } else { VisualDataStore::setValueInt(VisualConfiguration::kTrackInfoTextureHeight, 0); } VisualNotification::post(kTrackInfoTextureChangedMsg); } } break; case kTrackInfoTextureIsAvailableMsg: this->textureOfCurrentTrackTitleIsAvailable = true; this->trackTitle->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnPlayInMS)); break; case kAudioPlayStartedEvt: this->trackTitle->clear(); this->textureOfCurrentTrackTitleIsAvailable = false; break; case kAudioPlayStoppedEvt: this->trackTitle->clear(); this->textureOfCurrentTrackTitleIsAvailable = false; break; case kAudioPlayPausedEvt: this->trackTitle->pulsate(); break; case kAudioPlayResumedEvt: this->trackTitle->fadeIn(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeInTimeOnResumeInMS)); break; case kAudioPlayReachedFadeOutTimeBeforeEndOfTrackEvt: this->trackTitle->fadeOut(VisualDataStore::getPreferenceValueInt(VisualConfiguration::kFadeOutTimeBeforeEndOfTrackInMS)); break; case kCanvasReshapeEvt: this->trackTitle->calcPositionOnScreen(); VisualDataStore::setValueInt(VisualConfiguration::kTrackInfoTextureHeight, this->trackTitle->getTrackInfoTextureHeightInPixels()); break; default: writeLog("unhandled Notification in TrackTitleActor"); break; } }
void VisualStageControl::dispatchNotification(const VisualNotification& aNotification) { VisualActor* aVisualActor; const char* aVisualActorName; ProcessMonitorActor* aProcessMonitorActor; VisualNotificationKey keyOfNotification; theVisualStageControl = VisualStageControl::getInstance(); keyOfNotification = aNotification.getKey(); switch (keyOfNotification) { case kToggleShowProcessMonitorMsg: aVisualActor = theVisualStageControl->aVisualEnsemble->getVisualActorByName("PROCESSMONITOR"); if (aVisualActor) { aProcessMonitorActor = dynamic_cast<ProcessMonitorActor*>(aVisualActor); if (aProcessMonitorActor->getState() == kVisActNoShow) { aProcessMonitorActor->setState(kVisActOn); } else { aProcessMonitorActor->setState(kVisActNoShow); } } break; case kToggleProcessMonitorAudioInfoMsg: theVisualStageControl->aVisualEnsemble->resetVisualActorIterIndex(); while ((aVisualActor = theVisualStageControl->aVisualEnsemble->getNextVisualActor())) { aVisualActorName = aVisualActor->getName(); if (strcmp(aVisualActorName, "PROCESSMONITOR") == 0) { aProcessMonitorActor = dynamic_cast<ProcessMonitorActor*>(aVisualActor); if (aProcessMonitorActor->isAudioInfoShown() == true) { aProcessMonitorActor->setShowAudioInfo(false); } else { aProcessMonitorActor->setShowAudioInfo(true); } } } break; default: // let the whole ensemble know about the notification if (theVisualStageControl->aVisualEnsemble) { theVisualStageControl->aVisualEnsemble->dispatchNotification(aNotification); } } }