| Index: skia/animator/SkDisplayList.cpp
|
| ===================================================================
|
| --- skia/animator/SkDisplayList.cpp (revision 16859)
|
| +++ skia/animator/SkDisplayList.cpp (working copy)
|
| @@ -1,168 +0,0 @@
|
| -/* libs/graphics/animator/SkDisplayList.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 "SkDisplayList.h"
|
| -#include "SkAnimateActive.h"
|
| -#include "SkAnimateBase.h"
|
| -#include "SkAnimateMaker.h"
|
| -#include "SkDisplayApply.h"
|
| -#include "SkDrawable.h"
|
| -#include "SkDrawGroup.h"
|
| -#include "SkDrawMatrix.h"
|
| -#include "SkInterpolator.h"
|
| -#include "SkTime.h"
|
| -
|
| -SkDisplayList::SkDisplayList() : fDrawBounds(true), fUnionBounds(false), fInTime(0) {
|
| -}
|
| -
|
| -SkDisplayList::~SkDisplayList() {
|
| -}
|
| -
|
| -void SkDisplayList::append(SkActive* active) {
|
| - *fActiveList.append() = active;
|
| -}
|
| -
|
| -bool SkDisplayList::draw(SkAnimateMaker& maker, SkMSec inTime) {
|
| - validate();
|
| - fInTime = inTime;
|
| - bool result = false;
|
| - fInvalBounds.setEmpty();
|
| - if (fDrawList.count()) {
|
| - for (SkActive** activePtr = fActiveList.begin(); activePtr < fActiveList.end(); activePtr++) {
|
| - SkActive* active = *activePtr;
|
| - active->reset();
|
| - }
|
| - for (int index = 0; index < fDrawList.count(); index++) {
|
| - SkDrawable* draw = fDrawList[index];
|
| - draw->initialize(); // allow matrices to reset themselves
|
| - SkASSERT(draw->isDrawable());
|
| - validate();
|
| - result |= draw->draw(maker);
|
| - }
|
| - }
|
| - validate();
|
| - return result;
|
| -}
|
| -
|
| -int SkDisplayList::findGroup(SkDrawable* match, SkTDDrawableArray** list,
|
| - SkGroup** parent, SkGroup** found, SkTDDrawableArray**grandList) {
|
| - *parent = NULL;
|
| - *list = &fDrawList;
|
| - *grandList = &fDrawList;
|
| - return SearchForMatch(match, list, parent, found, grandList);
|
| -}
|
| -
|
| -void SkDisplayList::hardReset() {
|
| - fDrawList.reset();
|
| - fActiveList.reset();
|
| -}
|
| -
|
| -bool SkDisplayList::onIRect(const SkIRect& r) {
|
| - fBounds = r;
|
| - return fDrawBounds;
|
| -}
|
| -
|
| -int SkDisplayList::SearchForMatch(SkDrawable* match, SkTDDrawableArray** list,
|
| - SkGroup** parent, SkGroup** found, SkTDDrawableArray**grandList) {
|
| - *found = NULL;
|
| - for (int index = 0; index < (*list)->count(); index++) {
|
| - SkDrawable* draw = (**list)[index];
|
| - if (draw == match)
|
| - return index;
|
| - if (draw->isApply()) {
|
| - SkApply* apply = (SkApply*) draw;
|
| - if (apply->scope == match)
|
| - return index;
|
| - if (apply->scope->isGroup() && SearchGroupForMatch(apply->scope, match, list, parent, found, grandList, index))
|
| - return index;
|
| - if (apply->mode == SkApply::kMode_create) {
|
| - for (SkDrawable** ptr = apply->fScopes.begin(); ptr < apply->fScopes.end(); ptr++) {
|
| - SkDrawable* scope = *ptr;
|
| - if (scope == match)
|
| - return index;
|
| - //perhaps should call SearchGroupForMatch here as well (on scope)
|
| - }
|
| - }
|
| - }
|
| - if (draw->isGroup() && SearchGroupForMatch(draw, match, list, parent, found, grandList, index))
|
| - return index;
|
| -
|
| - }
|
| - return -1;
|
| -}
|
| -
|
| -bool SkDisplayList::SearchGroupForMatch(SkDrawable* draw, SkDrawable* match, SkTDDrawableArray** list,
|
| - SkGroup** parent, SkGroup** found, SkTDDrawableArray** grandList, int &index) {
|
| - SkGroup* group = (SkGroup*) draw;
|
| - if (group->getOriginal() == match)
|
| - return true;
|
| - SkTDDrawableArray* saveList = *list;
|
| - int groupIndex = group->findGroup(match, list, parent, found, grandList);
|
| - if (groupIndex >= 0) {
|
| - *found = group;
|
| - index = groupIndex;
|
| - return true;
|
| - }
|
| - *list = saveList;
|
| - return false;
|
| - }
|
| -
|
| -void SkDisplayList::reset() {
|
| - for (int index = 0; index < fDrawList.count(); index++) {
|
| - SkDrawable* draw = fDrawList[index];
|
| - if (draw->isApply() == false)
|
| - continue;
|
| - SkApply* apply = (SkApply*) draw;
|
| - apply->reset();
|
| - }
|
| -}
|
| -
|
| -void SkDisplayList::remove(SkActive* active) {
|
| - int index = fActiveList.find(active);
|
| - SkASSERT(index >= 0);
|
| - fActiveList.remove(index); // !!! could use shuffle instead
|
| - SkASSERT(fActiveList.find(active) < 0);
|
| -}
|
| -
|
| -#ifdef SK_DUMP_ENABLED
|
| -int SkDisplayList::fDumpIndex;
|
| -int SkDisplayList::fIndent;
|
| -
|
| -void SkDisplayList::dump(SkAnimateMaker* maker) {
|
| - fIndent = 0;
|
| - dumpInner(maker);
|
| -}
|
| -
|
| -void SkDisplayList::dumpInner(SkAnimateMaker* maker) {
|
| - for (int index = 0; index < fDrawList.count(); index++) {
|
| - fDumpIndex = index;
|
| - fDrawList[fDumpIndex]->dump(maker);
|
| - }
|
| -}
|
| -
|
| -#endif
|
| -
|
| -#ifdef SK_DEBUG
|
| -void SkDisplayList::validate() {
|
| - for (int index = 0; index < fDrawList.count(); index++) {
|
| - SkDrawable* draw = fDrawList[index];
|
| - draw->validate();
|
| - }
|
| -}
|
| -#endif
|
| -
|
| -
|
|
|