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 243b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy#include <androidfw/ResourceTypes.h> 253b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 265b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#include "Rect.h" 273b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy#include "UvMapper.h" 28f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 29272a685f17cc4828257e521a6f62b7b17870f75eJohn Reck#include <vector> 30272a685f17cc4828257e521a6f62b7b17870f75eJohn Reck 31f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace android { 32f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace uirenderer { 33f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 34e84a208317e0ed388fcdad1e6743c7849acb51b0Chris Craikstruct TextureVertex; 352dc236b2bae13b9a0ed9b3f7320502aecd7983b3Tom Hudson 364bb942083a0d4db746adf95349108dd8ef842e32Romain Guy/////////////////////////////////////////////////////////////////////////////// 374bb942083a0d4db746adf95349108dd8ef842e32Romain Guy// 9-patch structures 384bb942083a0d4db746adf95349108dd8ef842e32Romain Guy/////////////////////////////////////////////////////////////////////////////// 394bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 40564acf7c9bff822f608cda0d5df0a64a9f9aaefdChris Craikclass Patch { 41564acf7c9bff822f608cda0d5df0a64a9f9aaefdChris Craikpublic: 428820fd1d82acaefda98ae73ccf61413d5044f9f3Chris Craik Patch(const float bitmapWidth, const float bitmapHeight, 438820fd1d82acaefda98ae73ccf61413d5044f9f3Chris Craik float width, float height, 448820fd1d82acaefda98ae73ccf61413d5044f9f3Chris Craik const UvMapper& mapper, const Res_png_9patch* patch); 45f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 463b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy /** 473b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * Returns the size of this patch's mesh in bytes. 483b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy */ 493b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy uint32_t getSize() const; 50f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 5151d6a3db97bdd5315f1a17a4b447d10a92217b98Chris Craik std::unique_ptr<TextureVertex[]> vertices; 52e5c6584a402fb3b1fe0507e4e00e601bec8f1bbcChris Craik uint32_t verticesCount = 0; 53e5c6584a402fb3b1fe0507e4e00e601bec8f1bbcChris Craik uint32_t indexCount = 0; 54e5c6584a402fb3b1fe0507e4e00e601bec8f1bbcChris Craik bool hasEmptyQuads = false; 55272a685f17cc4828257e521a6f62b7b17870f75eJohn Reck std::vector<Rect> quads; 56fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy 578820fd1d82acaefda98ae73ccf61413d5044f9f3Chris Craik GLintptr positionOffset = 0; 58e5c6584a402fb3b1fe0507e4e00e601bec8f1bbcChris Craik GLintptr textureOffset = 0; 596f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy 603b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guyprivate: 613b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void generateRow(const int32_t* xDivs, uint32_t xCount, TextureVertex*& vertex, 623b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy float y1, float y2, float v1, float v2, float stretchX, float rescaleX, 6341d35aef06c2a570a45474a01ca95a6cb9c29d9eRomain Guy float width, float bitmapWidth, uint32_t& quadCount); 643b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy void generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2, 653b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy float u1, float v1, float u2, float v2, uint32_t& quadCount); 663b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 678820fd1d82acaefda98ae73ccf61413d5044f9f3Chris Craik const uint32_t* mColors; 683b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy UvMapper mUvMapper; 69f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // struct Patch 70f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 71f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace uirenderer 72f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace android 73f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 745b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_PATCH_H 75