180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayable.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayApply.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkParse.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayList.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDisplayTypes.h" 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_FIND_LEAKS 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// int SkDisplayable::fAllocationCount; 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkTDDisplayableArray SkDisplayable::fAllocations; 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable::SkDisplayable() { 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru id = _id.c_str(); 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_FIND_LEAKS 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // fAllocationCount++; 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *fAllocations.append() = this; 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable::~SkDisplayable() { 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_FIND_LEAKS 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // fAllocationCount--; 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int index = fAllocations.find(this); 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(index >= 0); 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fAllocations.remove(index); 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 42363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerbool SkDisplayable::addChild(SkAnimateMaker& , SkDisplayable* child) { 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//void SkDisplayable::apply(SkAnimateMaker& , const SkMemberInfo* , 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// SkDisplayable* , SkScalar [], int count) { 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// SkASSERT(0); 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//} 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::canContainDependents() const { 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::childrenNeedDisposing() const { 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::clearBounder() { 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::contains(SkDisplayable* ) { 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable* SkDisplayable::contains(const SkString& ) { 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable* SkDisplayable::deepCopy(SkAnimateMaker* maker) { 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayTypes type = getType(); 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (type == SkType_Unknown) { 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(0); 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayable* copy = SkDisplayType::CreateInstance(maker, type); 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int index = -1; 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int propIndex = 0; 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMemberInfo* info; 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru do { 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info = copy->getMember(++index); 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info == NULL) 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_MemberProperty) { 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue value; 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (getProperty(propIndex, &value)) 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru copy->setProperty(propIndex, value); 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru propIndex++; 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_MemberFunction) 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_Array) { 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDOperandArray* array = (SkTDOperandArray*) info->memberData(this); 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int arrayCount; 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (array == NULL || (arrayCount = array->count()) == 0) 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDOperandArray* copyArray = (SkTDOperandArray*) info->memberData(copy); 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru copyArray->setCount(arrayCount); 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayTypes elementType; 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (type == SkType_Array) { 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayArray* dispArray = (SkDisplayArray*) this; 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru elementType = dispArray->values.getType(); 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru elementType = info->arrayType(); 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru size_t elementSize = SkMemberInfo::GetSize(elementType); 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru size_t byteSize = elementSize * arrayCount; 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru memcpy(copyArray->begin(), array->begin(), byteSize); 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkDisplayType::IsDisplayable(maker, info->fType)) { 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayable** displayable = (SkDisplayable**) info->memberData(this); 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (*displayable == NULL || *displayable == (SkDisplayable*) -1) 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayable* deeper = (*displayable)->deepCopy(maker); 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info->setMemberData(copy, deeper, sizeof(deeper)); 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_String || info->fType == SkType_DynamicString) { 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString* string; 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info->getString(this, &string); 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info->setString(copy, string); 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void* data = info->memberData(this); 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru size_t size = SkMemberInfo::GetSize(info->fType); 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info->setMemberData(copy, data, size); 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } while (true); 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru copy->dirty(); 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return copy; 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dirty() { 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dump(SkAnimateMaker* maker) { 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpBase(maker); 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dumpAttrs(maker); 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru this->dumpChildren(maker); 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dumpAttrs(SkAnimateMaker* maker) { 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayTypes type = getType(); 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (type == SkType_Unknown) { 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //SkDebugf("/>\n"); 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayable* blankCopy = SkDisplayType::CreateInstance(maker, type); 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int index = -1; 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int propIndex = 0; 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMemberInfo* info; 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMemberInfo* blankInfo; 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue value; 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue blankValue; 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkOperand values[2]; 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkOperand blankValues[2]; 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru do { 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info = this->getMember(++index); 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL == info) { 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //SkDebugf("\n"); 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkType_MemberProperty == info->fType) { 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (getProperty(propIndex, &value)) { 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru blankCopy->getProperty(propIndex, &blankValue); 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //last two are dummies 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpValues(info, value.fType, value.fOperand, blankValue.fOperand, value.fOperand, blankValue.fOperand); 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru propIndex++; 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkDisplayType::IsDisplayable(maker, info->fType)) { 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_MemberFunction) 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_Array) { 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDOperandArray* array = (SkTDOperandArray*) info->memberData(this); 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int arrayCount; 18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (array == NULL || (arrayCount = array->count()) == 0) 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayTypes elementType; 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (type == SkType_Array) { 19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayArray* dispArray = (SkDisplayArray*) this; 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru elementType = dispArray->values.getType(); 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru elementType = info->arrayType(); 19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool firstElem = true; 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"[", info->fName); 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (SkOperand* op = array->begin(); op < array->end(); op++) { 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (!firstElem) SkDebugf(","); 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (elementType) { 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Displayable: 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s", op->fDisplayable->id); 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Int: 20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%d", op->fS32); 20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Float: 20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%g", SkScalarToFloat(op->fScalar)); 20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_String: 21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_DynamicString: 21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s", op->fString->c_str()); 21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru firstElem = false; 21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("]\" "); 22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_String || info->fType == SkType_DynamicString) { 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkString* string; 22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info->getString(this, &string); 22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (string->isEmpty() == false) 22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\"\t", info->fName, string->c_str()); 22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru blankInfo = blankCopy->getMember(index); 23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int i = info->fCount; 23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info->getValue(this, values, i); 23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru blankInfo->getValue(blankCopy, blankValues, i); 23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpValues(info, info->fType, values[0], blankValues[0], values[1], blankValues[1]); 23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } while (true); 23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru delete blankCopy; 23980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dumpBase(SkAnimateMaker* maker) { 24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayTypes type = getType(); 24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* elementName = "(unknown)"; 24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (type != SkType_Unknown && type != SkType_Screenplay) 24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru elementName = SkDisplayType::GetName(maker, type); 24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%*s", SkDisplayList::fIndent, ""); 24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkDisplayList::fDumpIndex != 0 && SkDisplayList::fIndent == 0) 24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%d: ", SkDisplayList::fDumpIndex); 24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("<%s ", elementName); 25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (strcmp(id,"") != 0) 25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("id=\"%s\" ", id); 25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dumpChildren(SkAnimateMaker* maker, bool closedAngle) { 25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int index = -1; 25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMemberInfo* info; 25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru index = -1; 25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayList::fIndent += 4; 26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru do { 26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru info = this->getMember(++index); 26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (NULL == info) { 26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SkDisplayType::IsDisplayable(maker, info->fType)) { 26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayable** displayable = (SkDisplayable**) info->memberData(this); 26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (*displayable == NULL || *displayable == (SkDisplayable*) -1) 26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru continue; 26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (closedAngle == false) { 27080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf(">\n"); 27180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru closedAngle = true; 27280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 27380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru (*displayable)->dump(maker); 27480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 27580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } while (true); 27680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayList::fIndent -= 4; 27780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (closedAngle) 27880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpEnd(maker); 27980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru else 28080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("/>\n"); 28180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 28280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 28380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dumpEnd(SkAnimateMaker* maker) { 28480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayTypes type = getType(); 28580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* elementName = "(unknown)"; 28680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (type != SkType_Unknown && type != SkType_Screenplay) 28780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru elementName = SkDisplayType::GetName(maker, type); 28880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%*s", SkDisplayList::fIndent, ""); 28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("</%s>\n", elementName); 29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dumpEvents() { 29380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 29480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 29580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::dumpValues(const SkMemberInfo* info, SkDisplayTypes type, SkOperand op, SkOperand blankOp, 29680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkOperand op2, SkOperand blankOp2) { 29780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (type) { 29880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_BitmapEncoding: 29980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (op.fS32) { 30080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 0 : SkDebugf("type=\"jpeg\" "); 30180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 30280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 1 : SkDebugf("type=\"png\" "); 30380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 30480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: SkDebugf("type=\"UNDEFINED\" "); 30580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 30680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 30780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //should make this a separate case in dump attrs, rather than make dump values have a larger signature 30880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Point: 30980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fScalar != blankOp.fScalar || op2.fScalar != blankOp.fScalar) { 31080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"[%g,%g]\" ", info->fName, SkScalarToFloat(op.fScalar), SkScalarToFloat(op2.fScalar)); 31180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 31280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 31380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_FromPathMode: 31480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (op.fS32) { 31580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 0: 31680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //don't want to print anything for 0, just adding it to remove it from default: 31780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 31880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 1: 31980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, "angle"); 32080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 32180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 2: 32280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, "position"); 32380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 32480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 32580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"INVALID\" ", info->fName); 32680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 32780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 32880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_MaskFilterBlurStyle: 32980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (op.fS32) { 33080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 0: 33180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 33280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 1: 33380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, "solid"); 33480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 33580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 2: 33680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, "outer"); 33780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 33880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case 3: 33980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, "inner"); 34080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 34180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 34280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"INVALID\" ", info->fName); 34380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 34480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 34580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_FilterType: 34680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fS32 == 1) 34780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, "bilinear"); 34880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 34980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_PathDirection: 35080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, op.fS32 == 0 ? "cw" : "ccw"); 35180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 35280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_FillType: 35380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, op.fS32 == 0 ? "winding" : "evenOdd"); 35480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 35580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_TileMode: 35680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //correct to look at the S32? 35780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fS32 != blankOp.fS32) 35880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, op.fS32 == 0 ? "clamp" : op.fS32 == 1 ? "repeat" : "mirror"); 35980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 36080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Boolean: 36180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fS32 != blankOp.fS32) 36280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, op.fS32 == 0 ? "false" : "true"); 36380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 36480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Int: 36580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fS32 != blankOp.fS32) 36680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf(" %s=\"%d\" ", info->fName, op.fS32); 36780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 36880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_Float: 36980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fScalar != blankOp.fScalar) { //or /65536? 37080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%g\" ", info->fName, SkScalarToFloat(op.fScalar)); 37180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 37280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 37380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_String: 37480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_DynamicString: 37580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fString->size() > 0) 37680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("%s=\"%s\" ", info->fName, op.fString->c_str()); 37780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 37880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SkType_MSec: 37980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (op.fS32 != blankOp.fS32) { 38080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf(" %s=\"%g\" ", info->fName, SkScalarToFloat(SkScalarDiv(op.fS32, 1000))); 38180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 38280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 38380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf(""); 38480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 38580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 38680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 38780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 38880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 38980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::enable( SkAnimateMaker& ) { 39080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 39180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 39280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 39380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::enableBounder() { 39480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 39580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 39680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::executeFunction(SkDisplayable* , int index, 39780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDArray<SkScriptValue>& , SkDisplayTypes, SkScriptValue* ) { 39880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(0); 39980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 40080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 40180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::executeFunction(SkDisplayable* target, 40280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkMemberInfo* info, SkTypedArray* values, SkScriptValue* value) { 40380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDArray<SkScriptValue> typedValues; 40480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (SkOperand* op = values->begin(); op < values->end(); op++) { 40580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue temp; 40680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru temp.fType = values->getType(); 40780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru temp.fOperand = *op; 40880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *typedValues.append() = temp; 40980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 41080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru executeFunction(target, info->functionIndex(), typedValues, info->getType(), value); 41180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 41280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 41380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::executeFunction2(SkDisplayable* , int index, 41480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkOpArray* params, SkDisplayTypes, SkOperand2* ) { 41580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(0); 41680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 41780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 41880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::getBounds(SkRect* rect) { 41980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(rect); 42080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru rect->fLeft = rect->fTop = SK_ScalarMax; 42180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru rect->fRight= rect->fBottom = -SK_ScalarMax; 42280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 42380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 42480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkFunctionParamType* SkDisplayable::getFunctionsParameters() { 42580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 42680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 42780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 42880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo* SkDisplayable::getMember(int index) { 42980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 43080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 43180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 43280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo* SkDisplayable::getMember(const char name[]) { 43380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 43480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 43580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 43680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkFunctionParamType* SkDisplayable::getParameters(const SkMemberInfo* info, 43780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int* paramCount) { 43880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const SkFunctionParamType* params = getFunctionsParameters(); 43980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(params != NULL); 44080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int funcIndex = info->functionIndex(); 44180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // !!! eventually break traversing params into an external function (maybe this whole function) 44280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int index = funcIndex; 44380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int offset = 0; 44480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru while (--index >= 0) { 44580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru while (params[offset] != 0) 44680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru offset++; 44780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru offset++; 44880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 44980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int count = 0; 45080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru while (params[offset] != 0) { 45180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru count++; 45280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru offset++; 45380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 45480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *paramCount = count; 45580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return ¶ms[offset - count]; 45680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 45780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 45880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable* SkDisplayable::getParent() const { 45980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 46080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 46180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 46280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::getProperty(int index, SkScriptValue* ) const { 46380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// SkASSERT(0); 46480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 46580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 46680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 46780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::getProperty2(int index, SkOperand2* value) const { 46880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(0); 46980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 47080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 47180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 47280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayTypes SkDisplayable::getType() const { 47380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return SkType_Unknown; 47480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 47580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 47680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::hasEnable() const { 47780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 47880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 47980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 48080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::isDrawable() const { 48180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 48280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 48380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 48480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::onEndElement(SkAnimateMaker& ) {} 48580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 48680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo* SkDisplayable::preferredChild(SkDisplayTypes type) { 48780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 48880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 48980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 49080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::resolveIDs(SkAnimateMaker& maker, SkDisplayable* original, SkApply* apply) { 49180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 49280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 49380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 49480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//SkDisplayable* SkDisplayable::resolveTarget(SkAnimateMaker& ) { 49580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// return this; 49680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//} 49780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 49880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::setChildHasID() { 49980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 50080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 50180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::setParent(SkDisplayable* ) { 50280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 50380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 50480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 50580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDisplayable::setProperty(int index, SkScriptValue& ) { 50680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //SkASSERT(0); 50780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 50880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 50980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 51080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::setReference(const SkMemberInfo* info, SkDisplayable* displayable) { 51180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (info->fType == SkType_MemberProperty) { 51280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue scriptValue; 51380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scriptValue.fOperand.fDisplayable = displayable; 51480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru scriptValue.fType = displayable->getType(); 51580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru setProperty(info->propertyIndex(), scriptValue); 51680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else if (info->fType == SkType_Array) { 51780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(displayable->getType() == SkType_Array); 51880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayArray* dispArray = (SkDisplayArray*) displayable; 51980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkTDScalarArray* array = (SkTDScalarArray* ) info->memberData(this); 52080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru array->setCount(dispArray->values.count()); 52180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru memcpy(array->begin(), dispArray->values.begin(), dispArray->values.count() * sizeof(int)); 52280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // 52380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 52480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // !!! need a way for interpreter engine to own array 52580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // !!! probably need to replace all scriptable arrays with single bigger array 52680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // that has operand and type on every element -- or 52780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // when array is dirtied, need to get parent to reparse to local array 52880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } else { 52980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru void* storage = info->memberData(this); 53080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru memcpy(storage, &displayable, sizeof(SkDisplayable*)); 53180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 53280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// !!! unclear why displayable is dirtied here 53380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// if this is called, this breaks fromPath.xml 53480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// displayable->dirty(); 53580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 53680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 53780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DEBUG 53880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDisplayable::validate() { 53980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 54080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 541