10910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* libs/graphics/animator/SkMatrixParts.cpp 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 30910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Copyright 2006, The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 50910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 60910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** you may not use this file except in compliance with the License. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** You may obtain a copy of the License at 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** See the License for the specific language governing permissions and 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project** limitations under the License. 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/ 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMatrixParts.h" 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h" 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawMatrix.h" 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawRectangle.h" 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPath.h" 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkMatrixPart::SkMatrixPart() : fMatrix(NULL) { 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkMatrixPart::dirty() { 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->dirty(); 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkMatrixPart::getParent() const { 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return fMatrix; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkMatrixPart::setParent(SkDisplayable* parent) { 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(parent != NULL); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (parent->isMatrix() == false) 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix = (SkDrawMatrix*) parent; 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkRotate::fInfo[] = { 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(center, Point), 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(degrees, Float) 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkRotate); 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkRotate::SkRotate() : degrees(0) { 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project center.fX = center.fY = 0; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkRotate::add() { 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->rotate(degrees, center); 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkScale::fInfo[] = { 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(center, Point), 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(x, Float), 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(y, Float) 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkScale); 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkScale::SkScale() : x(SK_Scalar1), y(SK_Scalar1) { 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project center.fX = center.fY = 0; 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkScale::add() { 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->scale(x, y, center); 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkSkew::fInfo[] = { 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(center, Point), 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(x, Float), 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(y, Float) 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkSkew); 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkSkew::SkSkew() : x(0), y(0) { 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project center.fX = center.fY = 0; 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkSkew::add() { 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->skew(x, y, center); 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkTranslate::fInfo[] = { 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(x, Float), 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(y, Float) 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkTranslate); 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkTranslate::SkTranslate() : x(0), y(0) { 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkTranslate::add() { 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->translate(x, y); 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkFromPath::fInfo[] = { 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(mode, FromPathMode), 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(offset, Float), 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(path, Path) 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkFromPath); 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkFromPath::SkFromPath() : 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project mode(0), offset(0), path(NULL) { 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkFromPath::~SkFromPath() { 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkFromPath::add() { 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (path == NULL) 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static const uint8_t gFlags[] = { 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathMeasure::kGetPosAndTan_MatrixFlag, // normal 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathMeasure::kGetTangent_MatrixFlag, // angle 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathMeasure::kGetPosition_MatrixFlag // position 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project }; 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if ((unsigned)mode >= SK_ARRAY_COUNT(gFlags)) 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMatrix result; 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPathMeasure.setPath(&path->getPath(), false); 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fPathMeasure.getMatrix(offset, &result, (SkPathMeasure::MatrixFlags)gFlags[mode])) 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->set(result); 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkRectToRect::fInfo[] = { 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(destination, Rect), 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(source, Rect) 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkRectToRect); 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkRectToRect::SkRectToRect() : 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project source(NULL), destination(NULL) { 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkRectToRect::~SkRectToRect() { 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkRectToRect::add() { 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (source == NULL || destination == NULL) 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMatrix temp; 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project temp.setRectToRect(source->fRect, destination->fRect, 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMatrix::kFill_ScaleToFit); 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->set(temp); 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkRectToRect::dump(SkAnimateMaker* maker) { 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("/>\n"); 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent += 4; 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (source) { 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s<source>\n", SkDisplayList::fIndent, ""); 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent += 4; 2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project source->dump(maker); 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s</source>\n", SkDisplayList::fIndent, ""); 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (destination) { 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s<destination>\n", SkDisplayList::fIndent, ""); 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent += 4; 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project destination->dump(maker); 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s</destination>\n", SkDisplayList::fIndent, ""); 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpEnd(maker); 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo* SkRectToRect::preferredChild(SkDisplayTypes ) { 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (source == NULL) 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return getMember("source"); // !!! cwap! need to refer to member through enum like kScope instead 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(destination == NULL); 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return getMember("destination"); 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkPolyToPoly::fInfo[] = { 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(destination, Polygon), 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(source, Polygon) 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkPolyToPoly); 2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPolyToPoly::SkPolyToPoly() : source(NULL), destination(NULL) { 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPolyToPoly::~SkPolyToPoly() { 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkPolyToPoly::add() { 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(source); 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(destination); 2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPoint src[4]; 2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPoint dst[4]; 2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPath& sourcePath = source->getPath(); 2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int srcPts = sourcePath.getPoints(src, 4); 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPath& destPath = destination->getPath(); 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int dstPts = destPath.getPoints(dst, 4); 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (srcPts != dstPts) 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMatrix temp; 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project temp.setPolyToPoly(src, dst, srcPts); 2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->set(temp); 2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPolyToPoly::dump(SkAnimateMaker* maker) { 2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("/>\n"); 2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent += 4; 2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (source) { 2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s<source>\n", SkDisplayList::fIndent, ""); 2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent += 4; 2700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project source->dump(maker); 2710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 2720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s</source>\n", SkDisplayList::fIndent, ""); 2730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (destination) { 2750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s<destination>\n", SkDisplayList::fIndent, ""); 2760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent += 4; 2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project destination->dump(maker); 2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 2790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("%*s</destination>\n", SkDisplayList::fIndent, ""); 2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 2820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpEnd(maker); 2830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkPolyToPoly::onEndElement(SkAnimateMaker& ) { 2870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(source); 2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(destination); 2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (source->childHasID() || destination->childHasID()) 2900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMatrix->setChildHasID(); 2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo* SkPolyToPoly::preferredChild(SkDisplayTypes ) { 2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (source == NULL) 2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return getMember("source"); // !!! cwap! need to refer to member through enum like kScope instead 2960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { 2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(destination == NULL); 2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return getMember("destination"); 2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 303