| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SkAnimatorScript2.h" | 8 #include "SkAnimatorScript2.h" |
| 9 #include "SkAnimateBase.h" | 9 #include "SkAnimateBase.h" |
| 10 #include "SkAnimateMaker.h" | 10 #include "SkAnimateMaker.h" |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 bool getMemberReference(const char* member, size_t len, void* object, SkScri
ptValue2* ref) { | 198 bool getMemberReference(const char* member, size_t len, void* object, SkScri
ptValue2* ref) { |
| 199 SkDisplayable* displayable = (SkDisplayable*) object; | 199 SkDisplayable* displayable = (SkDisplayable*) object; |
| 200 SkString name(member, len); | 200 SkString name(member, len); |
| 201 SkDisplayable* named = displayable->contains(name); | 201 SkDisplayable* named = displayable->contains(name); |
| 202 if (named) { | 202 if (named) { |
| 203 ref->fType = SkOperand2::kObject; | 203 ref->fType = SkOperand2::kObject; |
| 204 ref->fOperand.fObject = named; | 204 ref->fOperand.fObject = named; |
| 205 return true; | 205 return true; |
| 206 } | 206 } |
| 207 const SkMemberInfo* info = displayable->getMember(name.c_str()); | 207 const SkMemberInfo* info = displayable->getMember(name.c_str()); |
| 208 if (info == NULL) | 208 if (info == nullptr) |
| 209 return false; // !!! add additional error info? | 209 return false; // !!! add additional error info? |
| 210 ref->fType = SkAnimatorScript2::ToOpType(info->getType()); | 210 ref->fType = SkAnimatorScript2::ToOpType(info->getType()); |
| 211 ref->fOperand.fObject = (void*) info; | 211 ref->fOperand.fObject = (void*) info; |
| 212 return true; | 212 return true; |
| 213 } | 213 } |
| 214 | 214 |
| 215 bool invoke(size_t ref, void* object, SkOperand2* value) { | 215 bool invoke(size_t ref, void* object, SkOperand2* value) { |
| 216 const SkMemberInfo* info = (const SkMemberInfo* ) ref; | 216 const SkMemberInfo* info = (const SkMemberInfo* ) ref; |
| 217 SkDisplayable* displayable = (SkDisplayable*) object; | 217 SkDisplayable* displayable = (SkDisplayable*) object; |
| 218 if (info->fType == SkType_MemberProperty) { | 218 if (info->fType == SkType_MemberProperty) { |
| 219 if (displayable->getProperty2(info->propertyIndex(), value) == false
) { | 219 if (displayable->getProperty2(info->propertyIndex(), value) == false
) { |
| 220 return false; | 220 return false; |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 return fEngine->evalMemberCommon(info, displayable, value); | 223 return fEngine->evalMemberCommon(info, displayable, value); |
| 224 } | 224 } |
| 225 | 225 |
| 226 SkAnimatorScript2* fEngine; | 226 SkAnimatorScript2* fEngine; |
| 227 }; | 227 }; |
| 228 | 228 |
| 229 | 229 |
| 230 class SkAnimatorScript_MemberFunction : public SkScriptCallBackMemberFunction { | 230 class SkAnimatorScript_MemberFunction : public SkScriptCallBackMemberFunction { |
| 231 public: | 231 public: |
| 232 SkAnimatorScript_MemberFunction(SkAnimatorScript2* engine) : fEngine(engine)
{} | 232 SkAnimatorScript_MemberFunction(SkAnimatorScript2* engine) : fEngine(engine)
{} |
| 233 | 233 |
| 234 bool getMemberReference(const char* member, size_t len, void* object, SkScri
ptValue2* ref) { | 234 bool getMemberReference(const char* member, size_t len, void* object, SkScri
ptValue2* ref) { |
| 235 SkDisplayable* displayable = (SkDisplayable*) object; | 235 SkDisplayable* displayable = (SkDisplayable*) object; |
| 236 SkString name(member, len); | 236 SkString name(member, len); |
| 237 const SkMemberInfo* info = displayable->getMember(name.c_str()); | 237 const SkMemberInfo* info = displayable->getMember(name.c_str()); |
| 238 if (info == NULL || info->fType != SkType_MemberFunction) | 238 if (info == nullptr || info->fType != SkType_MemberFunction) |
| 239 return false; // !!! add additional error info? | 239 return false; // !!! add additional error info? |
| 240 ref->fType = SkAnimatorScript2::ToOpType(info->getType()); | 240 ref->fType = SkAnimatorScript2::ToOpType(info->getType()); |
| 241 ref->fOperand.fObject = (void*) info; | 241 ref->fOperand.fObject = (void*) info; |
| 242 return true; | 242 return true; |
| 243 } | 243 } |
| 244 | 244 |
| 245 virtual void getParamTypes(SkIntArray(SkOperand2::OpType)* types) { | 245 virtual void getParamTypes(SkIntArray(SkOperand2::OpType)* types) { |
| 246 types->setCount(3); | 246 types->setCount(3); |
| 247 SkOperand2::OpType* type = types->begin(); | 247 SkOperand2::OpType* type = types->begin(); |
| 248 type[0] = type[1] = type[2] = SkOperand2::kS32; | 248 type[0] = type[1] = type[2] = SkOperand2::kS32; |
| 249 } | 249 } |
| 250 | 250 |
| 251 bool invoke(size_t ref, void* object, SkOpArray* params, SkOperand2* value) | 251 bool invoke(size_t ref, void* object, SkOpArray* params, SkOperand2* value) |
| 252 { | 252 { |
| 253 const SkMemberInfo* info = (const SkMemberInfo* ) ref; | 253 const SkMemberInfo* info = (const SkMemberInfo* ) ref; |
| 254 SkDisplayable* displayable = (SkDisplayable*) object; | 254 SkDisplayable* displayable = (SkDisplayable*) object; |
| 255 displayable->executeFunction2(displayable, info->functionIndex(), params
, info->getType(), | 255 displayable->executeFunction2(displayable, info->functionIndex(), params
, info->getType(), |
| 256 value); | 256 value); |
| 257 return fEngine->evalMemberCommon(info, displayable, value); | 257 return fEngine->evalMemberCommon(info, displayable, value); |
| 258 } | 258 } |
| 259 | 259 |
| 260 SkAnimatorScript2* fEngine; | 260 SkAnimatorScript2* fEngine; |
| 261 }; | 261 }; |
| 262 | 262 |
| 263 | 263 |
| 264 class SkAnimatorScript_NamedColor : public SkScriptCallBackProperty { | 264 class SkAnimatorScript_NamedColor : public SkScriptCallBackProperty { |
| 265 public: | 265 public: |
| 266 virtual bool getConstValue(const char* name, int len, SkOperand2* value) { | 266 virtual bool getConstValue(const char* name, int len, SkOperand2* value) { |
| 267 return SkParse::FindNamedColor(name, len, (SkColor*) &value->fS32) != NU
LL; | 267 return SkParse::FindNamedColor(name, len, (SkColor*) &value->fS32) != nu
llptr; |
| 268 } | 268 } |
| 269 }; | 269 }; |
| 270 | 270 |
| 271 | 271 |
| 272 class SkAnimatorScript_RGB : public SkScriptCallBackFunction { | 272 class SkAnimatorScript_RGB : public SkScriptCallBackFunction { |
| 273 public: | 273 public: |
| 274 virtual bool getIndex(const char* name, int len, size_t* result) { | 274 virtual bool getIndex(const char* name, int len, size_t* result) { |
| 275 if (SK_LITERAL_STR_EQUAL("rgb", name, len) != 0) | 275 if (SK_LITERAL_STR_EQUAL("rgb", name, len) != 0) |
| 276 return false; | 276 return false; |
| 277 *result = 0; | 277 *result = 0; |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 return SkType_Array; | 467 return SkType_Array; |
| 468 case SkOperand2::kObject: | 468 case SkOperand2::kObject: |
| 469 return SkType_Displayable; | 469 return SkType_Displayable; |
| 470 default: | 470 default: |
| 471 SkASSERT(0); | 471 SkASSERT(0); |
| 472 return SkType_Unknown; | 472 return SkType_Unknown; |
| 473 } | 473 } |
| 474 } | 474 } |
| 475 | 475 |
| 476 SkOperand2::OpType SkAnimatorScript2::ToOpType(SkDisplayTypes type) { | 476 SkOperand2::OpType SkAnimatorScript2::ToOpType(SkDisplayTypes type) { |
| 477 if (SkDisplayType::IsDisplayable(NULL /* fMaker */, type)) | 477 if (SkDisplayType::IsDisplayable(nullptr /* fMaker */, type)) |
| 478 return SkOperand2::kObject; | 478 return SkOperand2::kObject; |
| 479 if (SkDisplayType::IsEnum(NULL /* fMaker */, type)) | 479 if (SkDisplayType::IsEnum(nullptr /* fMaker */, type)) |
| 480 return SkOperand2::kS32; | 480 return SkOperand2::kS32; |
| 481 switch (type) { | 481 switch (type) { |
| 482 case SkType_ARGB: | 482 case SkType_ARGB: |
| 483 case SkType_MSec: | 483 case SkType_MSec: |
| 484 case SkType_Int: | 484 case SkType_Int: |
| 485 return SkOperand2::kS32; | 485 return SkOperand2::kS32; |
| 486 case SkType_Float: | 486 case SkType_Float: |
| 487 case SkType_Point: | 487 case SkType_Point: |
| 488 case SkType_3D_Point: | 488 case SkType_3D_Point: |
| 489 return SkOperand2::kScalar; | 489 return SkOperand2::kScalar; |
| 490 case SkType_Base64: | 490 case SkType_Base64: |
| 491 case SkType_DynamicString: | 491 case SkType_DynamicString: |
| 492 case SkType_String: | 492 case SkType_String: |
| 493 return SkOperand2::kString; | 493 return SkOperand2::kString; |
| 494 case SkType_Array: | 494 case SkType_Array: |
| 495 return SkOperand2::kArray; | 495 return SkOperand2::kArray; |
| 496 case SkType_Unknown: | 496 case SkType_Unknown: |
| 497 return SkOperand2::kNoType; | 497 return SkOperand2::kNoType; |
| 498 default: | 498 default: |
| 499 SkASSERT(0); | 499 SkASSERT(0); |
| 500 return SkOperand2::kNoType; | 500 return SkOperand2::kNoType; |
| 501 } | 501 } |
| 502 } | 502 } |
| 503 | 503 |
| 504 bool SkAnimatorScript2::MapEnums(const char* ptr, const char* match, size_t len,
int* value) { | 504 bool SkAnimatorScript2::MapEnums(const char* ptr, const char* match, size_t len,
int* value) { |
| 505 int index = 0; | 505 int index = 0; |
| 506 bool more = true; | 506 bool more = true; |
| 507 do { | 507 do { |
| 508 const char* last = strchr(ptr, '|'); | 508 const char* last = strchr(ptr, '|'); |
| 509 if (last == NULL) { | 509 if (last == nullptr) { |
| 510 last = &ptr[strlen(ptr)]; | 510 last = &ptr[strlen(ptr)]; |
| 511 more = false; | 511 more = false; |
| 512 } | 512 } |
| 513 size_t length = last - ptr; | 513 size_t length = last - ptr; |
| 514 if (len == length && strncmp(ptr, match, length) == 0) { | 514 if (len == length && strncmp(ptr, match, length) == 0) { |
| 515 *value = index; | 515 *value = index; |
| 516 return true; | 516 return true; |
| 517 } | 517 } |
| 518 index++; | 518 index++; |
| 519 ptr = last + 1; | 519 ptr = last + 1; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 void SkAnimatorScript2::UnitTest() { | 584 void SkAnimatorScript2::UnitTest() { |
| 585 #if defined(SK_SUPPORT_UNITTEST) | 585 #if defined(SK_SUPPORT_UNITTEST) |
| 586 SkAnimator animator; | 586 SkAnimator animator; |
| 587 SkASSERT(animator.decodeMemory(scriptTestSetup, sizeof(scriptTestSetup)-1)); | 587 SkASSERT(animator.decodeMemory(scriptTestSetup, sizeof(scriptTestSetup)-1)); |
| 588 SkEvent evt; | 588 SkEvent evt; |
| 589 evt.setString("id", "evt"); | 589 evt.setString("id", "evt"); |
| 590 evt.setS32("x", 3); | 590 evt.setS32("x", 3); |
| 591 animator.doUserEvent(evt); | 591 animator.doUserEvent(evt); |
| 592 // set up animator with memory script above, then run value tests | 592 // set up animator with memory script above, then run value tests |
| 593 for (int index = 0; index < SkScriptNAnswer_testCount; index++) { | 593 for (int index = 0; index < SkScriptNAnswer_testCount; index++) { |
| 594 SkAnimatorScript2 engine(*animator.fMaker, NULL, scriptTests[index].fTyp
e); | 594 SkAnimatorScript2 engine(*animator.fMaker, nullptr, scriptTests[index].f
Type); |
| 595 SkScriptValue2 value; | 595 SkScriptValue2 value; |
| 596 const char* script = scriptTests[index].fScript; | 596 const char* script = scriptTests[index].fScript; |
| 597 bool success = engine.evaluateScript(&script, &value); | 597 bool success = engine.evaluateScript(&script, &value); |
| 598 if (success == false) { | 598 if (success == false) { |
| 599 SkASSERT(scriptTests[index].fType == SkType_Unknown); | 599 SkASSERT(scriptTests[index].fType == SkType_Unknown); |
| 600 continue; | 600 continue; |
| 601 } | 601 } |
| 602 SkASSERT(value.fType == ToOpType(scriptTests[index].fType)); | 602 SkASSERT(value.fType == ToOpType(scriptTests[index].fType)); |
| 603 SkScalar error; | 603 SkScalar error; |
| 604 switch (value.fType) { | 604 switch (value.fType) { |
| 605 case SkOperand2::kS32: | 605 case SkOperand2::kS32: |
| 606 SkASSERT(value.fOperand.fS32 == scriptTests[index].fIntAnswer); | 606 SkASSERT(value.fOperand.fS32 == scriptTests[index].fIntAnswer); |
| 607 break; | 607 break; |
| 608 case SkOperand2::kScalar: | 608 case SkOperand2::kScalar: |
| 609 error = SkScalarAbs(value.fOperand.fScalar - scriptTests[index].
fScalarAnswer); | 609 error = SkScalarAbs(value.fOperand.fScalar - scriptTests[index].
fScalarAnswer); |
| 610 SkASSERT(error < SK_Scalar1 / 10000); | 610 SkASSERT(error < SK_Scalar1 / 10000); |
| 611 break; | 611 break; |
| 612 case SkOperand2::kString: | 612 case SkOperand2::kString: |
| 613 SkASSERT(value.fOperand.fString->equals(scriptTests[index].fStri
ngAnswer)); | 613 SkASSERT(value.fOperand.fString->equals(scriptTests[index].fStri
ngAnswer)); |
| 614 break; | 614 break; |
| 615 default: | 615 default: |
| 616 SkASSERT(0); | 616 SkASSERT(0); |
| 617 } | 617 } |
| 618 } | 618 } |
| 619 #endif | 619 #endif |
| 620 } | 620 } |
| 621 | 621 |
| 622 #endif | 622 #endif |
| OLD | NEW |