SkDisplayEvent.cpp revision 4f1dae40e24d57d647db01443b8bf2410514b8b5
11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayEvent.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h" 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayApply.h" 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayInput.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayList.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDump.h" 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkEvent.h" 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayInput.h" 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkKey.h" 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMetaData.h" 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkScript.h" 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkUtils.h" 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum SkDisplayEvent_Properties { 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(key), 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(keys) 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDisplayEvent::fInfo[] = { 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(code, EventCode), 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(disable, Boolean), 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(key, String), // a single key (also last key pressed) 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(keys, String), // a single key or dash-delimited range of keys 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(kind, EventKind), 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(target, String), 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(x, Float), 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(y, Float) 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDisplayEvent); 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayEvent::SkDisplayEvent() : code((SkKey) -1), disable(false), 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kind(kUser), x(0), y(0), fLastCode((SkKey) -1), fMax((SkKey) -1), fTarget(NULL) { 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayEvent::~SkDisplayEvent() { 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project deleteMembers(); 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayEvent::add(SkAnimateMaker& , SkDisplayable* child) { 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *fChildren.append() = child; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayEvent::contains(SkDisplayable* match) { 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int index = 0; index < fChildren.count(); index++) { 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fChildren[index] == match || fChildren[index]->contains(match)) 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkDisplayEvent::contains(const SkString& match) { 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int index = 0; index < fChildren.count(); index++) { 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayable* child = fChildren[index]; 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (child->contains(match)) 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return child; 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return NULL; 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDisplayEvent::deleteMembers() { 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int index = 0; index < fChildren.count(); index++) { 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayable* evt = fChildren[index]; 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete evt; 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDisplayEvent::dumpEvent(SkAnimateMaker* maker) { 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkString str; 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDump::GetEnumString(SkType_EventKind, kind, &str); 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("kind=\"%s\" ", str.c_str()); 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (kind == SkDisplayEvent::kKeyPress || kind == SkDisplayEvent::kKeyPressUp) { 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (code >= 0) 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDump::GetEnumString(SkType_EventCode, code, &str); 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project str.set("none"); 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("code=\"%s\" ", str.c_str()); 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (kind == SkDisplayEvent::kKeyChar) { 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fMax != (SkKey) -1 && fMax != code) 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("keys=\"%c - %c\" ", code, fMax); 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("key=\"%c\" ", code); 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fTarget != NULL) { 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("target=\"%s\" ", fTarget->id); 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (kind >= SkDisplayEvent::kMouseDown && kind <= SkDisplayEvent::kMouseUp) { 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_CAN_USE_FLOAT 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("x=\"%g\" y=\"%g\" ", SkScalarToFloat(x), SkScalarToFloat(y)); 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("x=\"%x\" y=\"%x\" ", x, y); 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (disable) 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("disable=\"true\" "); 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("/>\n"); 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayEvent::enableEvent(SkAnimateMaker& maker) 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{ 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maker.fActiveEvent = this; 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fChildren.count() == 0) 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (disable) 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (maker.fDumpEvents) { 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("enable: "); 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpEvent(&maker); 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList& displayList = maker.fDisplayList; 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int index = 0; index < fChildren.count(); index++) { 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayable* displayable = fChildren[index]; 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (displayable->isGroup()) { 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTDDrawableArray* parentList = displayList.getDrawList(); 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *parentList->append() = (SkDrawable*) displayable; // make it findable before children are enabled 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (displayable->enable(maker)) 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project continue; 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (maker.hasError()) 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (displayable->isDrawable() == false) 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; // error 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawable* drawable = (SkDrawable*) displayable; 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTDDrawableArray* parentList = displayList.getDrawList(); 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *parentList->append() = drawable; 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayEvent::getProperty(int index, SkScriptValue* value) const { 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (index) { 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(key): 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(keys): { 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_String; 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project char scratch[8]; 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkKey convert = index == SK_PROPERTY(keys) ? code : fLastCode; 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size_t size = convert > 0 ? SkUTF8_FromUnichar(convert, scratch) : 0; 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fKeyString.set(scratch, size); 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fString = &fKeyString; 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (index != SK_PROPERTY(keys) || fMax == (SkKey) -1 || fMax == code) 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fString->append("-"); 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project size = SkUTF8_FromUnichar(fMax, scratch); 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fString->append(scratch, size); 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } break; 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDisplayEvent::onEndElement(SkAnimateMaker& maker) 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{ 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (kind == kUser) 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return; 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maker.fEvents.addEvent(this); 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (kind == kOnEnd) { 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool found = maker.find(target.c_str(), &fTarget); 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(found); 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fTarget && fTarget->isAnimate()); 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkAnimateBase* animate = (SkAnimateBase*) fTarget; 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project animate->setHasEndEvent(); 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDisplayEvent::populateInput(SkAnimateMaker& maker, const SkEvent& fEvent) { 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkMetaData& meta = fEvent.getMetaData(); 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMetaData::Iter iter(meta); 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMetaData::Type type; 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int number; 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const char* name; 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project while ((name = iter.next(&type, &number)) != NULL) { 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (name[0] == '\0') 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project continue; 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayable* displayable; 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkInput* input; 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (int index = 0; index < fChildren.count(); index++) { 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project displayable = fChildren[index]; 2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (displayable->getType() != SkType_Input) 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project continue; 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project input = (SkInput*) displayable; 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (input->name.equals(name)) 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project goto found; 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (!maker.find(name, &displayable) || displayable->getType() != SkType_Input) 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project continue; 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project input = (SkInput*) displayable; 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project found: 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (type) { 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkMetaData::kS32_Type: 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project meta.findS32(name, &input->fInt); 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkMetaData::kScalar_Type: 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project meta.findScalar(name, &input->fFloat); 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkMetaData::kPtr_Type: 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; // !!! not handled for now 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SkMetaData::kString_Type: 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project input->string.set(meta.findString(name)); 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // re-evaluate all animators that may have built their values from input strings 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project for (SkDisplayable** childPtr = fChildren.begin(); childPtr < fChildren.end(); childPtr++) { 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayable* displayable = *childPtr; 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (displayable->isApply() == false) 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project continue; 2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkApply* apply = (SkApply*) displayable; 2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->refresh(maker); 2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDisplayEvent::setProperty(int index, SkScriptValue& value) { 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(index == SK_PROPERTY(key) || index == SK_PROPERTY(keys)); 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(value.fType == SkType_String); 2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkString* string = value.fOperand.fString; 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const char* chars = string->c_str(); 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int count = SkUTF8_CountUnichars(chars); 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(count >= 1); 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project code = (SkKey) SkUTF8_NextUnichar(&chars); 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMax = code; 2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(count == 1 || index == SK_PROPERTY(keys)); 2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (--count > 0) { 2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(*chars == '-'); 2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project chars++; 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMax = (SkKey) SkUTF8_NextUnichar(&chars); 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(fMax >= code); 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifdef SK_BUILD_FOR_ANDROID 2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMetaData.h" 2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkParse.h" 2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkTextBox.h" 2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkXMLWriter.h" 2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2654f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergervoid SkMetaData::setPtr(char const*, void*, PtrProc ) {} 2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkMetaData::setS32(char const*, int ) {} 2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkEventSink::doEvent(SkEvent const& ) { return false; } 2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::parse(SkStream& ) { return false; } 2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLParserError::SkXMLParserError( ) {} 2704f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergervoid SkEvent::setType(char const*, size_t ) {} 2714f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergervoid SkEvent::postTime(SkMSec) {} 2724f1dae40e24d57d647db01443b8bf2410514b8b5Derek SollenbergerSkEvent::SkEvent(char const*, SkEventSinkID) {} 2734f1dae40e24d57d647db01443b8bf2410514b8b5Derek SollenbergerSkEvent::SkEvent(SkEvent const&) {} 2740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkEvent::SkEvent( ) {} 2750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkEvent::~SkEvent( ) {} 2760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkEventSink::onQuery(SkEvent* ) { return false; } 2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkEventSink::SkEventSink( ) {} 2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkEventSink::~SkEventSink( ) {} 2794f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkXMLParser::parse(char const*, size_t ) { return false; } 2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::parse(SkDOM const&, SkDOMNode const* ) { return false; } 2814f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger//void SkParse::UnitTest( ) {} 2824f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerconst char* SkMetaData::findString(char const* ) const {return 0;} 2834f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkMetaData::findPtr(char const*, void**, PtrProc* ) const {return false;} 2844f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkMetaData::findS32(char const*, int* ) const {return false;} 2854f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkEvent::isType(char const*, size_t ) const { return false; } 2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkMetaData::setString(char const*, char const* ) {} 2874f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerconst char* SkParse::FindNamedColor(char const*, size_t, SkColor* ) {return false; } 2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char* SkMetaData::Iter::next(SkMetaData::Type*, int* ) { return false; } 2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkMetaData::Iter::Iter(SkMetaData const& ) {} 2904f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkMetaData::findScalar(char const*, SkScalar* ) const {return false;} 2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkMetaData::reset( ) {} 2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkEvent::setType(SkString const& ) {} 2934f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkMetaData::findBool(char const*, bool* ) const {return false;} 2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkEvent::getType(SkString*) const {} 2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::endElement(char const* ) { return false; } 2960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::addAttribute(char const*, char const* ) { return false;} 2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::startElement(char const* ) { return false;} 2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::text(char const*, int ) { return false;} 2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::onText(char const*, int ) { return false;} 3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLParser::SkXMLParser(SkXMLParserError* ) {} 3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLParser::~SkXMLParser( ) {} 3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLParserError::~SkXMLParserError( ) {} 3030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkXMLParserError::getErrorString(SkString*) const {} 3044f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergervoid SkTextBox::setSpacing(SkScalar, SkScalar ) {} 3050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkTextBox::setSpacingAlign(SkTextBox::SpacingAlign ) {} 3064f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergervoid SkTextBox::draw(SkCanvas*, char const*, size_t, SkPaint const& ) {} 3070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkTextBox::setBox(SkRect const& ) {} 3080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkTextBox::setMode(SkTextBox::Mode ) {} 3090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkTextBox::SkTextBox( ) {} 3104f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergervoid SkMetaData::setScalar(char const*, SkScalar ) {} 3114f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerconst char* SkParse::FindScalar(char const*, SkScalar* ) {return 0; } 3124f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerconst char* SkParse::FindScalars(char const*, SkScalar*, int ) {return 0; } 3130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char* SkParse::FindHex(char const*, unsigned int* ) {return 0; } 3140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char* SkParse::FindS32(char const*, int* ) {return 0; } 3150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkXMLWriter::addAttribute(char const*, char const* ) {} 3160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkXMLWriter::startElement(char const* ) {} 3170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkXMLWriter::doEnd(SkXMLWriter::Elem* ) {} 3180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLWriter::Elem* SkXMLWriter::getEnd( ) { return 0; } 3194f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerbool SkXMLWriter::doStart(char const*, size_t ) { return false; } 3200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLWriter::SkXMLWriter(bool ) {} 3210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkXMLWriter::~SkXMLWriter( ) {} 3220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkMetaData::SkMetaData() {} 3230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkMetaData::~SkMetaData() {} 3240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkEventSink::onEvent(SkEvent const&) {return false;} 3250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::onEndElement(char const*) {return false;} 3260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::onAddAttribute(char const*, char const*) {return false;} 3270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkXMLParser::onStartElement(char const*) {return false;} 3280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkXMLWriter::writeHeader() {} 3290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 331