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