native_window.h revision 951a39d68df598db08dfced8b4707755864a0492
1951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 2951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (C) 2010 The Android Open Source Project 3951a39d68df598db08dfced8b4707755864a0492Ying Wang * 4951a39d68df598db08dfced8b4707755864a0492Ying Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5951a39d68df598db08dfced8b4707755864a0492Ying Wang * you may not use this file except in compliance with the License. 6951a39d68df598db08dfced8b4707755864a0492Ying Wang * You may obtain a copy of the License at 7951a39d68df598db08dfced8b4707755864a0492Ying Wang * 8951a39d68df598db08dfced8b4707755864a0492Ying Wang * http://www.apache.org/licenses/LICENSE-2.0 9951a39d68df598db08dfced8b4707755864a0492Ying Wang * 10951a39d68df598db08dfced8b4707755864a0492Ying Wang * Unless required by applicable law or agreed to in writing, software 11951a39d68df598db08dfced8b4707755864a0492Ying Wang * distributed under the License is distributed on an "AS IS" BASIS, 12951a39d68df598db08dfced8b4707755864a0492Ying Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13951a39d68df598db08dfced8b4707755864a0492Ying Wang * See the License for the specific language governing permissions and 14951a39d68df598db08dfced8b4707755864a0492Ying Wang * limitations under the License. 15951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 16951a39d68df598db08dfced8b4707755864a0492Ying Wang 17951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef ANDROID_NATIVE_WINDOW_H 18951a39d68df598db08dfced8b4707755864a0492Ying Wang#define ANDROID_NATIVE_WINDOW_H 19951a39d68df598db08dfced8b4707755864a0492Ying Wang 20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <android/rect.h> 21951a39d68df598db08dfced8b4707755864a0492Ying Wang 22951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus 23951a39d68df598db08dfced8b4707755864a0492Ying Wangextern "C" { 24951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 25951a39d68df598db08dfced8b4707755864a0492Ying Wang 26951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 27951a39d68df598db08dfced8b4707755864a0492Ying Wang * Pixel formats that a window can use. 28951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 29951a39d68df598db08dfced8b4707755864a0492Ying Wangenum { 30951a39d68df598db08dfced8b4707755864a0492Ying Wang WINDOW_FORMAT_RGBA_8888 = 1, 31951a39d68df598db08dfced8b4707755864a0492Ying Wang WINDOW_FORMAT_RGBX_8888 = 2, 32951a39d68df598db08dfced8b4707755864a0492Ying Wang WINDOW_FORMAT_RGB_565 = 4, 33951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 34951a39d68df598db08dfced8b4707755864a0492Ying Wang 35951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct ANativeWindow; 36951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ANativeWindow ANativeWindow; 37951a39d68df598db08dfced8b4707755864a0492Ying Wang 38951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct ANativeWindow_Buffer { 39951a39d68df598db08dfced8b4707755864a0492Ying Wang // The number of pixels that are show horizontally. 40951a39d68df598db08dfced8b4707755864a0492Ying Wang int32_t width; 41951a39d68df598db08dfced8b4707755864a0492Ying Wang 42951a39d68df598db08dfced8b4707755864a0492Ying Wang // The number of pixels that are shown vertically. 43951a39d68df598db08dfced8b4707755864a0492Ying Wang int32_t height; 44951a39d68df598db08dfced8b4707755864a0492Ying Wang 45951a39d68df598db08dfced8b4707755864a0492Ying Wang // The number of *pixels* that a line in the buffer takes in 46951a39d68df598db08dfced8b4707755864a0492Ying Wang // memory. This may be >= width. 47951a39d68df598db08dfced8b4707755864a0492Ying Wang int32_t stride; 48951a39d68df598db08dfced8b4707755864a0492Ying Wang 49951a39d68df598db08dfced8b4707755864a0492Ying Wang // The format of the buffer. One of WINDOW_FORMAT_* 50951a39d68df598db08dfced8b4707755864a0492Ying Wang int32_t format; 51951a39d68df598db08dfced8b4707755864a0492Ying Wang 52951a39d68df598db08dfced8b4707755864a0492Ying Wang // The actual bits. 53951a39d68df598db08dfced8b4707755864a0492Ying Wang void* bits; 54951a39d68df598db08dfced8b4707755864a0492Ying Wang 55951a39d68df598db08dfced8b4707755864a0492Ying Wang // Do not touch. 56951a39d68df598db08dfced8b4707755864a0492Ying Wang uint32_t reserved[6]; 57951a39d68df598db08dfced8b4707755864a0492Ying Wang} ANativeWindow_Buffer; 58951a39d68df598db08dfced8b4707755864a0492Ying Wang 59951a39d68df598db08dfced8b4707755864a0492Ying Wang/** 60951a39d68df598db08dfced8b4707755864a0492Ying Wang * Acquire a reference on the given ANativeWindow object. This prevents the object 61951a39d68df598db08dfced8b4707755864a0492Ying Wang * from being deleted until the reference is removed. 62951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 63951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid ANativeWindow_acquire(ANativeWindow* window); 64951a39d68df598db08dfced8b4707755864a0492Ying Wang 65951a39d68df598db08dfced8b4707755864a0492Ying Wang/** 66951a39d68df598db08dfced8b4707755864a0492Ying Wang * Remove a reference that was previously acquired with ANativeWindow_acquire(). 67951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 68951a39d68df598db08dfced8b4707755864a0492Ying Wangvoid ANativeWindow_release(ANativeWindow* window); 69951a39d68df598db08dfced8b4707755864a0492Ying Wang 70951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 71951a39d68df598db08dfced8b4707755864a0492Ying Wang * Return the current width in pixels of the window surface. Returns a 72951a39d68df598db08dfced8b4707755864a0492Ying Wang * negative value on error. 73951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 74951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_getWidth(ANativeWindow* window); 75951a39d68df598db08dfced8b4707755864a0492Ying Wang 76951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 77951a39d68df598db08dfced8b4707755864a0492Ying Wang * Return the current height in pixels of the window surface. Returns a 78951a39d68df598db08dfced8b4707755864a0492Ying Wang * negative value on error. 79951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 80951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_getHeight(ANativeWindow* window); 81951a39d68df598db08dfced8b4707755864a0492Ying Wang 82951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 83951a39d68df598db08dfced8b4707755864a0492Ying Wang * Return the current pixel format of the window surface. Returns a 84951a39d68df598db08dfced8b4707755864a0492Ying Wang * negative value on error. 85951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 86951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_getFormat(ANativeWindow* window); 87951a39d68df598db08dfced8b4707755864a0492Ying Wang 88951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 89951a39d68df598db08dfced8b4707755864a0492Ying Wang * Change the format and size of the window buffers. 90951a39d68df598db08dfced8b4707755864a0492Ying Wang * 91951a39d68df598db08dfced8b4707755864a0492Ying Wang * The width and height control the number of pixels in the buffers, not the 92951a39d68df598db08dfced8b4707755864a0492Ying Wang * dimensions of the window on screen. If these are different than the 93951a39d68df598db08dfced8b4707755864a0492Ying Wang * window's physical size, then it buffer will be scaled to match that size 94951a39d68df598db08dfced8b4707755864a0492Ying Wang * when compositing it to the screen. 95951a39d68df598db08dfced8b4707755864a0492Ying Wang * 96951a39d68df598db08dfced8b4707755864a0492Ying Wang * For all of these parameters, if 0 is supplied then the window's base 97951a39d68df598db08dfced8b4707755864a0492Ying Wang * value will come back in force. 98951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 99951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, int32_t width, int32_t height, int32_t format); 100951a39d68df598db08dfced8b4707755864a0492Ying Wang 101951a39d68df598db08dfced8b4707755864a0492Ying Wang/** 102951a39d68df598db08dfced8b4707755864a0492Ying Wang * Lock the window's next drawing surface for writing. 103951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 104951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, 105951a39d68df598db08dfced8b4707755864a0492Ying Wang ARect* inOutDirtyBounds); 106951a39d68df598db08dfced8b4707755864a0492Ying Wang 107951a39d68df598db08dfced8b4707755864a0492Ying Wang/** 108951a39d68df598db08dfced8b4707755864a0492Ying Wang * Unlock the window's drawing surface after previously locking it, 109951a39d68df598db08dfced8b4707755864a0492Ying Wang * posting the new buffer to the display. 110951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 111951a39d68df598db08dfced8b4707755864a0492Ying Wangint32_t ANativeWindow_unlockAndPost(ANativeWindow* window); 112951a39d68df598db08dfced8b4707755864a0492Ying Wang 113951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifdef __cplusplus 114951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 115951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 116951a39d68df598db08dfced8b4707755864a0492Ying Wang 117951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif // ANDROID_NATIVE_WINDOW_H 118