1e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 2e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Copyright (C) 2010 The Android Open Source Project 3e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 4e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * you may not use this file except in compliance with the License. 6e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * You may obtain a copy of the License at 7e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 8e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 10e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unless required by applicable law or agreed to in writing, software 11e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * See the License for the specific language governing permissions and 14e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * limitations under the License. 15e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 16e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 17e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifndef ANDROID_NATIVE_WINDOW_H 18e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ANDROID_NATIVE_WINDOW_H 19e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 20e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#include <android/rect.h> 21e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 22e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus 23e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianextern "C" { 24e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif 25e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 26e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 27e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Pixel formats that a window can use. 28e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 29e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianenum { 30e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian WINDOW_FORMAT_RGBA_8888 = 1, 31e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian WINDOW_FORMAT_RGBX_8888 = 2, 32e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian WINDOW_FORMAT_RGB_565 = 4, 33e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 34e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 35e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianstruct ANativeWindow; 36e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ANativeWindow ANativeWindow; 37e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 38e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ANativeWindow_Buffer { 39e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The number of pixels that are show horizontally. 40e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t width; 41e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 42e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The number of pixels that are shown vertically. 43e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t height; 44e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 45e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The number of *pixels* that a line in the buffer takes in 46e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // memory. This may be >= width. 47e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t stride; 48e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 49e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The format of the buffer. One of WINDOW_FORMAT_* 50e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t format; 51e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 52e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The actual bits. 53e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian void* bits; 54e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 55e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // Do not touch. 56e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian uint32_t reserved[6]; 57e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian} ANativeWindow_Buffer; 58e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 59e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 60e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Acquire a reference on the given ANativeWindow object. This prevents the object 61e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * from being deleted until the reference is removed. 62e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 63e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianvoid ANativeWindow_acquire(ANativeWindow* window); 64e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 65e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 66e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Remove a reference that was previously acquired with ANativeWindow_acquire(). 67e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 68e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianvoid ANativeWindow_release(ANativeWindow* window); 69e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 70e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 71e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return the current width in pixels of the window surface. Returns a 72e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * negative value on error. 73e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 74e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getWidth(ANativeWindow* window); 75e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 76e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 77e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return the current height in pixels of the window surface. Returns a 78e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * negative value on error. 79e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 80e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getHeight(ANativeWindow* window); 81e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 82e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 83e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return the current pixel format of the window surface. Returns a 84e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * negative value on error. 85e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 86e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getFormat(ANativeWindow* window); 87e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 88e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 89e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Change the format and size of the window buffers. 90e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 91e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * The width and height control the number of pixels in the buffers, not the 92e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * dimensions of the window on screen. If these are different than the 93e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * window's physical size, then it buffer will be scaled to match that size 94e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * when compositing it to the screen. 95e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 96e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * For all of these parameters, if 0 is supplied then the window's base 97e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * value will come back in force. 98e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 99e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * width and height must be either both zero or both non-zero. 100e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 101e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 102e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, 103e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t width, int32_t height, int32_t format); 104e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 105e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 106e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Lock the window's next drawing surface for writing. 107e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * inOutDirtyBounds is used as an in/out parameter, upon entering the 108e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * function, it contains the dirty region, that is, the region the caller 109e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * intends to redraw. When the function returns, inOutDirtyBounds is updated 110e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * with the actual area the caller needs to redraw -- this region is often 111e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * extended by ANativeWindow_lock. 112e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 113e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, 114e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ARect* inOutDirtyBounds); 115e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 116e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 117e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unlock the window's drawing surface after previously locking it, 118e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * posting the new buffer to the display. 119e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 120e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_unlockAndPost(ANativeWindow* window); 121e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 122e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus 123e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 124e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif 125e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 126e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif // ANDROID_NATIVE_WINDOW_H 127