| OLD | NEW |
| (Empty) |
| 1 /* libs/graphics/animator/SkDisplayMovie.cpp | |
| 2 ** | |
| 3 ** Copyright 2006, The Android Open Source Project | |
| 4 ** | |
| 5 ** Licensed under the Apache License, Version 2.0 (the "License"); | |
| 6 ** you may not use this file except in compliance with the License. | |
| 7 ** You may obtain a copy of the License at | |
| 8 ** | |
| 9 ** http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 ** | |
| 11 ** Unless required by applicable law or agreed to in writing, software | |
| 12 ** distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 ** See the License for the specific language governing permissions and | |
| 15 ** limitations under the License. | |
| 16 */ | |
| 17 | |
| 18 #include "SkDisplayMovie.h" | |
| 19 #include "SkAnimateMaker.h" | |
| 20 #include "SkCanvas.h" | |
| 21 #include "SkPaint.h" | |
| 22 | |
| 23 #if SK_USE_CONDENSED_INFO == 0 | |
| 24 | |
| 25 const SkMemberInfo SkDisplayMovie::fInfo[] = { | |
| 26 SK_MEMBER(src, String) | |
| 27 }; | |
| 28 | |
| 29 #endif | |
| 30 | |
| 31 DEFINE_GET_MEMBER(SkDisplayMovie); | |
| 32 | |
| 33 SkDisplayMovie::SkDisplayMovie() : fDecodedSuccessfully(false), fLoaded(false),
fMovieBuilt(false) { | |
| 34 fMovie.fMaker->fInMovie = true; | |
| 35 } | |
| 36 | |
| 37 SkDisplayMovie::~SkDisplayMovie() { | |
| 38 } | |
| 39 | |
| 40 void SkDisplayMovie::buildMovie() { | |
| 41 if (fMovieBuilt) | |
| 42 return; | |
| 43 SkAnimateMaker* movieMaker = fMovie.fMaker; | |
| 44 SkAnimateMaker* parentMaker = movieMaker->fParentMaker; | |
| 45 if (src.size() == 0 || parentMaker == NULL) | |
| 46 return; | |
| 47 movieMaker->fPrefix.set(parentMaker->fPrefix); | |
| 48 fDecodedSuccessfully = fMovie.fMaker->decodeURI(src.c_str()); | |
| 49 if (fDecodedSuccessfully == false) { | |
| 50 | |
| 51 if (movieMaker->getErrorCode() != SkXMLParserError::kNoError || movieMak
er->getNativeCode() != -1) { | |
| 52 movieMaker->setInnerError(parentMaker, src); | |
| 53 parentMaker->setErrorCode(SkDisplayXMLParserError::kInMovie); | |
| 54 } else { | |
| 55 parentMaker->setErrorNoun(src); | |
| 56 parentMaker->setErrorCode(SkDisplayXMLParserError::kMovieNameUnknown
OrMissing); | |
| 57 } | |
| 58 } | |
| 59 fMovieBuilt = true; | |
| 60 } | |
| 61 | |
| 62 SkDisplayable* SkDisplayMovie::deepCopy(SkAnimateMaker* maker) { | |
| 63 SkDisplayMovie* copy = (SkDisplayMovie*) INHERITED::deepCopy(maker); | |
| 64 copy->fMovie.fMaker->fParentMaker = fMovie.fMaker->fParentMaker; | |
| 65 copy->fMovie.fMaker->fHostEventSinkID = fMovie.fMaker->fHostEventSinkID; | |
| 66 copy->fMovieBuilt = false; | |
| 67 *fMovie.fMaker->fParentMaker->fMovies.append() = copy; | |
| 68 return copy; | |
| 69 } | |
| 70 | |
| 71 void SkDisplayMovie::dirty() { | |
| 72 buildMovie(); | |
| 73 } | |
| 74 | |
| 75 bool SkDisplayMovie::doEvent(SkDisplayEvent::Kind kind, SkEventState* state) { | |
| 76 if (fLoaded == false) | |
| 77 return false; | |
| 78 fMovie.fMaker->fEnableTime = fMovie.fMaker->fParentMaker->fEnableTime; | |
| 79 return fMovie.fMaker->fEvents.doEvent(*fMovie.fMaker, kind, state); | |
| 80 } | |
| 81 | |
| 82 bool SkDisplayMovie::draw(SkAnimateMaker& maker) { | |
| 83 if (fDecodedSuccessfully == false) | |
| 84 return false; | |
| 85 if (fLoaded == false) | |
| 86 enable(maker); | |
| 87 maker.fCanvas->save(); | |
| 88 SkPaint local = SkPaint(*maker.fPaint); | |
| 89 bool result = fMovie.draw(maker.fCanvas, &local, | |
| 90 maker.fDisplayList.getTime()) != SkAnimator::kNotDifferent; | |
| 91 maker.fDisplayList.fInvalBounds.join(fMovie.fMaker->fDisplayList.fInvalBound
s); | |
| 92 maker.fCanvas->restore(); | |
| 93 return result; | |
| 94 } | |
| 95 | |
| 96 #ifdef SK_DUMP_ENABLED | |
| 97 void SkDisplayMovie::dump(SkAnimateMaker* maker) { | |
| 98 dumpBase(maker); | |
| 99 SkDebugf("src=\"%s\"/>\n", src.c_str()); | |
| 100 SkAnimateMaker* movieMaker = fMovie.fMaker; | |
| 101 SkDisplayList::fIndent += 4; | |
| 102 movieMaker->fDisplayList.dumpInner(movieMaker); | |
| 103 SkDisplayList::fIndent -= 4; | |
| 104 dumpEnd(maker); | |
| 105 } | |
| 106 | |
| 107 void SkDisplayMovie::dumpEvents() { | |
| 108 fMovie.fMaker->fEvents.dump(*fMovie.fMaker); | |
| 109 } | |
| 110 #endif | |
| 111 | |
| 112 bool SkDisplayMovie::enable(SkAnimateMaker& maker) { | |
| 113 if (fDecodedSuccessfully == false) | |
| 114 return false; | |
| 115 SkAnimateMaker* movieMaker = fMovie.fMaker; | |
| 116 movieMaker->fEvents.doEvent(*movieMaker, SkDisplayEvent::kOnload, NULL); | |
| 117 movieMaker->fEvents.removeEvent(SkDisplayEvent::kOnload, NULL); | |
| 118 fLoaded = true; | |
| 119 movieMaker->fLoaded = true; | |
| 120 return false; | |
| 121 } | |
| 122 | |
| 123 bool SkDisplayMovie::hasEnable() const { | |
| 124 return true; | |
| 125 } | |
| 126 | |
| 127 void SkDisplayMovie::onEndElement(SkAnimateMaker& maker) { | |
| 128 #if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING | |
| 129 fMovie.fMaker->fDebugTimeBase = maker.fDebugTimeBase; | |
| 130 #endif | |
| 131 fMovie.fMaker->fPrefix.set(maker.fPrefix); | |
| 132 fMovie.fMaker->fHostEventSinkID = maker.fHostEventSinkID; | |
| 133 fMovie.fMaker->fParentMaker = &maker; | |
| 134 buildMovie(); | |
| 135 *maker.fMovies.append() = this; | |
| 136 } | |
| 137 | |
| 138 | |
| OLD | NEW |