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