Layer.h revision 0bb5667b4ef91fefd0500fae0186789d15d54e0e
1dda570201ac851dd85af3861f7e575721d3345daRomain Guy/* 2dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Copyright (C) 2010 The Android Open Source Project 3dda570201ac851dd85af3861f7e575721d3345daRomain Guy * 4dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5dda570201ac851dd85af3861f7e575721d3345daRomain Guy * you may not use this file except in compliance with the License. 6dda570201ac851dd85af3861f7e575721d3345daRomain Guy * You may obtain a copy of the License at 7dda570201ac851dd85af3861f7e575721d3345daRomain Guy * 8dda570201ac851dd85af3861f7e575721d3345daRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9dda570201ac851dd85af3861f7e575721d3345daRomain Guy * 10dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Unless required by applicable law or agreed to in writing, software 11dda570201ac851dd85af3861f7e575721d3345daRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12dda570201ac851dd85af3861f7e575721d3345daRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dda570201ac851dd85af3861f7e575721d3345daRomain Guy * See the License for the specific language governing permissions and 14dda570201ac851dd85af3861f7e575721d3345daRomain Guy * limitations under the License. 15dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 16dda570201ac851dd85af3861f7e575721d3345daRomain Guy 17dda570201ac851dd85af3861f7e575721d3345daRomain Guy#ifndef ANDROID_UI_LAYER_H 18dda570201ac851dd85af3861f7e575721d3345daRomain Guy#define ANDROID_UI_LAYER_H 19dda570201ac851dd85af3861f7e575721d3345daRomain Guy 20f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include <sys/types.h> 21f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 22dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include <GLES2/gl2.h> 23dda570201ac851dd85af3861f7e575721d3345daRomain Guy 24dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include <SkXfermode.h> 25dda570201ac851dd85af3861f7e575721d3345daRomain Guy 26dda570201ac851dd85af3861f7e575721d3345daRomain Guy#include "Rect.h" 27dda570201ac851dd85af3861f7e575721d3345daRomain Guy 28dda570201ac851dd85af3861f7e575721d3345daRomain Guynamespace android { 29dda570201ac851dd85af3861f7e575721d3345daRomain Guynamespace uirenderer { 30dda570201ac851dd85af3861f7e575721d3345daRomain Guy 31dda570201ac851dd85af3861f7e575721d3345daRomain Guy/** 32dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Dimensions of a layer. 33dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 34dda570201ac851dd85af3861f7e575721d3345daRomain Guystruct LayerSize { 356c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy LayerSize(): width(0), height(0), id(0) { } 366c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy LayerSize(const uint32_t width, const uint32_t height): width(width), height(height), id(0) { } 376c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy LayerSize(const LayerSize& size): width(size.width), height(size.height), id(size.id) { } 38dda570201ac851dd85af3861f7e575721d3345daRomain Guy 39dda570201ac851dd85af3861f7e575721d3345daRomain Guy uint32_t width; 40dda570201ac851dd85af3861f7e575721d3345daRomain Guy uint32_t height; 41dda570201ac851dd85af3861f7e575721d3345daRomain Guy 426c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy // Incremental id used by the layer cache to store multiple 436c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy // LayerSize with the same dimensions 446c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy uint32_t id; 456c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy 46dda570201ac851dd85af3861f7e575721d3345daRomain Guy bool operator<(const LayerSize& rhs) const { 470bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy if (id != 0 && rhs.id != 0 && id != rhs.id) { 486c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy return id < rhs.id; 496c81893c626499e58c8eeb20d6c35ec4e1ce808bRomain Guy } 50dda570201ac851dd85af3861f7e575721d3345daRomain Guy if (width == rhs.width) { 51dda570201ac851dd85af3861f7e575721d3345daRomain Guy return height < rhs.height; 52dda570201ac851dd85af3861f7e575721d3345daRomain Guy } 53dda570201ac851dd85af3861f7e575721d3345daRomain Guy return width < rhs.width; 54dda570201ac851dd85af3861f7e575721d3345daRomain Guy } 55dda570201ac851dd85af3861f7e575721d3345daRomain Guy 56dda570201ac851dd85af3861f7e575721d3345daRomain Guy bool operator==(const LayerSize& rhs) const { 570bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy return id == rhs.id && width == rhs.width && height == rhs.height; 58dda570201ac851dd85af3861f7e575721d3345daRomain Guy } 59f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // struct LayerSize 60dda570201ac851dd85af3861f7e575721d3345daRomain Guy 61dda570201ac851dd85af3861f7e575721d3345daRomain Guy/** 62dda570201ac851dd85af3861f7e575721d3345daRomain Guy * A layer has dimensions and is backed by an OpenGL texture. 63dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 64dda570201ac851dd85af3861f7e575721d3345daRomain Guystruct Layer { 65dda570201ac851dd85af3861f7e575721d3345daRomain Guy /** 66f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guy * Coordinates of the layer. 67dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 68dda570201ac851dd85af3861f7e575721d3345daRomain Guy Rect layer; 69dda570201ac851dd85af3861f7e575721d3345daRomain Guy /** 70dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Name of the texture used to render the layer. 71dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 72dda570201ac851dd85af3861f7e575721d3345daRomain Guy GLuint texture; 73dda570201ac851dd85af3861f7e575721d3345daRomain Guy /** 74dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Opacity of the layer. 75dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 76f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guy int alpha; 77dda570201ac851dd85af3861f7e575721d3345daRomain Guy /** 78dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Blending mode of the layer. 79dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 80dda570201ac851dd85af3861f7e575721d3345daRomain Guy SkXfermode::Mode mode; 81dda570201ac851dd85af3861f7e575721d3345daRomain Guy /** 82dda570201ac851dd85af3861f7e575721d3345daRomain Guy * Indicates whether this layer should be blended. 83dda570201ac851dd85af3861f7e575721d3345daRomain Guy */ 84dda570201ac851dd85af3861f7e575721d3345daRomain Guy bool blend; 8538c85b907a478af96d71b9a5df5a2066b8475311Romain Guy /** 860bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * Indicates whether this layer has been used already. 8738c85b907a478af96d71b9a5df5a2066b8475311Romain Guy */ 8838c85b907a478af96d71b9a5df5a2066b8475311Romain Guy bool empty; 89dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // struct Layer 90dda570201ac851dd85af3861f7e575721d3345daRomain Guy 91dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // namespace uirenderer 92dda570201ac851dd85af3861f7e575721d3345daRomain Guy}; // namespace android 93dda570201ac851dd85af3861f7e575721d3345daRomain Guy 94dda570201ac851dd85af3861f7e575721d3345daRomain Guy#endif // ANDROID_UI_LAYER_H 95