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
39564acf7c9bff822f608cda0d5df0a64a9f9aaefdChris Craikclass Patch {
40564acf7c9bff822f608cda0d5df0a64a9f9aaefdChris Craikpublic:
413b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    Patch();
42fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy    ~Patch();
43f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
443b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    /**
453b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy     * Returns the size of this patch's mesh in bytes.
463b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy     */
473b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    uint32_t getSize() const;
48f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
4903c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy    TextureVertex* vertices;
50f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy    uint32_t verticesCount;
513b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    uint32_t indexCount;
525b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy    bool hasEmptyQuads;
53a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy    Vector<Rect> quads;
54fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy
553b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    GLintptr offset;
563b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    GLintptr textureOffset;
576f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy
583b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    TextureVertex* createMesh(const float bitmapWidth, const float bitmapHeight,
5903c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy            float width, float height, const Res_png_9patch* patch);
603b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    TextureVertex* createMesh(const float bitmapWidth, const float bitmapHeight,
6103c00b5a135e68d22ca5bb829b899ebda6ed7e9dRomain Guy            float width, float height, const UvMapper& mapper, const Res_png_9patch* patch);
62a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy
633b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guyprivate:
643b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    void generateRow(const int32_t* xDivs, uint32_t xCount, TextureVertex*& vertex,
653b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy            float y1, float y2, float v1, float v2, float stretchX, float rescaleX,
6641d35aef06c2a570a45474a01ca95a6cb9c29d9eRomain Guy            float width, float bitmapWidth, uint32_t& quadCount);
673b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    void generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
683b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy            float u1, float v1, float u2, float v2, uint32_t& quadCount);
693b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy
706381dd4ff212a95be30d2b445d40ff419ab076b4Narayan Kamath    const uint32_t* mColors;
713b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy    UvMapper mUvMapper;
72f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // struct Patch
73f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
74f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace uirenderer
75f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace android
76f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy
775b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_PATCH_H
78