Index: skia/animator/SkDrawMatrix.cpp |
=================================================================== |
--- skia/animator/SkDrawMatrix.cpp (revision 16859) |
+++ skia/animator/SkDrawMatrix.cpp (working copy) |
@@ -1,290 +0,0 @@ |
-/* libs/graphics/animator/SkDrawMatrix.cpp |
-** |
-** Copyright 2006, The Android Open Source Project |
-** |
-** Licensed under the Apache License, Version 2.0 (the "License"); |
-** you may not use this file except in compliance with the License. |
-** You may obtain a copy of the License at |
-** |
-** http://www.apache.org/licenses/LICENSE-2.0 |
-** |
-** Unless required by applicable law or agreed to in writing, software |
-** distributed under the License is distributed on an "AS IS" BASIS, |
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-** See the License for the specific language governing permissions and |
-** limitations under the License. |
-*/ |
- |
-#include "SkDrawMatrix.h" |
-#include "SkAnimateMaker.h" |
-#include "SkCanvas.h" |
-#include "SkPaint.h" |
-#include "SkParse.h" |
-#include "SkMatrixParts.h" |
-#include "SkScript.h" |
-#include "SkTypedArray.h" |
- |
-enum SkDrawMatrix_Properties { |
- SK_PROPERTY(perspectX), |
- SK_PROPERTY(perspectY), |
- SK_PROPERTY(rotate), |
- SK_PROPERTY(scale), |
- SK_PROPERTY(scaleX), |
- SK_PROPERTY(scaleY), |
- SK_PROPERTY(skewX), |
- SK_PROPERTY(skewY), |
- SK_PROPERTY(translate), |
- SK_PROPERTY(translateX), |
- SK_PROPERTY(translateY) |
-}; |
- |
-#if SK_USE_CONDENSED_INFO == 0 |
- |
-const SkMemberInfo SkDrawMatrix::fInfo[] = { |
- SK_MEMBER_ARRAY(matrix, Float), |
- SK_MEMBER_PROPERTY(perspectX, Float), |
- SK_MEMBER_PROPERTY(perspectY, Float), |
- SK_MEMBER_PROPERTY(rotate, Float), |
- SK_MEMBER_PROPERTY(scale, Float), |
- SK_MEMBER_PROPERTY(scaleX, Float), |
- SK_MEMBER_PROPERTY(scaleY, Float), |
- SK_MEMBER_PROPERTY(skewX, Float), |
- SK_MEMBER_PROPERTY(skewY, Float), |
- SK_MEMBER_PROPERTY(translate, Point), |
- SK_MEMBER_PROPERTY(translateX, Float), |
- SK_MEMBER_PROPERTY(translateY, Float) |
-}; |
- |
-#endif |
- |
-DEFINE_GET_MEMBER(SkDrawMatrix); |
- |
-SkDrawMatrix::SkDrawMatrix() : fChildHasID(false), fDirty(false) { |
- fConcat.reset(); |
- fMatrix.reset(); |
-} |
- |
-SkDrawMatrix::~SkDrawMatrix() { |
- for (SkMatrixPart** part = fParts.begin(); part < fParts.end(); part++) |
- delete *part; |
-} |
- |
-bool SkDrawMatrix::add(SkAnimateMaker& maker, SkDisplayable* child) { |
- SkASSERT(child && child->isMatrixPart()); |
- SkMatrixPart* part = (SkMatrixPart*) child; |
- *fParts.append() = part; |
- if (part->add()) |
- maker.setErrorCode(SkDisplayXMLParserError::kErrorAddingToMatrix); |
- return true; |
-} |
- |
-bool SkDrawMatrix::childrenNeedDisposing() const { |
- return false; |
-} |
- |
-SkDisplayable* SkDrawMatrix::deepCopy(SkAnimateMaker* maker) { |
- SkDrawMatrix* copy = (SkDrawMatrix*) |
- SkDisplayType::CreateInstance(maker, SkType_Matrix); |
- SkASSERT(fParts.count() == 0); |
- copy->fMatrix = fMatrix; |
- copy->fConcat = fConcat; |
- return copy; |
-} |
- |
-void SkDrawMatrix::dirty() { |
- fDirty = true; |
-} |
- |
-bool SkDrawMatrix::draw(SkAnimateMaker& maker) { |
- SkMatrix& concat = getMatrix(); |
- maker.fCanvas->concat(concat); |
- return false; |
-} |
- |
-#ifdef SK_DUMP_ENABLED |
-void SkDrawMatrix::dump(SkAnimateMaker* maker) { |
- dumpBase(maker); |
- if (fMatrix.isIdentity()) { |
- SkDebugf("matrix=\"identity\"/>\n"); |
- return; |
- } |
- SkScalar result; |
- result = fMatrix[SkMatrix::kMScaleX]; |
- if (result != SK_Scalar1) |
- SkDebugf("sx=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getScaleY(); |
- if (result != SK_Scalar1) |
- SkDebugf("sy=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getSkewX(); |
- if (result) |
- SkDebugf("skew-x=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getSkewY(); |
- if (result) |
- SkDebugf("skew-y=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getTranslateX(); |
- if (result) |
- SkDebugf("tx=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getTranslateY(); |
- if (result) |
- SkDebugf("ty=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getPerspX(); |
- if (result) |
- SkDebugf("perspect-x=\"%g\" ", SkScalarToFloat(result)); |
- result = fMatrix.getPerspY(); |
- if (result) |
- SkDebugf("perspect-y=\"%g\" ", SkScalarToFloat(result)); |
- SkDebugf("/>\n"); |
-} |
-#endif |
- |
-SkMatrix& SkDrawMatrix::getMatrix() { |
- if (fDirty == false) |
- return fConcat; |
- fMatrix.reset(); |
- for (SkMatrixPart** part = fParts.begin(); part < fParts.end(); part++) { |
- (*part)->add(); |
- fConcat = fMatrix; |
- } |
- fDirty = false; |
- return fConcat; |
-} |
- |
-bool SkDrawMatrix::getProperty(int index, SkScriptValue* value) const { |
- value->fType = SkType_Float; |
- SkScalar result; |
- switch (index) { |
- case SK_PROPERTY(perspectX): |
- result = fMatrix.getPerspX(); |
- break; |
- case SK_PROPERTY(perspectY): |
- result = fMatrix.getPerspY(); |
- break; |
- case SK_PROPERTY(scaleX): |
- result = fMatrix.getScaleX(); |
- break; |
- case SK_PROPERTY(scaleY): |
- result = fMatrix.getScaleY(); |
- break; |
- case SK_PROPERTY(skewX): |
- result = fMatrix.getSkewX(); |
- break; |
- case SK_PROPERTY(skewY): |
- result = fMatrix.getSkewY(); |
- break; |
- case SK_PROPERTY(translateX): |
- result = fMatrix.getTranslateX(); |
- break; |
- case SK_PROPERTY(translateY): |
- result = fMatrix.getTranslateY(); |
- break; |
- default: |
-// SkASSERT(0); |
- return false; |
- } |
- value->fOperand.fScalar = result; |
- return true; |
-} |
- |
-void SkDrawMatrix::initialize() { |
- fConcat = fMatrix; |
-} |
- |
-void SkDrawMatrix::onEndElement(SkAnimateMaker& ) { |
- if (matrix.count() > 0) { |
- SkScalar* vals = matrix.begin(); |
- fMatrix.setScaleX(vals[0]); |
- fMatrix.setSkewX(vals[1]); |
- fMatrix.setTranslateX(vals[2]); |
- fMatrix.setSkewY(vals[3]); |
- fMatrix.setScaleY(vals[4]); |
- fMatrix.setTranslateY(vals[5]); |
-#ifdef SK_SCALAR_IS_FIXED |
- fMatrix.setPerspX(SkFixedToFract(vals[6])); |
- fMatrix.setPerspY(SkFixedToFract(vals[7])); |
-#else |
- fMatrix.setPerspX(vals[6]); |
- fMatrix.setPerspY(vals[7]); |
-#endif |
-// fMatrix.setPerspW(vals[8]); |
- goto setConcat; |
- } |
- if (fChildHasID == false) { |
- { |
- for (SkMatrixPart** part = fParts.begin(); part < fParts.end(); part++) |
- delete *part; |
- } |
- fParts.reset(); |
-setConcat: |
- fConcat = fMatrix; |
- fDirty = false; |
- } |
-} |
- |
-void SkDrawMatrix::setChildHasID() { |
- fChildHasID = true; |
-} |
- |
-bool SkDrawMatrix::setProperty(int index, SkScriptValue& scriptValue) { |
- SkScalar number = scriptValue.fOperand.fScalar; |
- switch (index) { |
- case SK_PROPERTY(translate): |
- // SkScalar xy[2]; |
- SkASSERT(scriptValue.fType == SkType_Array); |
- SkASSERT(scriptValue.fOperand.fArray->getType() == SkType_Float); |
- SkASSERT(scriptValue.fOperand.fArray->count() == 2); |
- // SkParse::FindScalars(scriptValue.fOperand.fString->c_str(), xy, 2); |
- fMatrix.setTranslateX((*scriptValue.fOperand.fArray)[0].fScalar); |
- fMatrix.setTranslateY((*scriptValue.fOperand.fArray)[1].fScalar); |
- return true; |
- case SK_PROPERTY(perspectX): |
-#ifdef SK_SCALAR_IS_FIXED |
- fMatrix.setPerspX(SkFixedToFract(number)); |
-#else |
- fMatrix.setPerspX(number); |
-#endif |
- break; |
- case SK_PROPERTY(perspectY): |
-#ifdef SK_SCALAR_IS_FIXED |
- fMatrix.setPerspY(SkFixedToFract(number)); |
-#else |
- fMatrix.setPerspY(number); |
-#endif |
- break; |
- case SK_PROPERTY(rotate): { |
- SkMatrix temp; |
- temp.setRotate(number, 0, 0); |
- fMatrix.setScaleX(temp.getScaleX()); |
- fMatrix.setScaleY(temp.getScaleY()); |
- fMatrix.setSkewX(temp.getSkewX()); |
- fMatrix.setSkewY(temp.getSkewY()); |
- } break; |
- case SK_PROPERTY(scale): |
- fMatrix.setScaleX(number); |
- fMatrix.setScaleY(number); |
- break; |
- case SK_PROPERTY(scaleX): |
- fMatrix.setScaleX(number); |
- break; |
- case SK_PROPERTY(scaleY): |
- fMatrix.setScaleY(number); |
- break; |
- case SK_PROPERTY(skewX): |
- fMatrix.setSkewX(number); |
- break; |
- case SK_PROPERTY(skewY): |
- fMatrix.setSkewY(number); |
- break; |
- case SK_PROPERTY(translateX): |
- fMatrix.setTranslateX(number); |
- break; |
- case SK_PROPERTY(translateY): |
- fMatrix.setTranslateY(number); |
- break; |
- default: |
- SkASSERT(0); |
- return false; |
- } |
- fConcat = fMatrix; |
- return true; |
-} |
- |