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