RenderProperties.h revision d0a0b2a3140bfb1819a116413ce9d81886697a07
1acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck/* 2acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Copyright (C) 2014 The Android Open Source Project 3acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * 4acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * you may not use this file except in compliance with the License. 6acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * You may obtain a copy of the License at 7acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * 8acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * http://www.apache.org/licenses/LICENSE-2.0 9acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * 10acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Unless required by applicable law or agreed to in writing, software 11acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * distributed under the License is distributed on an "AS IS" BASIS, 12acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * See the License for the specific language governing permissions and 14acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * limitations under the License. 15acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck */ 16b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#ifndef RENDERNODEPROPERTIES_H 17b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#define RENDERNODEPROPERTIES_H 18acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 19acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <stddef.h> 20acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <cutils/compiler.h> 21acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <androidfw/ResourceTypes.h> 22acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 23acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <SkCamera.h> 24acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <SkMatrix.h> 25b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 26b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#include "Rect.h" 27b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#include "Outline.h" 28acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 29acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#define TRANSLATION 0x0001 30acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#define ROTATION 0x0002 31acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#define ROTATION_3D 0x0004 32acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#define SCALE 0x0008 33acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#define PIVOT 0x0010 34acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 35acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkBitmap; 36acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkPaint; 37acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkRegion; 38acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 39acb6f07623b7df3d4179f70ae03ade574616ffa6John Recknamespace android { 40acb6f07623b7df3d4179f70ae03ade574616ffa6John Recknamespace uirenderer { 41acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 42acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass Matrix4; 43acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderNode; 44acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 45acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck/* 46acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Data structure that holds the properties for a RenderNode 47acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck */ 48acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderProperties { 49acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckpublic: 50acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck RenderProperties(); 51acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck virtual ~RenderProperties(); 52acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 53d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck RenderProperties& operator=(const RenderProperties& other); 54d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 55acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setClipToBounds(bool clipToBounds) { 56d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mClipToBounds = clipToBounds; 57acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 58acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 59acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setProjectBackwards(bool shouldProject) { 60d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mProjectBackwards = shouldProject; 61acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 62acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 63acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setProjectionReceiver(bool shouldRecieve) { 64d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mProjectionReceiver = shouldRecieve; 65acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 66acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 67d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool isProjectionReceiver() const { 68d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectionReceiver; 69acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 70acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 71d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void setStaticMatrix(const SkMatrix* matrix) { 72acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mStaticMatrix; 73d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (matrix) { 74d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = new SkMatrix(*matrix); 75d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } else { 76d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = NULL; 77d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 78acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 79acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 80acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Can return NULL 81d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getStaticMatrix() const { 82acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck return mStaticMatrix; 83acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 84acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 85d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void setAnimationMatrix(const SkMatrix* matrix) { 86acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mAnimationMatrix; 87acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (matrix) { 88acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = new SkMatrix(*matrix); 89acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 90acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = NULL; 91acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 92acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 93acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 94acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setAlpha(float alpha) { 95acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck alpha = fminf(1.0f, fmaxf(0.0f, alpha)); 96d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (alpha != mPrimitiveFields.mAlpha) { 97d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mAlpha = alpha; 98acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 99acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 100acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 101acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getAlpha() const { 102d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mAlpha; 103acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 104acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 105acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setHasOverlappingRendering(bool hasOverlappingRendering) { 106d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHasOverlappingRendering = hasOverlappingRendering; 107acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 108acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 109acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck bool hasOverlappingRendering() const { 110d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 111acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 112acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 113acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationX(float translationX) { 114d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationX != mPrimitiveFields.mTranslationX) { 115d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationX = translationX; 116acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck onTranslationUpdate(); 117acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 118acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 119acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 120acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationX() const { 121d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationX; 122acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 123acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 124acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationY(float translationY) { 125d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationY != mPrimitiveFields.mTranslationY) { 126d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationY = translationY; 127acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck onTranslationUpdate(); 128acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 129acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 130acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 131acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationY() const { 132d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationY; 133acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 134acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 135acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationZ(float translationZ) { 136d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationZ != mPrimitiveFields.mTranslationZ) { 137d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationZ = translationZ; 138acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck onTranslationUpdate(); 139acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 140acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 141acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 142acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationZ() const { 143d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationZ; 144acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 145acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 146acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotation(float rotation) { 147d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotation != mPrimitiveFields.mRotation) { 148d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotation = rotation; 149d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 150d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mRotation == 0.0f) { 151d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~ROTATION; 152acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 153d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= ROTATION; 154acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 155acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 156acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 157acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 158acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotation() const { 159d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotation; 160acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 161acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 162acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotationX(float rotationX) { 163d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotationX != mPrimitiveFields.mRotationX) { 164d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotationX = rotationX; 165d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 166d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mRotationX == 0.0f && mPrimitiveFields.mRotationY == 0.0f) { 167d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~ROTATION_3D; 168acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 169d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= ROTATION_3D; 170acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 171acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 172acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 173acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 174acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationX() const { 175d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationX; 176acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 177acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 178acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotationY(float rotationY) { 179d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotationY != mPrimitiveFields.mRotationY) { 180d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotationY = rotationY; 181d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 182d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mRotationX == 0.0f && mPrimitiveFields.mRotationY == 0.0f) { 183d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~ROTATION_3D; 184acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 185d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= ROTATION_3D; 186acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 187acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 188acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 189acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 190acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationY() const { 191d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationY; 192acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 193acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 194acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setScaleX(float scaleX) { 195d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (scaleX != mPrimitiveFields.mScaleX) { 196d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mScaleX = scaleX; 197d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 198d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mScaleX == 1.0f && mPrimitiveFields.mScaleY == 1.0f) { 199d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~SCALE; 200acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 201d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= SCALE; 202acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 203acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 204acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 205acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 206acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleX() const { 207d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleX; 208acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 209acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 210acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setScaleY(float scaleY) { 211d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (scaleY != mPrimitiveFields.mScaleY) { 212d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mScaleY = scaleY; 213d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 214d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mScaleX == 1.0f && mPrimitiveFields.mScaleY == 1.0f) { 215d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~SCALE; 216acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 217d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= SCALE; 218acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 219acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 220acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 221acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 222acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleY() const { 223d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleY; 224acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 225acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 226acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setPivotX(float pivotX) { 227d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotX = pivotX; 228d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 229d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mPivotX == 0.0f && mPrimitiveFields.mPivotY == 0.0f) { 230d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~PIVOT; 231acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 232d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= PIVOT; 233acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 234d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotExplicitlySet = true; 235acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 236acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 237d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /* Note that getPivotX and getPivotY are adjusted by updateMatrix(), 238d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * so the value returned mPrimitiveFields.may be stale if the RenderProperties has been 239d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * mPrimitiveFields.modified since the last call to updateMatrix() 240d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 241d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotX() const { 242d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotX; 243d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 244acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 245acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setPivotY(float pivotY) { 246d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotY = pivotY; 247d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 248d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mPivotX == 0.0f && mPrimitiveFields.mPivotY == 0.0f) { 249d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~PIVOT; 250acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 251d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= PIVOT; 252acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 253d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotExplicitlySet = true; 254acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 255acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 256d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotY() const { 257d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotY; 258d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 259acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 260acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setCameraDistance(float distance) { 261acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (distance != mCameraDistance) { 262acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mCameraDistance = distance; 263d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 264d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (!mComputedFields.mTransformCamera) { 265d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mComputedFields.mTransformCamera = new Sk3DView(); 266d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mComputedFields.mTransformMatrix3D = new SkMatrix(); 267acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 268d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mComputedFields.mTransformCamera->setCameraLocation(0, 0, distance); 269acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 270acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 271acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 272acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getCameraDistance() const { 273acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck return mCameraDistance; 274acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 275acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 276acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeft(int left) { 277d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft) { 278d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 279d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 280d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 281d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 282acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 283acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 284acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 285acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 286acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getLeft() const { 287d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mLeft; 288acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 289acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 290acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTop(int top) { 291d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (top != mPrimitiveFields.mTop) { 292d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 293d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 294d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 295d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 296acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 297acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 298acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 299acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 300acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTop() const { 301d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTop; 302acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 303acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 304acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRight(int right) { 305d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (right != mPrimitiveFields.mRight) { 306d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 307d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 308d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 309d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 310acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 311acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 312acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 313acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 314acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRight() const { 315d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRight; 316acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 317acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 318acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setBottom(int bottom) { 319d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (bottom != mPrimitiveFields.mBottom) { 320d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 321d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 322d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 323d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 324acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 325acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 326acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 327acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 328acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getBottom() const { 329d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mBottom; 330acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 331acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 332acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeftTop(int left, int top) { 333d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop) { 334d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 335d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 336d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 337d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 338d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 339d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 340acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 341acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 342acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 343acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 344acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeftTopRightBottom(int left, int top, int right, int bottom) { 345d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop || right != mPrimitiveFields.mRight || bottom != mPrimitiveFields.mBottom) { 346d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 347d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 348d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 349d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 350d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 351d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 352d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 353d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 354acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 355acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 356acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 357acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 358acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void offsetLeftRight(float offset) { 359acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 360d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft += offset; 361d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight += offset; 362d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 363d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 364acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 365acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 366acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 367acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 368acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void offsetTopBottom(float offset) { 369acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 370d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop += offset; 371d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom += offset; 372d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mMatrixFlags > TRANSLATION && !mPrimitiveFields.mPivotExplicitlySet) { 373d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 374acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 375acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 376acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 377acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 378acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setCaching(bool caching) { 379d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mCaching = caching; 380acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 381acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 382b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getWidth() const { 383d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mWidth; 384acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 385acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 386b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getHeight() const { 387d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHeight; 388d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 389d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 390d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getAnimationMatrix() const { 391d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mAnimationMatrix; 392d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 393d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 394d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck uint32_t getMatrixFlags() const { 395d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mMatrixFlags; 396d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 397d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 398d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const Matrix4* getTransformMatrix() const { 399d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mComputedFields.mTransformMatrix; 400d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 401d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 402d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getCaching() const { 403d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mCaching; 404acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 405acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 406d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getClipToBounds() const { 407d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mClipToBounds; 408d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 409d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 410d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getHasOverlappingRendering() const { 411d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 412d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 413d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 414d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const Outline& getOutline() const { 415d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 416d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 417d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 418d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getProjectBackwards() const { 419d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectBackwards; 420d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 421d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 422d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void debugOutputProperties(const int level) const; 423d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 424d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ANDROID_API void updateMatrix(); 425d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 426d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline& mutableOutline() { 427d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 428b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } 429b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 430acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckprivate: 431acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void onTranslationUpdate() { 432d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixDirty = true; 433d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (mPrimitiveFields.mTranslationX == 0.0f && mPrimitiveFields.mTranslationY == 0.0f && mPrimitiveFields.mTranslationZ == 0.0f) { 434d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags &= ~TRANSLATION; 435acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 436d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mMatrixFlags |= TRANSLATION; 437acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 438acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 439acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 440acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Rendering properties 441d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct PrimitiveFields { 442d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck PrimitiveFields(); 443d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 444d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline mOutline; 445d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mClipToBounds; 446d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectBackwards; 447d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectionReceiver; 448d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mAlpha; 449d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mHasOverlappingRendering; 450d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mTranslationX, mTranslationY, mTranslationZ; 451d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mRotation, mRotationX, mRotationY; 452d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mScaleX, mScaleY; 453d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mPivotX, mPivotY; 454d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mLeft, mTop, mRight, mBottom; 455d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mWidth, mHeight; 456d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mPrevWidth, mPrevHeight; 457d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mPivotExplicitlySet; 458d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mMatrixDirty; 459d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mMatrixIsIdentity; 460d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck uint32_t mMatrixFlags; 461d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mCaching; 462d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mPrimitiveFields; 463d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 464d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck // mCameraDistance isn't in mPrimitiveFields as it has a complex setter 465acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float mCameraDistance; 466acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mStaticMatrix; 467acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mAnimationMatrix; 468acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 469d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 470d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * These fields are all generated from other properties and are not set directly. 471d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 472d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct ComputedFields { 473d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ComputedFields(); 474d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ~ComputedFields(); 475d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 476d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 477d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * Stores the total transformation of the DisplayList based upon its scalar 478d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * translate/rotate/scale properties. 479d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * 480d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * In the common translation-only case, the matrix isn't allocated and the mTranslation 481d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * properties are used directly. 482d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 483d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Matrix4* mTransformMatrix; 484d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Sk3DView* mTransformCamera; 485d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck SkMatrix* mTransformMatrix3D; 486d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mComputedFields; 487acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck}; 488acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 489acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace uirenderer */ 490acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace android */ 491acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 492b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#endif /* RENDERNODEPROPERTIES_H */ 493