10776a6069365bdea83855db154fa2d37f9d1d808Chris Craik/* 20776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Copyright (C) 2013 The Android Open Source Project 30776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * 40776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 50776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * you may not use this file except in compliance with the License. 60776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * You may obtain a copy of the License at 70776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * 80776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 90776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * 100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Unless required by applicable law or agreed to in writing, software 110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * See the License for the specific language governing permissions and 140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * limitations under the License. 150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik */ 160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#ifndef ANDROID_HWUI_DISPLAY_LIST_H 180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define ANDROID_HWUI_DISPLAY_LIST_H 190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 207031ff68bb998dbbd7caf3b2fd75eef747a86725Romain Guy#ifndef LOG_TAG 217031ff68bb998dbbd7caf3b2fd75eef747a86725Romain Guy #define LOG_TAG "OpenGLRenderer" 227031ff68bb998dbbd7caf3b2fd75eef747a86725Romain Guy#endif 237031ff68bb998dbbd7caf3b2fd75eef747a86725Romain Guy 240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <SkCamera.h> 250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <SkMatrix.h> 260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 27ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik#include <private/hwui/DrawGlInfo.h> 28ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/RefBase.h> 300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/SortedVector.h> 310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/String8.h> 320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/Vector.h> 330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <cutils/compiler.h> 340776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include "utils/LinearAllocator.h" 360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include "Debug.h" 380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define TRANSLATION 0x0001 400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define ROTATION 0x0002 410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define ROTATION_3D 0x0004 420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define SCALE 0x0008 430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define PIVOT 0x0010 440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 450776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkBitmap; 460776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkPaint; 470776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkPath; 480776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkRegion; 490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 500776a6069365bdea83855db154fa2d37f9d1d808Chris Craiknamespace android { 510776a6069365bdea83855db154fa2d37f9d1d808Chris Craiknamespace uirenderer { 520776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 53c3566d06421c8acc0aafb18f7e307e5725ce87e1Chris Craikclass DeferredDisplayList; 540776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass DisplayListOp; 550776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass DisplayListRenderer; 560776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass OpenGLRenderer; 570776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass Rect; 580776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass Layer; 590776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkiaColorFilter; 600776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkiaShader; 610776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 62ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass ClipRectOp; 63ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass SaveLayerOp; 64ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass SaveOp; 65ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass RestoreToCountOp; 66ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 67ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikstruct DeferStateStruct { 68ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik DeferStateStruct(DeferredDisplayList& deferredList, OpenGLRenderer& renderer, int replayFlags) 69ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik : mDeferredList(deferredList), mRenderer(renderer), mReplayFlags(replayFlags) {} 70ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik DeferredDisplayList& mDeferredList; 71ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik OpenGLRenderer& mRenderer; 72ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik const int mReplayFlags; 73ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik}; 74ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 75ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikstruct ReplayStateStruct { 76ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik ReplayStateStruct(OpenGLRenderer& renderer, Rect& dirty, int replayFlags) 77ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik : mRenderer(renderer), mDirty(dirty), mReplayFlags(replayFlags), 78ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik mDrawGlStatus(DrawGlInfo::kStatusDone) {} 79ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik OpenGLRenderer& mRenderer; 80ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik Rect& mDirty; 81ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik const int mReplayFlags; 82ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik status_t mDrawGlStatus; 83ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik}; 84ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik/** 860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Refcounted structure that holds data used in display list stream 870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik */ 88ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass DisplayListData : public LightRefBase<DisplayListData> { 890776a6069365bdea83855db154fa2d37f9d1d808Chris Craikpublic: 900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik LinearAllocator allocator; 910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<DisplayListOp*> displayListOps; 920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; 930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik/** 950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Replays recorded drawing commands. 960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik */ 970776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass DisplayList { 980776a6069365bdea83855db154fa2d37f9d1d808Chris Craikpublic: 990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik DisplayList(const DisplayListRenderer& recorder); 1000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API ~DisplayList(); 1010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik // See flags defined in DisplayList.java 1030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik enum ReplayFlag { 1040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik kReplayFlag_ClipChildren = 0x1 1050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik }; 1060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API size_t getSize(); 1090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API static void destroyDisplayListDeferred(DisplayList* displayList); 1100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API static void outputLogBuffer(int fd); 1110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false); 1130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 114ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 115ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik void defer(DeferStateStruct& deferStruct, const int level); 116ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik void replay(ReplayStateStruct& replayStruct, const int level); 1170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void output(uint32_t level = 0); 1190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API void reset(); 1210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRenderable(bool renderable) { 1230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mIsRenderable = renderable; 1240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool isRenderable() const { 1270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mIsRenderable; 1280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setName(const char* name) { 1310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (name) { 1320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mName.setTo(name); 1330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1340776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 13652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy const char* getName() const { 13752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mName.string(); 13852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 13952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 140dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase void setClipToBounds(bool clipToBounds) { 141dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase mClipToBounds = clipToBounds; 1420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setStaticMatrix(SkMatrix* matrix) { 1450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik delete mStaticMatrix; 1460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mStaticMatrix = new SkMatrix(*matrix); 1470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 14952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy // Can return NULL 15052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy SkMatrix* getStaticMatrix() { 15152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mStaticMatrix; 15252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 15352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setAnimationMatrix(SkMatrix* matrix) { 1550776a6069365bdea83855db154fa2d37f9d1d808Chris Craik delete mAnimationMatrix; 1560776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (matrix) { 1570776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mAnimationMatrix = new SkMatrix(*matrix); 1580776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 1590776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mAnimationMatrix = NULL; 1600776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1610776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1620776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setAlpha(float alpha) { 1640776a6069365bdea83855db154fa2d37f9d1d808Chris Craik alpha = fminf(1.0f, fmaxf(0.0f, alpha)); 1650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (alpha != mAlpha) { 1660776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mAlpha = alpha; 1670776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 17052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getAlpha() const { 17152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mAlpha; 17252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 17352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1740776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setHasOverlappingRendering(bool hasOverlappingRendering) { 1750776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHasOverlappingRendering = hasOverlappingRendering; 1760776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1770776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 17852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy bool hasOverlappingRendering() const { 17952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mHasOverlappingRendering; 18052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 18152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1820776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setTranslationX(float translationX) { 1830776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (translationX != mTranslationX) { 1840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTranslationX = translationX; 1850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 1860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mTranslationX == 0.0f && mTranslationY == 0.0f) { 1870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~TRANSLATION; 1880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 1890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= TRANSLATION; 1900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 19452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getTranslationX() const { 19552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mTranslationX; 19652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 19752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setTranslationY(float translationY) { 1990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (translationY != mTranslationY) { 2000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTranslationY = translationY; 2010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mTranslationX == 0.0f && mTranslationY == 0.0f) { 2030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~TRANSLATION; 2040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= TRANSLATION; 2060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 21052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getTranslationY() const { 21152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mTranslationY; 21252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 21352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRotation(float rotation) { 2150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (rotation != mRotation) { 2160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRotation = rotation; 2170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mRotation == 0.0f) { 2190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~ROTATION; 2200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= ROTATION; 2220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 22652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRotation() const { 22752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRotation; 22852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 22952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRotationX(float rotationX) { 2310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (rotationX != mRotationX) { 2320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRotationX = rotationX; 2330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2340776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mRotationX == 0.0f && mRotationY == 0.0f) { 2350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~ROTATION_3D; 2360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= ROTATION_3D; 2380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 24252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRotationX() const { 24352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRotationX; 24452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 24552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRotationY(float rotationY) { 2470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (rotationY != mRotationY) { 2480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRotationY = rotationY; 2490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2500776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mRotationX == 0.0f && mRotationY == 0.0f) { 2510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~ROTATION_3D; 2520776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2530776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= ROTATION_3D; 2540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2550776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2560776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2570776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 25852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRotationY() const { 25952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRotationY; 26052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 26152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2620776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setScaleX(float scaleX) { 2630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (scaleX != mScaleX) { 2640776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mScaleX = scaleX; 2650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2660776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mScaleX == 1.0f && mScaleY == 1.0f) { 2670776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~SCALE; 2680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= SCALE; 2700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 27452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getScaleX() const { 27552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mScaleX; 27652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 27752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2780776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setScaleY(float scaleY) { 2790776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (scaleY != mScaleY) { 2800776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mScaleY = scaleY; 2810776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2820776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mScaleX == 1.0f && mScaleY == 1.0f) { 2830776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~SCALE; 2840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= SCALE; 2860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 29052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getScaleY() const { 29152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mScaleY; 29252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 29352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setPivotX(float pivotX) { 2950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotX = pivotX; 2960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2970776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mPivotX == 0.0f && mPivotY == 0.0f) { 2980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~PIVOT; 2990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 3000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= PIVOT; 3010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotExplicitlySet = true; 3030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 30552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy ANDROID_API float getPivotX(); 30652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setPivotY(float pivotY) { 3080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotY = pivotY; 3090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mPivotX == 0.0f && mPivotY == 0.0f) { 3110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~PIVOT; 3120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 3130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= PIVOT; 3140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotExplicitlySet = true; 3160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 31852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy ANDROID_API float getPivotY(); 31952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setCameraDistance(float distance) { 3210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (distance != mCameraDistance) { 3220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mCameraDistance = distance; 3230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (!mTransformCamera) { 3250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTransformCamera = new Sk3DView(); 3260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTransformMatrix3D = new SkMatrix(); 3270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTransformCamera->setCameraLocation(0, 0, distance); 3290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 33252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getCameraDistance() const { 33352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mCameraDistance; 33452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 33552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setLeft(int left) { 3370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (left != mLeft) { 3380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft = left; 3390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 3400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 34652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getLeft() const { 34752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mLeft; 34852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 34952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3500776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setTop(int top) { 3510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (top != mTop) { 3520776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop = top; 3530776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 3540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3550776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3560776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3570776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3580776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3590776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 36052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getTop() const { 36152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mTop; 36252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 36352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3640776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRight(int right) { 3650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (right != mRight) { 3660776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRight = right; 3670776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 3680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 37452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRight() const { 37552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRight; 37652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 37752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3780776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setBottom(int bottom) { 3790776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (bottom != mBottom) { 3800776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mBottom = bottom; 3810776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 3820776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3830776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 38852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getBottom() const { 38952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mBottom; 39052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 39152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setLeftTop(int left, int top) { 3930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (left != mLeft || top != mTop) { 3940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft = left; 3950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop = top; 3960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 3970776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 3980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setLeftTopRightBottom(int left, int top, int right, int bottom) { 4050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (left != mLeft || top != mTop || right != mRight || bottom != mBottom) { 4060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft = left; 4070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop = top; 4080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRight = right; 4090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mBottom = bottom; 4100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 4110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 4120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 41852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy void offsetLeftRight(float offset) { 4190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (offset != 0) { 4200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft += offset; 4210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRight += offset; 4220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 42852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy void offsetTopBottom(float offset) { 4290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (offset != 0) { 4300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop += offset; 4310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mBottom += offset; 4320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4340776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setCaching(bool caching) { 4390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mCaching = caching; 4400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int getWidth() { 4430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mWidth; 4440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int getHeight() { 4470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mHeight; 4480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4500776a6069365bdea83855db154fa2d37f9d1d808Chris Craikprivate: 451ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik void outputViewProperties(const int level); 452ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 453ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik template <class T> 454ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik inline void setViewProperties(OpenGLRenderer& renderer, T& handler, const int level); 455ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 456ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik template <class T> 457ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik inline void iterate(OpenGLRenderer& renderer, T& handler, const int level); 458ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 4590776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void init(); 4600776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4610776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void clearResources(); 4620776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void updateMatrix(); 4640776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik class TextContainer { 4660776a6069365bdea83855db154fa2d37f9d1d808Chris Craik public: 4670776a6069365bdea83855db154fa2d37f9d1d808Chris Craik size_t length() const { 4680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mByteLength; 4690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik const char* text() const { 4720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return (const char*) mText; 4730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4740776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4750776a6069365bdea83855db154fa2d37f9d1d808Chris Craik size_t mByteLength; 4760776a6069365bdea83855db154fa2d37f9d1d808Chris Craik const char* mText; 4770776a6069365bdea83855db154fa2d37f9d1d808Chris Craik }; 4780776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4790776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkBitmap*> mBitmapResources; 4800776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkBitmap*> mOwnedBitmapResources; 4810776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkiaColorFilter*> mFilterResources; 4820776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4830776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkPaint*> mPaints; 4840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkPath*> mPaths; 4850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SortedVector<SkPath*> mSourcePaths; 4860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkRegion*> mRegions; 4870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkMatrix*> mMatrices; 4880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkiaShader*> mShaders; 4890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<Layer*> mLayers; 4900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik sp<DisplayListData> mDisplayListData; 4920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik size_t mSize; 4940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mIsRenderable; 4960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik uint32_t mFunctorCount; 4970776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik String8 mName; 4990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik // View properties 501dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase bool mClipToBounds; 5020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mAlpha; 5030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mHasOverlappingRendering; 5040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mTranslationX, mTranslationY; 5050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mRotation, mRotationX, mRotationY; 5060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mScaleX, mScaleY; 5070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mPivotX, mPivotY; 5080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mCameraDistance; 5090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int mLeft, mTop, mRight, mBottom; 5100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int mWidth, mHeight; 5110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int mPrevWidth, mPrevHeight; 5120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mPivotExplicitlySet; 5130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mMatrixDirty; 5140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mMatrixIsIdentity; 5150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik uint32_t mMatrixFlags; 5160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mTransformMatrix; 5170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Sk3DView* mTransformCamera; 5180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mTransformMatrix3D; 5190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mStaticMatrix; 5200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mAnimationMatrix; 5210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mCaching; 522ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 523ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik /** 524ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * State operations - needed to defer displayList property operations (for example, when setting 525ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * an alpha causes a SaveLayerAlpha to occur). These operations point into mDisplayListData's 526ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * allocation, or null if uninitialized. 527ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * 528ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * These are initialized (via friend constructors) when a displayList is issued in either replay 529ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * or deferred mode. If replaying, the ops are not used until the next frame. If deferring, the 530ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * ops may be stored in the DeferredDisplayList to be played back a second time. 531ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * 532ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * They should be used at most once per frame (one call to iterate) 533ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik */ 534ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik ClipRectOp* mClipRectOp; 535ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik SaveLayerOp* mSaveLayerOp; 536ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik SaveOp* mSaveOp; 537ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik RestoreToCountOp* mRestoreToCountOp; 5380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; // class DisplayList 5390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; // namespace uirenderer 5410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; // namespace android 5420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#endif // ANDROID_HWUI_OPENGL_RENDERER_H 544