Пример #1
0
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;
    }

}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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();
	
}
Пример #5
0
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;
	}

}
Пример #6
0
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);
}
Пример #7
0
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;
	}

}
Пример #8
0
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);
        }
    }
}