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