RenderProperties.h revision f7483e3af0513a1baa8341d403df2e0c0896a9ff
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> 258c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include <SkRegion.h> 26b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 27b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#include "Rect.h" 288c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include "RevealClip.h" 29b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#include "Outline.h" 30acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 31acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkBitmap; 32acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkPaint; 33acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 34acb6f07623b7df3d4179f70ae03ade574616ffa6John Recknamespace android { 35acb6f07623b7df3d4179f70ae03ade574616ffa6John Recknamespace uirenderer { 36acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 37acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass Matrix4; 38acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderNode; 39acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 40acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck/* 41acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Data structure that holds the properties for a RenderNode 42acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck */ 43acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderProperties { 44acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckpublic: 45acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck RenderProperties(); 46acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck virtual ~RenderProperties(); 47acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 48d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck RenderProperties& operator=(const RenderProperties& other); 49d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 50acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setClipToBounds(bool clipToBounds) { 51d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mClipToBounds = clipToBounds; 52acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 53acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 54acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setProjectBackwards(bool shouldProject) { 55d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mProjectBackwards = shouldProject; 56acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 57acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 58acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setProjectionReceiver(bool shouldRecieve) { 59d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mProjectionReceiver = shouldRecieve; 60acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 61acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 62d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool isProjectionReceiver() const { 63d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectionReceiver; 64acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 65acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 66d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void setStaticMatrix(const SkMatrix* matrix) { 67acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mStaticMatrix; 68d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (matrix) { 69d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = new SkMatrix(*matrix); 70d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } else { 71d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = NULL; 72d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 73acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 74acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 75acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Can return NULL 76d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getStaticMatrix() const { 77acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck return mStaticMatrix; 78acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 79acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 80d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void setAnimationMatrix(const SkMatrix* matrix) { 81acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mAnimationMatrix; 82acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (matrix) { 83acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = new SkMatrix(*matrix); 84acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 85acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = NULL; 86acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 87acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 88acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 89acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setAlpha(float alpha) { 90acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck alpha = fminf(1.0f, fmaxf(0.0f, alpha)); 91d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (alpha != mPrimitiveFields.mAlpha) { 92d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mAlpha = alpha; 93acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 94acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 95acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 96acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getAlpha() const { 97d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mAlpha; 98acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 99acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 100acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setHasOverlappingRendering(bool hasOverlappingRendering) { 101d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHasOverlappingRendering = hasOverlappingRendering; 102acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 103acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 104acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck bool hasOverlappingRendering() const { 105d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 106acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 107acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 108acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationX(float translationX) { 109d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationX != mPrimitiveFields.mTranslationX) { 110d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationX = translationX; 111f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 112acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 113acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 114acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 115acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationX() const { 116d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationX; 117acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 118acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 119acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationY(float translationY) { 120d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationY != mPrimitiveFields.mTranslationY) { 121d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationY = translationY; 122f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 123acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 124acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 125acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 126acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationY() const { 127d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationY; 128acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 129acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 130acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationZ(float translationZ) { 131d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationZ != mPrimitiveFields.mTranslationZ) { 132d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationZ = translationZ; 133f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 134acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 135acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 136acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 137acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationZ() const { 138d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationZ; 139acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 140acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 141acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotation(float rotation) { 142d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotation != mPrimitiveFields.mRotation) { 143d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotation = rotation; 144f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 145acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 146acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 147acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 148acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotation() const { 149d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotation; 150acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 151acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 152acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotationX(float rotationX) { 153d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotationX != mPrimitiveFields.mRotationX) { 154d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotationX = rotationX; 155f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 156acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 157acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 158acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 159acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationX() const { 160d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationX; 161acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 162acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 163acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotationY(float rotationY) { 164d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotationY != mPrimitiveFields.mRotationY) { 165d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotationY = rotationY; 166f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 167acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 168acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 169acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 170acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationY() const { 171d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationY; 172acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 173acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 174acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setScaleX(float scaleX) { 175d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (scaleX != mPrimitiveFields.mScaleX) { 176d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mScaleX = scaleX; 177f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 178acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 179acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 180acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 181acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleX() const { 182d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleX; 183acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 184acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 185acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setScaleY(float scaleY) { 186d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (scaleY != mPrimitiveFields.mScaleY) { 187d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mScaleY = scaleY; 188f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 189acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 190acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 191acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 192acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleY() const { 193d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleY; 194acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 195acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 196acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setPivotX(float pivotX) { 197d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotX = pivotX; 198f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 199d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotExplicitlySet = true; 200acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 201acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 202d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /* Note that getPivotX and getPivotY are adjusted by updateMatrix(), 203d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * so the value returned mPrimitiveFields.may be stale if the RenderProperties has been 204d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * mPrimitiveFields.modified since the last call to updateMatrix() 205d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 206d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotX() const { 207d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotX; 208d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 209acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 210acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setPivotY(float pivotY) { 211d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotY = pivotY; 212f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 213d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotExplicitlySet = true; 214acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 215acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 216d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotY() const { 217d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotY; 218d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 219acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 22049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik bool isPivotExplicitlySet() const { 22149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik return mPrimitiveFields.mPivotExplicitlySet; 22249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 22349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 224acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setCameraDistance(float distance) { 22549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik if (distance != getCameraDistance()) { 226f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 22749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik mComputedFields.mTransformCamera.setCameraLocation(0, 0, distance); 228acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 229acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 230acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 231acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getCameraDistance() const { 23249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // TODO: update getCameraLocationZ() to be const 23349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik return const_cast<Sk3DView*>(&mComputedFields.mTransformCamera)->getCameraLocationZ(); 234acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 235acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 236acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeft(int left) { 237d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft) { 238d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 239d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 240f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 241f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 242acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 243acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 244acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 245acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 246acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getLeft() const { 247d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mLeft; 248acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 249acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 250acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTop(int top) { 251d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (top != mPrimitiveFields.mTop) { 252d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 253d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 254f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 255f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 256acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 257acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 258acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 259acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 260acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTop() const { 261d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTop; 262acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 263acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 264acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRight(int right) { 265d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (right != mPrimitiveFields.mRight) { 266d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 267d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 268f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 269f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 270acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 271acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 272acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 273acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 274acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRight() const { 275d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRight; 276acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 277acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 278acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setBottom(int bottom) { 279d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (bottom != mPrimitiveFields.mBottom) { 280d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 281d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 282f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 283f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 284acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 285acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 286acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 287acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 288acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getBottom() const { 289d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mBottom; 290acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 291acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 292acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeftTop(int left, int top) { 293d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop) { 294d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 295d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 296d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 297d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 298f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 299f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 300acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 301acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 302acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 303acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 304acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeftTopRightBottom(int left, int top, int right, int bottom) { 305d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop || right != mPrimitiveFields.mRight || bottom != mPrimitiveFields.mBottom) { 306d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 307d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 308d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 309d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 310d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 311d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 312f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 313f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 314acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 315acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 316acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 317acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 318acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void offsetLeftRight(float offset) { 319acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 320d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft += offset; 321d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight += offset; 322f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 323f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 324acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 325acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 326acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 327acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 328acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void offsetTopBottom(float offset) { 329acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 330d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop += offset; 331d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom += offset; 332f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 333f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 334acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 335acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 336acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 337acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 338acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setCaching(bool caching) { 339d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mCaching = caching; 340acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 341acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 342b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getWidth() const { 343d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mWidth; 344acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 345acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 346b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getHeight() const { 347d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHeight; 348d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 349d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 350d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getAnimationMatrix() const { 351d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mAnimationMatrix; 352d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 353d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 354f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool hasTransformMatrix() const { 355f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return getTransformMatrix() && !getTransformMatrix()->isIdentity(); 356f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck } 357f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck 358f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck // May only call this if hasTransformMatrix() is true 359f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool isTransformTranslateOnly() const { 360f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return getTransformMatrix()->getType() == SkMatrix::kTranslate_Mask; 361d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 362d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 36349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik const SkMatrix* getTransformMatrix() const { 364f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck LOG_ALWAYS_FATAL_IF(mPrimitiveFields.mMatrixOrPivotDirty, "Cannot get a dirty matrix!"); 365d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mComputedFields.mTransformMatrix; 366d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 367d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 368d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getCaching() const { 369d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mCaching; 370acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 371acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 372d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getClipToBounds() const { 373d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mClipToBounds; 374d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 375d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 376d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getHasOverlappingRendering() const { 377d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 378d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 379d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 380d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const Outline& getOutline() const { 381d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 382d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 383d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 3848c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const RevealClip& getRevealClip() const { 3858c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mRevealClip; 3868c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 3878c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 388d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getProjectBackwards() const { 389d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectBackwards; 390d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 391d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 392d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void debugOutputProperties(const int level) const; 393d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 394d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ANDROID_API void updateMatrix(); 395d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 3968c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik ANDROID_API void updateClipPath(); 3978c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 3988c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik // signals that mComputedFields.mClipPath is up to date, and should be used for clipping 3998c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik bool hasClippingPath() const { 4008c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mOutline.willClip() || mPrimitiveFields.mRevealClip.willClip(); 4018c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4028c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4038c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const SkPath* getClippingPath() const { 4048c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return hasClippingPath() ? mComputedFields.mClipPath : NULL; 4058c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4068c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4078c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkRegion::Op getClippingPathOp() const { 4088c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mComputedFields.mClipPathOp; 4098c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4108c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 411d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline& mutableOutline() { 412d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 413b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } 414b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 4158c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip& mutableRevealClip() { 4168c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mRevealClip; 4178c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4188c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 419acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckprivate: 420acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 421acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Rendering properties 422d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct PrimitiveFields { 423d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck PrimitiveFields(); 424d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 425d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline mOutline; 4268c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip mRevealClip; 427d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mClipToBounds; 428d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectBackwards; 429d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectionReceiver; 430d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mAlpha; 431d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mHasOverlappingRendering; 432d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mTranslationX, mTranslationY, mTranslationZ; 433d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mRotation, mRotationX, mRotationY; 434d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mScaleX, mScaleY; 435d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mPivotX, mPivotY; 436d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mLeft, mTop, mRight, mBottom; 437d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mWidth, mHeight; 438d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mPivotExplicitlySet; 439f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool mMatrixOrPivotDirty; 440d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mCaching; 441d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mPrimitiveFields; 442d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 443d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck // mCameraDistance isn't in mPrimitiveFields as it has a complex setter 444acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mStaticMatrix; 445acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mAnimationMatrix; 446acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 447d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 448d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * These fields are all generated from other properties and are not set directly. 449d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 450d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct ComputedFields { 451d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ComputedFields(); 452d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ~ComputedFields(); 453d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 454d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 455d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * Stores the total transformation of the DisplayList based upon its scalar 456d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * translate/rotate/scale properties. 457d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * 45849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * In the common translation-only case, the matrix isn't necessarily allocated, 45949e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * and the mTranslation properties are used directly. 460d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 46149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik SkMatrix* mTransformMatrix; 46249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 46349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik Sk3DView mTransformCamera; 4648c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkPath* mClipPath; // TODO: remove this, create new ops for efficient/special case clipping 4658c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkRegion::Op mClipPathOp; 466d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mComputedFields; 467acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck}; 468acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 469acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace uirenderer */ 470acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace android */ 471acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 472b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#endif /* RENDERNODEPROPERTIES_H */ 473