RenderProperties.h revision 79c7de77a7da9cbcb9428ab6203987feb35a427f
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 4379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck// The __VA_ARGS__ will be executed if a & b are not equal 4479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck#define RP_SET(a, b, ...) (a != b ? (a = b, ##__VA_ARGS__, true) : false) 4579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck#define RP_SET_AND_DIRTY(a, b) RP_SET(a, b, mPrimitiveFields.mMatrixOrPivotDirty = true) 4679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck 47acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck/* 48acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck * Data structure that holds the properties for a RenderNode 49acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck */ 50acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckclass RenderProperties { 51acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckpublic: 52acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck RenderProperties(); 53acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck virtual ~RenderProperties(); 54acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 55d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck RenderProperties& operator=(const RenderProperties& other); 56d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 5779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setClipToBounds(bool clipToBounds) { 5879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mClipToBounds, clipToBounds); 59acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 60acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 6179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setProjectBackwards(bool shouldProject) { 6279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mProjectBackwards, shouldProject); 63acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 64acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 6579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setProjectionReceiver(bool shouldRecieve) { 6679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mProjectionReceiver, shouldRecieve); 67acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 68acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 69d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool isProjectionReceiver() const { 70d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectionReceiver; 71acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 72acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 7379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setStaticMatrix(const SkMatrix* matrix) { 74acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mStaticMatrix; 75d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck if (matrix) { 76d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = new SkMatrix(*matrix); 77d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } else { 78d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mStaticMatrix = NULL; 79d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 8079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 81acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 82acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 83acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Can return NULL 84d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getStaticMatrix() const { 85acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck return mStaticMatrix; 86acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 87acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 8879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setAnimationMatrix(const SkMatrix* matrix) { 89acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck delete mAnimationMatrix; 90acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (matrix) { 91acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = new SkMatrix(*matrix); 92acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } else { 93acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck mAnimationMatrix = NULL; 94acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 9579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 96acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 97acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 9879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setAlpha(float alpha) { 99acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck alpha = fminf(1.0f, fmaxf(0.0f, alpha)); 10079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mAlpha, alpha); 101acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 102acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 103acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getAlpha() const { 104d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mAlpha; 105acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 106acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 10779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setHasOverlappingRendering(bool hasOverlappingRendering) { 10879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mHasOverlappingRendering, hasOverlappingRendering); 109acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 110acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 111acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck bool hasOverlappingRendering() const { 112d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 113acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 114acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 11579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setElevation(float elevation) { 11679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mElevation, elevation); 11779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck // Don't dirty matrix/pivot, since they don't respect Z 118cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 119cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 120cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik float getElevation() const { 121cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik return mPrimitiveFields.mElevation; 122cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 123cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 12479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setTranslationX(float translationX) { 12579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mTranslationX, translationX); 126acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 127acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 128acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationX() const { 129d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationX; 130acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 131acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 13279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setTranslationY(float translationY) { 13379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mTranslationY, translationY); 134acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 135acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 136acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationY() const { 137d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationY; 138acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 139acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 14079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setTranslationZ(float translationZ) { 14179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mTranslationZ, translationZ); 14279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck // mMatrixOrPivotDirty not set, since matrix doesn't respect Z 143acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 144acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 145acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTranslationZ() const { 146d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTranslationZ; 147acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 148acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 149e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 15079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setX(float value) { 15179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return setTranslationX(value - getLeft()); 152e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 153e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 154e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 155e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck float getX() const { 156e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck return getLeft() + getTranslationX(); 157e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 158e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 159e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 16079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setY(float value) { 16179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return setTranslationY(value - getTop()); 162e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 163e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 164e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 165e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck float getY() const { 166e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck return getTop() + getTranslationY(); 167e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 168e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 169e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck // Animation helper 17079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setZ(float value) { 17179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return setTranslationZ(value - getElevation()); 172e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck } 173e45b1fd03b524d2b57cc6c222d89076a31a08beaJohn Reck 174cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik float getZ() const { 175cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik return getElevation() + getTranslationZ(); 176cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik } 177cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik 17879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setRotation(float rotation) { 17979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mRotation, rotation); 180acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 181acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 182acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotation() const { 183d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotation; 184acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 185acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 18679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setRotationX(float rotationX) { 18779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mRotationX, rotationX); 188acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 189acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 190acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationX() const { 191d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationX; 192acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 193acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 19479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setRotationY(float rotationY) { 19579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mRotationY, rotationY); 196acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 197acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 198acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRotationY() const { 199d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRotationY; 200acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 201acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 20279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setScaleX(float scaleX) { 20379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mScaleX, scaleX); 204acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 205acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 206acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleX() const { 207d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleX; 208acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 209acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 21079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setScaleY(float scaleY) { 21179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET_AND_DIRTY(mPrimitiveFields.mScaleY, scaleY); 212acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 213acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 214acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getScaleY() const { 215d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mScaleY; 216acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 217acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 21879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setPivotX(float pivotX) { 21979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (RP_SET(mPrimitiveFields.mPivotX, pivotX) 22079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck || !mPrimitiveFields.mPivotExplicitlySet) { 22179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 22279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck mPrimitiveFields.mPivotExplicitlySet = true; 22379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 22479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck } 22579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 226acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 227acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 228d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /* Note that getPivotX and getPivotY are adjusted by updateMatrix(), 22979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck * so the value returned may be stale if the RenderProperties has been 23079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck * modified since the last call to updateMatrix() 231d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 232d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotX() const { 233d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotX; 234d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 235acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 23679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setPivotY(float pivotY) { 23779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (RP_SET(mPrimitiveFields.mPivotY, pivotY) 23879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck || !mPrimitiveFields.mPivotExplicitlySet) { 23979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 24079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck mPrimitiveFields.mPivotExplicitlySet = true; 24179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 24279c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck } 24379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 244acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 245acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 246d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float getPivotY() const { 247d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mPivotY; 248d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 249acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 25049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik bool isPivotExplicitlySet() const { 25149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik return mPrimitiveFields.mPivotExplicitlySet; 25249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik } 25349e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 25479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setCameraDistance(float distance) { 25549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik if (distance != getCameraDistance()) { 256f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 25749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik mComputedFields.mTransformCamera.setCameraLocation(0, 0, distance); 25879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 259acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 26079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 261acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 262acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 263acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getCameraDistance() const { 26449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik // TODO: update getCameraLocationZ() to be const 26549e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik return const_cast<Sk3DView*>(&mComputedFields.mTransformCamera)->getCameraLocationZ(); 266acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 267acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 26879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setLeft(int left) { 26979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (RP_SET(mPrimitiveFields.mLeft, left)) { 270d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 271f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 272f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 273acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 27479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 275acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 27679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 277acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 278acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 279acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getLeft() const { 280d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mLeft; 281acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 282acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 28379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setTop(int top) { 28479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (RP_SET(mPrimitiveFields.mTop, top)) { 285d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 286f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 287f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 288acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 28979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 290acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 29179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 292acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 293acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 294acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getTop() const { 295d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mTop; 296acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 297acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 29879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setRight(int right) { 29979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (RP_SET(mPrimitiveFields.mRight, right)) { 300d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 301f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 302f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 303acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 30479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 305acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 30679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 307acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 308acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 309acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getRight() const { 310d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mRight; 311acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 312acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 31379c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setBottom(int bottom) { 31479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck if (RP_SET(mPrimitiveFields.mBottom, bottom)) { 315d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 316f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 317f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 318acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 31979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 320acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 32179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 322acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 323acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 324acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck float getBottom() const { 325d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mBottom; 326acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 327acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 32879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setLeftTop(int left, int top) { 32979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool leftResult = setLeft(left); 33079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool topResult = setTop(top); 33179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return leftResult || topResult; 332acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 333acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 33479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setLeftTopRightBottom(int left, int top, int right, int bottom) { 335cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop 336cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik || right != mPrimitiveFields.mRight || bottom != mPrimitiveFields.mBottom) { 337d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft = left; 338d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop = top; 339d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight = right; 340d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom = bottom; 341d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft; 342d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop; 343f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck if (!mPrimitiveFields.mPivotExplicitlySet) { 344f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck mPrimitiveFields.mMatrixOrPivotDirty = true; 345acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 34679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 347acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 34879c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 349acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 350acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 35179c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool offsetLeftRight(float offset) { 352acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 353d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mLeft += offset; 354d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mRight += offset; 35579c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 356acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 35779c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 358acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 359acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 36079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool offsetTopBottom(float offset) { 361acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck if (offset != 0) { 362d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mTop += offset; 363d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck mPrimitiveFields.mBottom += offset; 36479c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return true; 365acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 36679c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return false; 367acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 368acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 36979c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck bool setCaching(bool caching) { 37079c7de77a7da9cbcb9428ab6203987feb35a427fJohn Reck return RP_SET(mPrimitiveFields.mCaching, caching); 371acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 372acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 373b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getWidth() const { 374d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mWidth; 375acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 376acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 377b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik int getHeight() const { 378d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHeight; 379d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 380d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 381d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const SkMatrix* getAnimationMatrix() const { 382d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mAnimationMatrix; 383d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 384d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 385f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool hasTransformMatrix() const { 386f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return getTransformMatrix() && !getTransformMatrix()->isIdentity(); 387f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck } 388f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck 389f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck // May only call this if hasTransformMatrix() is true 390f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool isTransformTranslateOnly() const { 391f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck return getTransformMatrix()->getType() == SkMatrix::kTranslate_Mask; 392d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 393d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 39449e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik const SkMatrix* getTransformMatrix() const { 395f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck LOG_ALWAYS_FATAL_IF(mPrimitiveFields.mMatrixOrPivotDirty, "Cannot get a dirty matrix!"); 396d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mComputedFields.mTransformMatrix; 397d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 398d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 399d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getCaching() const { 400d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mCaching; 401acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck } 402acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 403d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getClipToBounds() const { 404d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mClipToBounds; 405d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 406d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 407d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getHasOverlappingRendering() const { 408d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mHasOverlappingRendering; 409d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 410d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 411d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck const Outline& getOutline() const { 412d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 413d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 414d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 4158c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const RevealClip& getRevealClip() const { 4168c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mRevealClip; 4178c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4188c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 419d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool getProjectBackwards() const { 420d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mProjectBackwards; 421d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } 422d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 423d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck void debugOutputProperties(const int level) const; 424d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 425d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ANDROID_API void updateMatrix(); 426d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 4278c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik bool hasClippingPath() const { 4282bcad176757386d906157bb898167fbcebe9f55eChris Craik return mPrimitiveFields.mRevealClip.willClip(); 4298c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4308c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4318c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik const SkPath* getClippingPath() const { 4322bcad176757386d906157bb898167fbcebe9f55eChris Craik return mPrimitiveFields.mRevealClip.getPath(); 4338c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4348c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 4358c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik SkRegion::Op getClippingPathOp() const { 4362bcad176757386d906157bb898167fbcebe9f55eChris Craik return mPrimitiveFields.mRevealClip.isInverseClip() 4372bcad176757386d906157bb898167fbcebe9f55eChris Craik ? SkRegion::kDifference_Op : SkRegion::kIntersect_Op; 4388c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4398c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 440d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline& mutableOutline() { 441d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck return mPrimitiveFields.mOutline; 442b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik } 443b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik 4448c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip& mutableRevealClip() { 4458c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik return mPrimitiveFields.mRevealClip; 4468c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik } 4478c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik 448acb6f07623b7df3d4179f70ae03ade574616ffa6John Reckprivate: 449acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 450acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck // Rendering properties 451d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct PrimitiveFields { 452d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck PrimitiveFields(); 453d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 454d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck Outline mOutline; 4558c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik RevealClip mRevealClip; 456d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mClipToBounds; 457d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectBackwards; 458d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mProjectionReceiver; 459d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mAlpha; 460d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mHasOverlappingRendering; 461cc39e16cb98855f35079941b5e7e6eac2b7bc388Chris Craik float mElevation; 462d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mTranslationX, mTranslationY, mTranslationZ; 463d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mRotation, mRotationX, mRotationY; 464d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mScaleX, mScaleY; 465d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck float mPivotX, mPivotY; 466d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mLeft, mTop, mRight, mBottom; 467d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck int mWidth, mHeight; 468d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mPivotExplicitlySet; 469f7483e3af0513a1baa8341d403df2e0c0896a9ffJohn Reck bool mMatrixOrPivotDirty; 470d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck bool mCaching; 471d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mPrimitiveFields; 472d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 473acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mStaticMatrix; 474acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck SkMatrix* mAnimationMatrix; 475acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 476d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 477d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * These fields are all generated from other properties and are not set directly. 478d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 479d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck struct ComputedFields { 480d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ComputedFields(); 481d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck ~ComputedFields(); 482d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck 483d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck /** 484d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * Stores the total transformation of the DisplayList based upon its scalar 485d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * translate/rotate/scale properties. 486d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck * 48749e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * In the common translation-only case, the matrix isn't necessarily allocated, 48849e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik * and the mTranslation properties are used directly. 489d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck */ 49049e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik SkMatrix* mTransformMatrix; 49149e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik 49249e6c73913e9bee58ea5e3984be151ee8e033163Chris Craik Sk3DView mTransformCamera; 493d0a0b2a3140bfb1819a116413ce9d81886697a07John Reck } mComputedFields; 494acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck}; 495acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 496acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace uirenderer */ 497acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck} /* namespace android */ 498acb6f07623b7df3d4179f70ae03ade574616ffa6John Reck 499b49f446c98096c4790a11d9b5bc83a4e585278c9Chris Craik#endif /* RENDERNODEPROPERTIES_H */ 500