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 29c1c5f0870282b56dafe5a4d756e4b9e6884655a7Chris Craik#include <utils/LinearAllocator.h> 300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/RefBase.h> 310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/SortedVector.h> 320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/String8.h> 330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <utils/Vector.h> 34e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include <cutils/compiler.h> 360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 37e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy#include <androidfw/ResourceTypes.h> 38e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#include "Debug.h" 400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define TRANSLATION 0x0001 420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define ROTATION 0x0002 430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define ROTATION_3D 0x0004 440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define SCALE 0x0008 450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#define PIVOT 0x0010 460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 470776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkBitmap; 480776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkPaint; 490776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkPath; 500776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkRegion; 510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 520776a6069365bdea83855db154fa2d37f9d1d808Chris Craiknamespace android { 530776a6069365bdea83855db154fa2d37f9d1d808Chris Craiknamespace uirenderer { 540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 55c3566d06421c8acc0aafb18f7e307e5725ce87e1Chris Craikclass DeferredDisplayList; 560776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass DisplayListOp; 570776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass DisplayListRenderer; 580776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass OpenGLRenderer; 590776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass Rect; 600776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass Layer; 610776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkiaColorFilter; 620776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass SkiaShader; 630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 64ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass ClipRectOp; 65ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass SaveLayerOp; 66ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass SaveOp; 67ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass RestoreToCountOp; 68ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 69ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikstruct DeferStateStruct { 70ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik DeferStateStruct(DeferredDisplayList& deferredList, OpenGLRenderer& renderer, int replayFlags) 71ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik : mDeferredList(deferredList), mRenderer(renderer), mReplayFlags(replayFlags) {} 72ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik DeferredDisplayList& mDeferredList; 73ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik OpenGLRenderer& mRenderer; 74ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik const int mReplayFlags; 75ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik}; 76ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 77ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikstruct ReplayStateStruct { 78ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik ReplayStateStruct(OpenGLRenderer& renderer, Rect& dirty, int replayFlags) 79ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik : mRenderer(renderer), mDirty(dirty), mReplayFlags(replayFlags), 80ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik mDrawGlStatus(DrawGlInfo::kStatusDone) {} 81ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik OpenGLRenderer& mRenderer; 82ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik Rect& mDirty; 83ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik const int mReplayFlags; 84ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik status_t mDrawGlStatus; 85ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik}; 86ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik/** 880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Refcounted structure that holds data used in display list stream 890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik */ 90ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craikclass DisplayListData : public LightRefBase<DisplayListData> { 910776a6069365bdea83855db154fa2d37f9d1d808Chris Craikpublic: 920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik LinearAllocator allocator; 930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<DisplayListOp*> displayListOps; 940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; 950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik/** 970776a6069365bdea83855db154fa2d37f9d1d808Chris Craik * Replays recorded drawing commands. 980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik */ 990776a6069365bdea83855db154fa2d37f9d1d808Chris Craikclass DisplayList { 1000776a6069365bdea83855db154fa2d37f9d1d808Chris Craikpublic: 1010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik DisplayList(const DisplayListRenderer& recorder); 1020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API ~DisplayList(); 1030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik // See flags defined in DisplayList.java 1050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik enum ReplayFlag { 1060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik kReplayFlag_ClipChildren = 0x1 1070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik }; 1080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API size_t getSize(); 1110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API static void destroyDisplayListDeferred(DisplayList* displayList); 1120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API static void outputLogBuffer(int fd); 1130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false); 1150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 116ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik void defer(DeferStateStruct& deferStruct, const int level); 117ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik void replay(ReplayStateStruct& replayStruct, const int level); 1180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void output(uint32_t level = 0); 1200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik ANDROID_API void reset(); 1220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRenderable(bool renderable) { 1240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mIsRenderable = renderable; 1250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool isRenderable() const { 1280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mIsRenderable; 1290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setName(const char* name) { 1320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (name) { 133450dc7554de90026a6dd2a1ec7108c1423fce18eRomain Guy char* lastPeriod = strrchr(name, '.'); 134450dc7554de90026a6dd2a1ec7108c1423fce18eRomain Guy if (lastPeriod) { 135450dc7554de90026a6dd2a1ec7108c1423fce18eRomain Guy mName.setTo(lastPeriod + 1); 136450dc7554de90026a6dd2a1ec7108c1423fce18eRomain Guy } else { 137450dc7554de90026a6dd2a1ec7108c1423fce18eRomain Guy mName.setTo(name); 138450dc7554de90026a6dd2a1ec7108c1423fce18eRomain Guy } 1390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 14252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy const char* getName() const { 14352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mName.string(); 14452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 14552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 146dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase void setClipToBounds(bool clipToBounds) { 147dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase mClipToBounds = clipToBounds; 1480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1500776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setStaticMatrix(SkMatrix* matrix) { 1510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik delete mStaticMatrix; 1520776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mStaticMatrix = new SkMatrix(*matrix); 1530776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 15552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy // Can return NULL 15652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy SkMatrix* getStaticMatrix() { 15752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mStaticMatrix; 15852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 15952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1600776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setAnimationMatrix(SkMatrix* matrix) { 1610776a6069365bdea83855db154fa2d37f9d1d808Chris Craik delete mAnimationMatrix; 1620776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (matrix) { 1630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mAnimationMatrix = new SkMatrix(*matrix); 1640776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 1650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mAnimationMatrix = NULL; 1660776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1670776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 1690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setAlpha(float alpha) { 1700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik alpha = fminf(1.0f, fmaxf(0.0f, alpha)); 1710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (alpha != mAlpha) { 1720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mAlpha = alpha; 1730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1740776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1750776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 17652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getAlpha() const { 17752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mAlpha; 17852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 17952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1800776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setHasOverlappingRendering(bool hasOverlappingRendering) { 1810776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHasOverlappingRendering = hasOverlappingRendering; 1820776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1830776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 18452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy bool hasOverlappingRendering() const { 18552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mHasOverlappingRendering; 18652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 18752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 1880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setTranslationX(float translationX) { 1890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (translationX != mTranslationX) { 1900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTranslationX = translationX; 1910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 1920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mTranslationX == 0.0f && mTranslationY == 0.0f) { 1930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~TRANSLATION; 1940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 1950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= TRANSLATION; 1960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1970776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 1990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 20052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getTranslationX() const { 20152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mTranslationX; 20252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 20352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setTranslationY(float translationY) { 2050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (translationY != mTranslationY) { 2060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTranslationY = translationY; 2070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mTranslationX == 0.0f && mTranslationY == 0.0f) { 2090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~TRANSLATION; 2100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= TRANSLATION; 2120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 21652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getTranslationY() const { 21752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mTranslationY; 21852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 21952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRotation(float rotation) { 2210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (rotation != mRotation) { 2220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRotation = rotation; 2230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mRotation == 0.0f) { 2250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~ROTATION; 2260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= ROTATION; 2280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 23252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRotation() const { 23352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRotation; 23452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 23552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRotationX(float rotationX) { 2370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (rotationX != mRotationX) { 2380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRotationX = rotationX; 2390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mRotationX == 0.0f && mRotationY == 0.0f) { 2410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~ROTATION_3D; 2420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= ROTATION_3D; 2440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 24852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRotationX() const { 24952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRotationX; 25052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 25152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2520776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRotationY(float rotationY) { 2530776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (rotationY != mRotationY) { 2540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRotationY = rotationY; 2550776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2560776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mRotationX == 0.0f && mRotationY == 0.0f) { 2570776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~ROTATION_3D; 2580776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2590776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= ROTATION_3D; 2600776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2610776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2620776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 26452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRotationY() const { 26552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRotationY; 26652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 26752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setScaleX(float scaleX) { 2690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (scaleX != mScaleX) { 2700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mScaleX = scaleX; 2710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mScaleX == 1.0f && mScaleY == 1.0f) { 2730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~SCALE; 2740776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2750776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= SCALE; 2760776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2770776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2780776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2790776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 28052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getScaleX() const { 28152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mScaleX; 28252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 28352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 2840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setScaleY(float scaleY) { 2850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (scaleY != mScaleY) { 2860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mScaleY = scaleY; 2870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 2880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mScaleX == 1.0f && mScaleY == 1.0f) { 2890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~SCALE; 2900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 2910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= SCALE; 2920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 2950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 29652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getScaleY() const { 29752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mScaleY; 29852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 29952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setPivotX(float pivotX) { 3010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotX = pivotX; 3020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mPivotX == 0.0f && mPivotY == 0.0f) { 3040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~PIVOT; 3050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 3060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= PIVOT; 3070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotExplicitlySet = true; 3090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 31152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy ANDROID_API float getPivotX(); 31252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setPivotY(float pivotY) { 3140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotY = pivotY; 3150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mPivotX == 0.0f && mPivotY == 0.0f) { 3170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags &= ~PIVOT; 3180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } else { 3190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixFlags |= PIVOT; 3200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mPivotExplicitlySet = true; 3220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 32452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy ANDROID_API float getPivotY(); 32552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setCameraDistance(float distance) { 3270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (distance != mCameraDistance) { 3280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mCameraDistance = distance; 3290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (!mTransformCamera) { 3310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTransformCamera = new Sk3DView(); 3320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTransformMatrix3D = new SkMatrix(); 3330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3340776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTransformCamera->setCameraLocation(0, 0, distance); 3350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 33852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getCameraDistance() const { 33952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mCameraDistance; 34052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 34152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setLeft(int left) { 3430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (left != mLeft) { 3440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft = left; 3450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 3460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3500776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 35252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getLeft() const { 35352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mLeft; 35452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 35552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3560776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setTop(int top) { 3570776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (top != mTop) { 3580776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop = top; 3590776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 3600776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3610776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3620776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3630776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3640776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 36652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getTop() const { 36752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mTop; 36852036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 36952036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setRight(int right) { 3710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (right != mRight) { 3720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRight = right; 3730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 3740776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3750776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3760776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3770776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3780776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3790776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 38052036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getRight() const { 38152036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mRight; 38252036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 38352036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setBottom(int bottom) { 3850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (bottom != mBottom) { 3860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mBottom = bottom; 3870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 3880776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 3890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 3900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 3930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 39452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy float getBottom() const { 39552036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy return mBottom; 39652036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy } 39752036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy 3980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setLeftTop(int left, int top) { 3990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (left != mLeft || top != mTop) { 4000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft = left; 4010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop = top; 4020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 4030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 4040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4060776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4090776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setLeftTopRightBottom(int left, int top, int right, int bottom) { 4110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (left != mLeft || top != mTop || right != mRight || bottom != mBottom) { 4120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft = left; 4130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop = top; 4140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRight = right; 4150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mBottom = bottom; 4160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mWidth = mRight - mLeft; 4170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mHeight = mBottom - mTop; 4180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 42452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy void offsetLeftRight(float offset) { 4250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (offset != 0) { 4260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mLeft += offset; 4270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mRight += offset; 4280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4300776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4310776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4320776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4330776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 43452036b19a5f82bc4d75cfcbff99c65df8d25a99bRomain Guy void offsetTopBottom(float offset) { 4350776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (offset != 0) { 4360776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mTop += offset; 4370776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mBottom += offset; 4380776a6069365bdea83855db154fa2d37f9d1d808Chris Craik if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) { 4390776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mMatrixDirty = true; 4400776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4410776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4420776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4430776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4440776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void setCaching(bool caching) { 4450776a6069365bdea83855db154fa2d37f9d1d808Chris Craik mCaching = caching; 4460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int getWidth() { 4490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mWidth; 4500776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4520776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int getHeight() { 4530776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mHeight; 4540776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4550776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4560776a6069365bdea83855db154fa2d37f9d1d808Chris Craikprivate: 457ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik void outputViewProperties(const int level); 458ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 459ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik template <class T> 460ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik inline void setViewProperties(OpenGLRenderer& renderer, T& handler, const int level); 461ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 462ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik template <class T> 463ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik inline void iterate(OpenGLRenderer& renderer, T& handler, const int level); 464ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 4650776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void init(); 4660776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4670776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void clearResources(); 4680776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4690776a6069365bdea83855db154fa2d37f9d1d808Chris Craik void updateMatrix(); 4700776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4710776a6069365bdea83855db154fa2d37f9d1d808Chris Craik class TextContainer { 4720776a6069365bdea83855db154fa2d37f9d1d808Chris Craik public: 4730776a6069365bdea83855db154fa2d37f9d1d808Chris Craik size_t length() const { 4740776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return mByteLength; 4750776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4760776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4770776a6069365bdea83855db154fa2d37f9d1d808Chris Craik const char* text() const { 4780776a6069365bdea83855db154fa2d37f9d1d808Chris Craik return (const char*) mText; 4790776a6069365bdea83855db154fa2d37f9d1d808Chris Craik } 4800776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4810776a6069365bdea83855db154fa2d37f9d1d808Chris Craik size_t mByteLength; 4820776a6069365bdea83855db154fa2d37f9d1d808Chris Craik const char* mText; 4830776a6069365bdea83855db154fa2d37f9d1d808Chris Craik }; 4840776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4850776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkBitmap*> mBitmapResources; 4860776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkBitmap*> mOwnedBitmapResources; 4870776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkiaColorFilter*> mFilterResources; 488e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy Vector<Res_png_9patch*> mPatchResources; 4890776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4900776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkPaint*> mPaints; 4910776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkPath*> mPaths; 4920776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SortedVector<SkPath*> mSourcePaths; 4930776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkRegion*> mRegions; 4940776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkMatrix*> mMatrices; 4950776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<SkiaShader*> mShaders; 4960776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Vector<Layer*> mLayers; 4970776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 4980776a6069365bdea83855db154fa2d37f9d1d808Chris Craik sp<DisplayListData> mDisplayListData; 4990776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5000776a6069365bdea83855db154fa2d37f9d1d808Chris Craik size_t mSize; 5010776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5020776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mIsRenderable; 5030776a6069365bdea83855db154fa2d37f9d1d808Chris Craik uint32_t mFunctorCount; 5040776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5050776a6069365bdea83855db154fa2d37f9d1d808Chris Craik String8 mName; 5069846de68f1b4f2720da421e5242017c28cfc93edChris Craik bool mDestroyed; // used for debugging crash, TODO: remove once invalid state crash fixed 5070776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5080776a6069365bdea83855db154fa2d37f9d1d808Chris Craik // View properties 509dd671599bed9d3ca28e2c744e8c224e1e15bc914Chet Haase bool mClipToBounds; 5100776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mAlpha; 5110776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mHasOverlappingRendering; 5120776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mTranslationX, mTranslationY; 5130776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mRotation, mRotationX, mRotationY; 5140776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mScaleX, mScaleY; 5150776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mPivotX, mPivotY; 5160776a6069365bdea83855db154fa2d37f9d1d808Chris Craik float mCameraDistance; 5170776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int mLeft, mTop, mRight, mBottom; 5180776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int mWidth, mHeight; 5190776a6069365bdea83855db154fa2d37f9d1d808Chris Craik int mPrevWidth, mPrevHeight; 5200776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mPivotExplicitlySet; 5210776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mMatrixDirty; 5220776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mMatrixIsIdentity; 5230776a6069365bdea83855db154fa2d37f9d1d808Chris Craik uint32_t mMatrixFlags; 5240776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mTransformMatrix; 5250776a6069365bdea83855db154fa2d37f9d1d808Chris Craik Sk3DView* mTransformCamera; 5260776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mTransformMatrix3D; 5270776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mStaticMatrix; 5280776a6069365bdea83855db154fa2d37f9d1d808Chris Craik SkMatrix* mAnimationMatrix; 5290776a6069365bdea83855db154fa2d37f9d1d808Chris Craik bool mCaching; 530ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik 531ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik /** 532ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * State operations - needed to defer displayList property operations (for example, when setting 533ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * an alpha causes a SaveLayerAlpha to occur). These operations point into mDisplayListData's 534ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * allocation, or null if uninitialized. 535ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * 5369846de68f1b4f2720da421e5242017c28cfc93edChris Craik * These are initialized (via friend re-constructors) when a displayList is issued in either 5379846de68f1b4f2720da421e5242017c28cfc93edChris Craik * replay or deferred mode. If replaying, the ops are not used until the next frame. If 5389846de68f1b4f2720da421e5242017c28cfc93edChris Craik * deferring, the ops may be stored in the DeferredDisplayList to be played back a second time. 539ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik * 5409846de68f1b4f2720da421e5242017c28cfc93edChris Craik * They should be used at most once per frame (one call to 'iterate') to avoid overwriting data 541ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik */ 542ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik ClipRectOp* mClipRectOp; 543ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik SaveLayerOp* mSaveLayerOp; 544ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik SaveOp* mSaveOp; 545ff78583d8a73ca35ce65b5d2592570ff6fb9901bChris Craik RestoreToCountOp* mRestoreToCountOp; 5460776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; // class DisplayList 5470776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5480776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; // namespace uirenderer 5490776a6069365bdea83855db154fa2d37f9d1d808Chris Craik}; // namespace android 5500776a6069365bdea83855db154fa2d37f9d1d808Chris Craik 5510776a6069365bdea83855db154fa2d37f9d1d808Chris Craik#endif // ANDROID_HWUI_OPENGL_RENDERER_H 552