RenderProperties.h revision e45b1fd03b524d2b57cc6c222d89076a31a08bea
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 19e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#include <algorithm> 20acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <stddef.h> 21e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#include <vector> 22acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <cutils/compiler.h> 23acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <androidfw/ResourceTypes.h> 24acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 25acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <SkCamera.h> 26acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck#include <SkMatrix.h> 278c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include <SkRegion.h> 28b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 29e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck#include "Animator.h" 30b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#include "Rect.h" 318c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include "RevealClip.h" 32b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#include "Outline.h" 33acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 34acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkBitmap; 35acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass SkPaint; 36acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 37acb6f07623b7df3d4179f70ae03ade574616ffa6John Recknamespace android { 38acb6f07623b7df3d4179f70ae03ade574616ffa6John Recknamespace uirenderer { 39acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 40acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass Matrix4; 41acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderNode; 42acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 43acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck/* 44acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Data structure that holds the properties for a RenderNode 45acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck */ 46acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderProperties { 47acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckpublic: 48acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck RenderProperties(); 49acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck virtual ~RenderProperties(); 50acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 51d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck RenderProperties& operator=(const RenderProperties& other); 52d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 53acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setClipToBounds(bool clipToBounds) { 54d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mClipToBounds = clipToBounds; 55acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 56acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 57acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setProjectBackwards(bool shouldProject) { 58d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mProjectBackwards = shouldProject; 59acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 60acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 61acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setProjectionReceiver(bool shouldRecieve) { 62d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mProjectionReceiver = shouldRecieve; 63acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 64acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 65d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool isProjectionReceiver() const { 66d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectionReceiver; 67acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 68acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 69d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void setStaticMatrix(const SkMatrix* matrix) { 70acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mStaticMatrix; 71d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (matrix) { 72d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = new SkMatrix(*matrix); 73d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } else { 74d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = NULL; 75d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 76acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 77acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 78acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Can return NULL 79d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getStaticMatrix() const { 80acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck return mStaticMatrix; 81acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 82acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 83d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void setAnimationMatrix(const SkMatrix* matrix) { 84acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mAnimationMatrix; 85acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (matrix) { 86acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = new SkMatrix(*matrix); 87acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 88acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = NULL; 89acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 90acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 91acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 92acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setAlpha(float alpha) { 93acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck alpha = fminf(1.0f, fmaxf(0.0f, alpha)); 94d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (alpha != mPrimitiveFields.mAlpha) { 95d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mAlpha = alpha; 96acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 97acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 98acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 99acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getAlpha() const { 100d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mAlpha; 101acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 102acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 103acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setHasOverlappingRendering(bool hasOverlappingRendering) { 104d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHasOverlappingRendering = hasOverlappingRendering; 105acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 106acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 107acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck bool hasOverlappingRendering() const { 108d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 109acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 110acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 111cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik void setElevation(float elevation) { 112cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik if (elevation != mPrimitiveFields.mElevation) { 113cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik mPrimitiveFields.mElevation = elevation; 114cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik // mMatrixOrPivotDirty not set, since matrix doesn't respect Z 115cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 116cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 117cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 118cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik float getElevation() const { 119cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik return mPrimitiveFields.mElevation; 120cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 121cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 122acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationX(float translationX) { 123d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationX != mPrimitiveFields.mTranslationX) { 124d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationX = translationX; 125f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 126acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 127acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 128acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 129acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationX() const { 130d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationX; 131acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 132acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 133acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationY(float translationY) { 134d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationY != mPrimitiveFields.mTranslationY) { 135d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationY = translationY; 136f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 137acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 138acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 139acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 140acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationY() const { 141d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationY; 142acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 143acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 144acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTranslationZ(float translationZ) { 145d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (translationZ != mPrimitiveFields.mTranslationZ) { 146d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTranslationZ = translationZ; 147cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik // mMatrixOrPivotDirty not set, since matrix doesn't respect Z 148acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 149acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 150acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 151acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationZ() const { 152d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationZ; 153acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 154acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 155e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 156e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck void setX(float value) { 157e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck setTranslationX(value - getLeft()); 158e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 159e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 160e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 161e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck float getX() const { 162e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck return getLeft() + getTranslationX(); 163e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 164e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 165e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 166e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck void setY(float value) { 167e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck setTranslationY(value - getTop()); 168e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 169e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 170e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 171e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck float getY() const { 172e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck return getTop() + getTranslationY(); 173e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 174e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 175e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 176e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck void setZ(float value) { 177e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck setTranslationZ(value - getElevation()); 178e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 179e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 180cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik float getZ() const { 181cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik return getElevation() + getTranslationZ(); 182cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 183cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 184acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotation(float rotation) { 185d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotation != mPrimitiveFields.mRotation) { 186d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotation = rotation; 187f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 188acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 189acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 190acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 191acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotation() const { 192d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotation; 193acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 194acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 195acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotationX(float rotationX) { 196d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotationX != mPrimitiveFields.mRotationX) { 197d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotationX = rotationX; 198f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 199acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 200acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 201acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 202acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationX() const { 203d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationX; 204acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 205acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 206acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRotationY(float rotationY) { 207d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (rotationY != mPrimitiveFields.mRotationY) { 208d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRotationY = rotationY; 209f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 210acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 211acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 212acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 213acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationY() const { 214d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationY; 215acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 216acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 217acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setScaleX(float scaleX) { 218d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (scaleX != mPrimitiveFields.mScaleX) { 219d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mScaleX = scaleX; 220f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 221acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 222acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 223acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 224acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleX() const { 225d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleX; 226acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 227acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 228acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setScaleY(float scaleY) { 229d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (scaleY != mPrimitiveFields.mScaleY) { 230d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mScaleY = scaleY; 231f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 232acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 233acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 234acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 235acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleY() const { 236d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleY; 237acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 238acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 239acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setPivotX(float pivotX) { 240d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotX = pivotX; 241f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 242d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotExplicitlySet = true; 243acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 244acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 245d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /* Note that getPivotX and getPivotY are adjusted by updateMatrix(), 246d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * so the value returned mPrimitiveFields.may be stale if the RenderProperties has been 247d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * mPrimitiveFields.modified since the last call to updateMatrix() 248d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 249d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotX() const { 250d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotX; 251d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 252acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 253acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setPivotY(float pivotY) { 254d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotY = pivotY; 255f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 256d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mPivotExplicitlySet = true; 257acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 258acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 259d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotY() const { 260d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotY; 261d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 262acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 26349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik bool isPivotExplicitlySet() const { 26449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik return mPrimitiveFields.mPivotExplicitlySet; 26549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 26649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 267acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setCameraDistance(float distance) { 26849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik if (distance != getCameraDistance()) { 269f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 27049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik mComputedFields.mTransformCamera.setCameraLocation(0, 0, distance); 271acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 272acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 273acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 274acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getCameraDistance() const { 27549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // TODO: update getCameraLocationZ() to be const 27649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik return const_cast<Sk3DView*>(&mComputedFields.mTransformCamera)->getCameraLocationZ(); 277acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 278acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 279acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeft(int left) { 280d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft) { 281d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 282d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 283f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 284f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 285acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 286acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 287acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 288acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 289acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getLeft() const { 290d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mLeft; 291acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 292acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 293acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setTop(int top) { 294d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (top != mPrimitiveFields.mTop) { 295d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 296d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 297f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 298f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 299acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 300acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 301acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 302acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 303acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTop() const { 304d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTop; 305acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 306acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 307acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setRight(int right) { 308d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (right != mPrimitiveFields.mRight) { 309d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 310d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 311f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 312f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 313acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 314acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 315acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 316acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 317acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRight() const { 318d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRight; 319acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 320acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 321acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setBottom(int bottom) { 322d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (bottom != mPrimitiveFields.mBottom) { 323d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 324d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 325f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 326f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 327acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 328acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 329acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 330acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 331acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getBottom() const { 332d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mBottom; 333acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 334acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 335acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeftTop(int left, int top) { 336d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop) { 337d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 338d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 339d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 340d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 341f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 342f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 343acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 344acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 345acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 346acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 347acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setLeftTopRightBottom(int left, int top, int right, int bottom) { 348cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop 349cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik || right != mPrimitiveFields.mRight || bottom != mPrimitiveFields.mBottom) { 350d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 351d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 352d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 353d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 354d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 355d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 356f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 357f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 358acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 359acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 360acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 361acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 362acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void offsetLeftRight(float offset) { 363acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 364d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft += offset; 365d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight += offset; 366f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 367f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 368acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 369acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 370acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 371acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 372acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void offsetTopBottom(float offset) { 373acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 374d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop += offset; 375d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom += offset; 376f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 377f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 378acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 379acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 380acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 381acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 382acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck void setCaching(bool caching) { 383d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mCaching = caching; 384acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 385acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 386b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getWidth() const { 387d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mWidth; 388acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 389acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 390b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getHeight() const { 391d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHeight; 392d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 393d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 394d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getAnimationMatrix() const { 395d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mAnimationMatrix; 396d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 397d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 398f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool hasTransformMatrix() const { 399f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return getTransformMatrix() && !getTransformMatrix()->isIdentity(); 400f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck } 401f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck 402f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck // May only call this if hasTransformMatrix() is true 403f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool isTransformTranslateOnly() const { 404f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return getTransformMatrix()->getType() == SkMatrix::kTranslate_Mask; 405d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 406d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 40749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik const SkMatrix* getTransformMatrix() const { 408f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck LOG_ALWAYS_FATAL_IF(mPrimitiveFields.mMatrixOrPivotDirty, "Cannot get a dirty matrix!"); 409d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mComputedFields.mTransformMatrix; 410d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 411d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 412d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getCaching() const { 413d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mCaching; 414acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 415acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 416d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getClipToBounds() const { 417d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mClipToBounds; 418d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 419d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 420d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getHasOverlappingRendering() const { 421d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 422d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 423d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 424d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const Outline& getOutline() const { 425d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 426d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 427d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 4288c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const RevealClip& getRevealClip() const { 4298c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mRevealClip; 4308c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4318c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 432d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getProjectBackwards() const { 433d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectBackwards; 434d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 435d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 436d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void debugOutputProperties(const int level) const; 437d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 438d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ANDROID_API void updateMatrix(); 439d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 4408c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik ANDROID_API void updateClipPath(); 4418c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4428c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik // signals that mComputedFields.mClipPath is up to date, and should be used for clipping 4438c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik bool hasClippingPath() const { 4448c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mOutline.willClip() || mPrimitiveFields.mRevealClip.willClip(); 4458c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4468c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4478c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const SkPath* getClippingPath() const { 4488c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return hasClippingPath() ? mComputedFields.mClipPath : NULL; 4498c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4508c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4518c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkRegion::Op getClippingPathOp() const { 4528c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mComputedFields.mClipPathOp; 4538c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4548c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 455d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline& mutableOutline() { 456d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 457b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } 458b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 4598c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip& mutableRevealClip() { 4608c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mRevealClip; 4618c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4628c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 463acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckprivate: 464acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 465acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Rendering properties 466d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct PrimitiveFields { 467d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck PrimitiveFields(); 468d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 469d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline mOutline; 4708c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip mRevealClip; 471d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mClipToBounds; 472d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectBackwards; 473d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectionReceiver; 474d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mAlpha; 475d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mHasOverlappingRendering; 476cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik float mElevation; 477d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mTranslationX, mTranslationY, mTranslationZ; 478d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mRotation, mRotationX, mRotationY; 479d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mScaleX, mScaleY; 480d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mPivotX, mPivotY; 481d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mLeft, mTop, mRight, mBottom; 482d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mWidth, mHeight; 483d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mPivotExplicitlySet; 484f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool mMatrixOrPivotDirty; 485d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mCaching; 486d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mPrimitiveFields; 487d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 488acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mStaticMatrix; 489acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mAnimationMatrix; 490acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 491d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 492d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * These fields are all generated from other properties and are not set directly. 493d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 494d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct ComputedFields { 495d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ComputedFields(); 496d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ~ComputedFields(); 497d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 498d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 499d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * Stores the total transformation of the DisplayList based upon its scalar 500d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * translate/rotate/scale properties. 501d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * 50249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * In the common translation-only case, the matrix isn't necessarily allocated, 50349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * and the mTranslation properties are used directly. 504d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 50549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik SkMatrix* mTransformMatrix; 50649e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 50749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik Sk3DView mTransformCamera; 5088c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkPath* mClipPath; // TODO: remove this, create new ops for efficient/special case clipping 5098c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkRegion::Op mClipPathOp; 510d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mComputedFields; 511acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck}; 512acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 513acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace uirenderer */ 514acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace android */ 515acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 516b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#endif /* RENDERNODEPROPERTIES_H */ 517