1f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/*
2f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Copyright (C) 2010 The Android Open Source Project
3f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy *
4f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * you may not use this file except in compliance with the License.
6f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * You may obtain a copy of the License at
7f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy *
8f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy *
10f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Unless required by applicable law or agreed to in writing, software
11f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * See the License for the specific language governing permissions and
14f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * limitations under the License.
15f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy */
16f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_PATCH_H
185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_PATCH_H
19f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
20f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include <sys/types.h>
21f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
2203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include <GLES2/gl2.h>
2303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy
245b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#include <utils/Vector.h>
255b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy
263b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy#include <androidfw/ResourceTypes.h>
273b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy
285b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#include "Rect.h"
293b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy#include "UvMapper.h"
30f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include "Vertex.h"
31f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
32f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace android {
33f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace uirenderer {
34f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
354bb942083a0d4db746adf95349108dd8ef842e32Romain Guy///////////////////////////////////////////////////////////////////////////////
364bb942083a0d4db746adf95349108dd8ef842e32Romain Guy// 9-patch structures
374bb942083a0d4db746adf95349108dd8ef842e32Romain Guy///////////////////////////////////////////////////////////////////////////////
384bb942083a0d4db746adf95349108dd8ef842e32Romain Guy
39f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guystruct Patch {
403b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    Patch();
41fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy    ~Patch();
42f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
433b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    /**
443b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy     * Returns the size of this patch's mesh in bytes.
453b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy     */
463b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    uint32_t getSize() const;
47f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
4803c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy    TextureVertex* vertices;
49f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy    uint32_t verticesCount;
503b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    uint32_t indexCount;
515b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    bool hasEmptyQuads;
52a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy    Vector<Rect> quads;
53fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy
543b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    GLintptr offset;
553b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    GLintptr textureOffset;
566f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy
573b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    TextureVertex* createMesh(const float bitmapWidth, const float bitmapHeight,
5803c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy            float width, float height, const Res_png_9patch* patch);
593b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    TextureVertex* createMesh(const float bitmapWidth, const float bitmapHeight,
6003c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy            float width, float height, const UvMapper& mapper, const Res_png_9patch* patch);
61a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy
623b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guyprivate:
633b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    void generateRow(const int32_t* xDivs, uint32_t xCount, TextureVertex*& vertex,
643b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy            float y1, float y2, float v1, float v2, float stretchX, float rescaleX,
6541d35aef06c2a570a45474a01ca95a6cb9c29d9eRomain Guy            float width, float bitmapWidth, uint32_t& quadCount);
663b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    void generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
673b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy            float u1, float v1, float u2, float v2, uint32_t& quadCount);
683b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy
696cad75744ed3b81cf2c96f545368067b62c726ecRomain Guy    uint32_t* mColors;
703b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    UvMapper mUvMapper;
71f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // struct Patch
72f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
73f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace uirenderer
74f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace android
75f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
765b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_PATCH_H
77