bool SkAnimator::onEvent(const SkEvent& evt) { #ifdef SK_DEBUG SkAnimator* root = fMaker->getRoot(); if (root == nullptr) root = this; if (root->isTrackingEvents()) root->eventDone(evt); #endif if (evt.isType(SK_EventType_OnEnd)) { SkEventState eventState; SkDEBUGCODE(bool success =) evt.findPtr("anim", (void**) &eventState.fDisplayable); SkASSERT(success); SkDEBUGCODE(success =) evt.findS32("time", (int32_t*) &fMaker->fEnableTime); SkASSERT(success); fMaker->fAdjustedStart = fMaker->getAppTime() - fMaker->fEnableTime; fMaker->fEvents.doEvent(*fMaker, SkDisplayEvent::kOnEnd, &eventState); fMaker->fAdjustedStart = 0; goto inval; }
bool SkAnimator::onEvent(const SkEvent& evt) { #ifdef SK_DEBUG SkAnimator* root = fMaker->getRoot(); if (root == NULL) root = this; if (root->isTrackingEvents()) root->eventDone(evt); #endif if (evt.isType(SK_EventType_OnEnd)) { SkEventState eventState; bool success = evt.findPtr("anim", (void**) &eventState.fDisplayable); SkASSERT(success); success = evt.findS32("time", (int32_t*) &fMaker->fEnableTime); SkASSERT(success); fMaker->fAdjustedStart = fMaker->getAppTime() - fMaker->fEnableTime; fMaker->fEvents.doEvent(*fMaker, SkDisplayEvent::kOnEnd, &eventState); fMaker->fAdjustedStart = 0; goto inval; } if (evt.isType(SK_EventType_Delay)) { fMaker->doDelayedEvent(); goto inval; } { const char* id = evt.findString("id"); if (id == NULL) return false; SkDisplayable** firstMovie = fMaker->fMovies.begin(); SkDisplayable** endMovie = fMaker->fMovies.end(); for (SkDisplayable** ptr = firstMovie; ptr < endMovie; ptr++) { SkDisplayMovie* movie = (SkDisplayMovie*) *ptr; movie->doEvent(evt); } { SkDisplayable* event; if (fMaker->find(id, &event) == false) return false; #if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING SkString debugOut; SkMSec realTime = fMaker->getAppTime(); debugOut.appendS32(realTime - fMaker->fDebugTimeBase); debugOut.append(" onEvent id="); debugOut.append(id); #endif SkMSec time = evt.getFast32(); if (time != 0) { SkMSec app = fMaker->getAppTime(); fMaker->setEnableTime(app, time); #if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING debugOut.append(" time="); debugOut.appendS32(time - fMaker->fDebugTimeBase); debugOut.append(" adjust="); debugOut.appendS32(fMaker->fAdjustedStart); #endif } #if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING SkDebugf("%s\n", debugOut.c_str()); #endif SkASSERT(event->isEvent()); SkDisplayEvent* displayEvent = (SkDisplayEvent*) event; displayEvent->populateInput(*fMaker, evt); displayEvent->enableEvent(*fMaker); } } inval: fMaker->notifyInval(); return true; }