180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkMatrixParts.h"
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimateMaker.h"
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDrawMatrix.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDrawRectangle.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDrawPath.h"
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkMatrixPart::SkMatrixPart() : fMatrix(NULL) {
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkMatrixPart::dirty() {
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->dirty();
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable* SkMatrixPart::getParent() const {
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return fMatrix;
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkMatrixPart::setParent(SkDisplayable* parent) {
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkASSERT(parent != NULL);
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (parent->isMatrix() == false)
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return true;
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix = (SkDrawMatrix*) parent;
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkRotate::fInfo[] = {
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(center, Point),
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(degrees, Float)
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkRotate);
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkRotate::SkRotate() : degrees(0) {
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    center.fX = center.fY = 0;
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkRotate::add() {
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->rotate(degrees, center);
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkScale::fInfo[] = {
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(center, Point),
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(x, Float),
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(y, Float)
6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkScale);
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkScale::SkScale() : x(SK_Scalar1), y(SK_Scalar1) {
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    center.fX = center.fY = 0;
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkScale::add() {
7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->scale(x, y, center);
7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkSkew::fInfo[] = {
8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(center, Point),
8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(x, Float),
8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(y, Float)
8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkSkew);
9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkSkew::SkSkew() : x(0), y(0) {
9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    center.fX = center.fY = 0;
9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkSkew::add() {
9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->skew(x, y, center);
9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkTranslate::fInfo[] = {
10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(x, Float),
10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(y, Float)
10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkTranslate);
11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkTranslate::SkTranslate() : x(0), y(0) {
11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkTranslate::add() {
11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->translate(x, y);
11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkFromPath::fInfo[] = {
12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(mode, FromPathMode),
12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(offset, Float),
12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(path, Path)
12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkFromPath);
13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkFromPath::SkFromPath() :
13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    mode(0), offset(0), path(NULL) {
13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkFromPath::~SkFromPath() {
13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkFromPath::add() {
14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (path == NULL)
14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return true;
14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    static const uint8_t gFlags[] = {
14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkPathMeasure::kGetPosAndTan_MatrixFlag,    // normal
14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkPathMeasure::kGetTangent_MatrixFlag,      // angle
14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkPathMeasure::kGetPosition_MatrixFlag      // position
14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    };
14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if ((unsigned)mode >= SK_ARRAY_COUNT(gFlags))
14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return true;
15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkMatrix result;
15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fPathMeasure.setPath(&path->getPath(), false);
15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (fPathMeasure.getMatrix(offset, &result, (SkPathMeasure::MatrixFlags)gFlags[mode]))
15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fMatrix->set(result);
15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkRectToRect::fInfo[] = {
16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(destination, Rect),
16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(source, Rect)
16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkRectToRect);
16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkRectToRect::SkRectToRect() :
17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    source(NULL), destination(NULL) {
17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkRectToRect::~SkRectToRect() {
17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkRectToRect::add() {
17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (source == NULL || destination == NULL)
17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return true;
17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkMatrix temp;
18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    temp.setRectToRect(source->fRect, destination->fRect,
18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                       SkMatrix::kFill_ScaleToFit);
18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->set(temp);
18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED
18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkRectToRect::dump(SkAnimateMaker* maker) {
18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    dumpBase(maker);
18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDebugf("/>\n");
19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDisplayList::fIndent += 4;
19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (source) {
19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s<source>\n", SkDisplayList::fIndent, "");
19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent += 4;
19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        source->dump(maker);
19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent -= 4;
19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s</source>\n", SkDisplayList::fIndent, "");
19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (destination) {
19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s<destination>\n", SkDisplayList::fIndent, "");
20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent += 4;
20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        destination->dump(maker);
20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent -= 4;
20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s</destination>\n", SkDisplayList::fIndent, "");
20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDisplayList::fIndent -= 4;
20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    dumpEnd(maker);
20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo* SkRectToRect::preferredChild(SkDisplayTypes ) {
21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (source == NULL)
21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return getMember("source"); // !!! cwap! need to refer to member through enum like kScope instead
21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    else {
21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkASSERT(destination == NULL);
21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return getMember("destination");
21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0
22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkPolyToPoly::fInfo[] = {
22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(destination, Polygon),
22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_MEMBER(source, Polygon)
22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkPolyToPoly);
23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkPolyToPoly::SkPolyToPoly() : source(NULL), destination(NULL) {
23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkPolyToPoly::~SkPolyToPoly() {
23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkPolyToPoly::add() {
23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkASSERT(source);
23980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkASSERT(destination);
24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPoint src[4];
24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPoint dst[4];
24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPath& sourcePath = source->getPath();
24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int srcPts = sourcePath.getPoints(src, 4);
24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPath& destPath = destination->getPath();
24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    int dstPts = destPath.getPoints(dst, 4);
24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (srcPts != dstPts)
24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return true;
24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkMatrix temp;
24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    temp.setPolyToPoly(src, dst, srcPts);
25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    fMatrix->set(temp);
25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    return false;
25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED
25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkPolyToPoly::dump(SkAnimateMaker* maker) {
25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    dumpBase(maker);
25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDebugf("/>\n");
25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDisplayList::fIndent += 4;
25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (source) {
26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s<source>\n", SkDisplayList::fIndent, "");
26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent += 4;
26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        source->dump(maker);
26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent -= 4;
26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s</source>\n", SkDisplayList::fIndent, "");
26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (destination) {
26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s<destination>\n", SkDisplayList::fIndent, "");
26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent += 4;
26980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        destination->dump(maker);
27080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDisplayList::fIndent -= 4;
27180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkDebugf("%*s</destination>\n", SkDisplayList::fIndent, "");
27280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
27380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkDisplayList::fIndent -= 4;
27480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    dumpEnd(maker);
27580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
27680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
27780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
27880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkPolyToPoly::onEndElement(SkAnimateMaker& ) {
27980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkASSERT(source);
28080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkASSERT(destination);
28180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (source->childHasID() || destination->childHasID())
28280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fMatrix->setChildHasID();
28380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
28480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
28580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo* SkPolyToPoly::preferredChild(SkDisplayTypes ) {
28680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    if (source == NULL)
28780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return getMember("source"); // !!! cwap! need to refer to member through enum like kScope instead
28880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    else {
28980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkASSERT(destination == NULL);
29080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return getMember("destination");
29180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
29280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
293