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