Index: skia/animator/SkDisplayAdd.cpp |
=================================================================== |
--- skia/animator/SkDisplayAdd.cpp (revision 16859) |
+++ skia/animator/SkDisplayAdd.cpp (working copy) |
@@ -1,254 +0,0 @@ |
-/* libs/graphics/animator/SkDisplayAdd.cpp |
-** |
-** Copyright 2006, The Android Open Source Project |
-** |
-** Licensed under the Apache License, Version 2.0 (the "License"); |
-** you may not use this file except in compliance with the License. |
-** You may obtain a copy of the License at |
-** |
-** http://www.apache.org/licenses/LICENSE-2.0 |
-** |
-** Unless required by applicable law or agreed to in writing, software |
-** distributed under the License is distributed on an "AS IS" BASIS, |
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-** See the License for the specific language governing permissions and |
-** limitations under the License. |
-*/ |
- |
-#include "SkDisplayAdd.h" |
-#include "SkAnimateMaker.h" |
-#include "SkDisplayApply.h" |
-#include "SkDisplayList.h" |
-#include "SkDrawable.h" |
-#include "SkDrawGroup.h" |
- |
-#if SK_USE_CONDENSED_INFO == 0 |
- |
-const SkMemberInfo SkAdd::fInfo[] = { |
- SK_MEMBER(mode, AddMode), |
- SK_MEMBER(offset, Int), |
- SK_MEMBER(use, Drawable), |
- SK_MEMBER(where, Drawable) |
-}; |
- |
-#endif |
- |
-// start here; |
-// add onEndElement to turn where string into f_Where |
-// probably need new SkAnimateMaker::resolve flavor that takes |
-// where="id", where="event-target" or not-specified |
-// offset="#" (implements before, after, and index if no 'where') |
- |
-DEFINE_GET_MEMBER(SkAdd); |
- |
-SkAdd::SkAdd() : mode(kMode_indirect), |
- offset(SK_MaxS32), use(NULL), where(NULL) { |
-} |
- |
-SkDisplayable* SkAdd::deepCopy(SkAnimateMaker* maker) { |
- SkDrawable* saveUse = use; |
- SkDrawable* saveWhere = where; |
- use = NULL; |
- where = NULL; |
- SkAdd* copy = (SkAdd*) INHERITED::deepCopy(maker); |
- copy->use = use = saveUse; |
- copy->where = where = saveWhere; |
- return copy; |
-} |
- |
-bool SkAdd::draw(SkAnimateMaker& maker) { |
- SkASSERT(use); |
- SkASSERT(use->isDrawable()); |
- if (mode == kMode_indirect) |
- use->draw(maker); |
- return false; |
-} |
- |
-#ifdef SK_DUMP_ENABLED |
-void SkAdd::dump(SkAnimateMaker* maker) { |
- dumpBase(maker); |
- dumpAttrs(maker); |
- if (where) |
- SkDebugf("where=\"%s\" ", where->id); |
- if (mode == kMode_immediate) |
- SkDebugf("mode=\"immediate\" "); |
- SkDebugf(">\n"); |
- SkDisplayList::fIndent += 4; |
- int save = SkDisplayList::fDumpIndex; |
- if (use) //just in case |
- use->dump(maker); |
- SkDisplayList::fIndent -= 4; |
- SkDisplayList::fDumpIndex = save; |
- dumpEnd(maker); |
-} |
-#endif |
- |
-bool SkAdd::enable(SkAnimateMaker& maker ) { |
- SkDisplayTypes type = getType(); |
- SkDisplayList& displayList = maker.fDisplayList; |
- SkTDDrawableArray* parentList = displayList.getDrawList(); |
- if (type == SkType_Add) { |
- if (use == NULL) // not set in apply yet |
- return true; |
- } |
- bool skipAddToParent = true; |
- SkASSERT(type != SkType_Replace || where); |
- SkTDDrawableArray* grandList SK_INIT_TO_AVOID_WARNING; |
- SkGroup* parentGroup = NULL; |
- SkGroup* thisGroup = NULL; |
- int index = where ? displayList.findGroup(where, &parentList, &parentGroup, |
- &thisGroup, &grandList) : 0; |
- if (index < 0) |
- return true; |
- int max = parentList->count(); |
- if (where == NULL && type == SkType_Move) |
- index = max; |
- if (offset != SK_MaxS32) { |
- index += offset; |
- if (index > max) { |
- maker.setErrorCode(SkDisplayXMLParserError::kIndexOutOfRange); |
- return true; // caller should not add |
- } |
- } |
- if (offset < 0 && where == NULL) |
- index += max + 1; |
- switch (type) { |
- case SkType_Add: |
- if (offset == SK_MaxS32 && where == NULL) { |
- if (use->isDrawable()) { |
- skipAddToParent = mode == kMode_immediate; |
- if (skipAddToParent) { |
- if (where == NULL) { |
- SkTDDrawableArray* useParentList; |
- index = displayList.findGroup(this, &useParentList, &parentGroup, |
- &thisGroup, &grandList); |
- if (index >= 0) { |
- parentGroup->markCopySize(index); |
- parentGroup->markCopySet(index); |
- useParentList->begin()[index] = use; |
- break; |
- } |
- } |
- *parentList->append() = use; |
- } |
- } |
- break; |
- } else { |
- if (thisGroup) |
- thisGroup->markCopySize(index); |
- *parentList->insert(index) = use; |
- if (thisGroup) |
- thisGroup->markCopySet(index); |
- if (use->isApply()) |
- ((SkApply*) use)->setEmbedded(); |
- } |
- break; |
- case SkType_Move: { |
- int priorLocation = parentList->find(use); |
- if (priorLocation < 0) |
- break; |
- *parentList->insert(index) = use; |
- if (index < priorLocation) |
- priorLocation++; |
- parentList->remove(priorLocation); |
- } break; |
- case SkType_Remove: { |
- SkDisplayable* old = (*parentList)[index]; |
- if (((SkRemove*)(this))->fDelete) { |
- delete old; |
- goto noHelperNeeded; |
- } |
- for (int inner = 0; inner < maker.fChildren.count(); inner++) { |
- SkDisplayable* child = maker.fChildren[inner]; |
- if (child == old || child->contains(old)) |
- goto noHelperNeeded; |
- } |
- if (maker.fHelpers.find(old) < 0) |
- maker.helperAdd(old); |
-noHelperNeeded: |
- parentList->remove(index); |
- } break; |
- case SkType_Replace: |
- if (thisGroup) { |
- thisGroup->markCopySize(index); |
- if (thisGroup->markedForDelete(index)) { |
- SkDisplayable* old = (*parentList)[index]; |
- if (maker.fHelpers.find(old) < 0) |
- maker.helperAdd(old); |
- } |
- } |
- (*parentList)[index] = use; |
- if (thisGroup) |
- thisGroup->markCopySet(index); |
- break; |
- default: |
- SkASSERT(0); |
- } |
- if (type == SkType_Remove) |
- return true; |
- if (use->hasEnable()) |
- use->enable(maker); |
- return skipAddToParent; // append if indirect: *parentList->append() = this; |
-} |
- |
-bool SkAdd::hasEnable() const { |
- return true; |
-} |
- |
-void SkAdd::initialize() { |
- if (use) |
- use->initialize(); |
-} |
- |
-bool SkAdd::isDrawable() const { |
- return getType() == SkType_Add && mode == kMode_indirect && offset == SK_MaxS32 && |
- where == NULL && use != NULL && use->isDrawable(); |
-} |
- |
-//SkDisplayable* SkAdd::resolveTarget(SkAnimateMaker& maker) { |
-// return use; |
-//} |
- |
- |
-bool SkClear::enable(SkAnimateMaker& maker ) { |
- SkDisplayList& displayList = maker.fDisplayList; |
- displayList.clear(); |
- return true; |
-} |
- |
- |
-#if SK_USE_CONDENSED_INFO == 0 |
- |
-const SkMemberInfo SkMove::fInfo[] = { |
- SK_MEMBER_INHERITED |
-}; |
- |
-#endif |
- |
-DEFINE_GET_MEMBER(SkMove); |
- |
-#if SK_USE_CONDENSED_INFO == 0 |
- |
-const SkMemberInfo SkRemove::fInfo[] = { |
- SK_MEMBER_ALIAS(delete, fDelete, Boolean), // !!! experimental |
- SK_MEMBER(offset, Int), |
- SK_MEMBER(where, Drawable) |
-}; |
- |
-#endif |
- |
-DEFINE_GET_MEMBER(SkRemove); |
- |
-SkRemove::SkRemove() : fDelete(false) { |
-} |
- |
-#if SK_USE_CONDENSED_INFO == 0 |
- |
-const SkMemberInfo SkReplace::fInfo[] = { |
- SK_MEMBER_INHERITED |
-}; |
- |
-#endif |
- |
-DEFINE_GET_MEMBER(SkReplace); |
- |